【css揭秘】

news2024/12/28 21:03:40

文章目录

  • 背景与边框
    • 半透明边框
    • 多重边框
      • `box-shadow`
      • `outline`
    • 背景定位
      • `background-position`
      • `background-origin`
      • calc()
    • 条纹背景
      • 水平条纹
  • 形状
    • 圆形
    • 圆柱
    • 自适应的椭圆
    • 半椭圆
    • 四分之一椭圆

背景与边框

半透明边框

目标:给一个容器设置一层白色背景和一道半透明白色边框
请添加图片描述
写法

border:10px solid hsla(0,0%,100%,.5);
background:white;

效果
请添加图片描述
原因:默认情况下,背景会延伸到边框所在的区域下层,所以在半透明白色边框处透出了这个容器自己的纯白实色背景,实际效果跟纯白实色的边框完全一样。
解决background-clip属性的初始值是border-box,意味着背景会被元素的border box(边框的外沿框)裁切掉。如果不希望背景侵入边框所在的范围,需要把该值设为padding-box,这样浏览器就会用内边距的外沿来把背景裁切掉:

border:10px solid hsla(0,0%,100%,.5);
background:white;
background-clip:padding-box;

多重边框

box-shadow

box-shadow:接受第四个参数(称作“扩张半径”),通过指定正值或负值,可以让投影面积加大或者减小。一个正值的扩张半径加上两个为零的偏移量以及为零的模糊值,得到的“投影”其实就像一道实线边框:

background:yellowgreen;
box-shadow:0 0 0 10px #655;

请添加图片描述
box-shadow支持逗号分隔语法,我们可以创建任意数量的投影。因此,我们可以非常轻松地在上面的示例中再加上一道deeppink颜色的“边框”:

background:yellowgreen;
box-shadow:0 0 0 10px #655, 0 0 0 15px deeppink;

双重边框
为“边框”的底下再加一层常规的投影:

background:yellowgreen;
box-shadow:0 0 0 10px #655,
            0 0 0 15px deeppink,
            0 2px 5px 15px rgba(0,0,0,.6);

⚠️注意:

  1. box-shadow是层层叠加的,第一层投影位于最顶层,所以,在前面的代码中,我们想在外圈再加一道5px的外框,那就需要指定扩张半径的值为15px(10px+5px)
  2. 投影的行为跟边框(border)不一样,它不影响布局,也不受box-sizing属性的影响。不过,你还是可以通过内边距或外边距(这取决于投影是内嵌和还是外扩的)来额外模拟出边框所需要占据的空间。
  3. 上述方法所创建出的假“边框”出现在元素的外圈。它们并不会响应鼠标事件,比如悬停或点击。如果这一点非常重要,你可以给box-shadow属性加上inset关键字,来使投影绘制在元素的内圈。请注意,此时你需要增加额外的内边距来腾出足够的空隙。
  4. 只能模拟实线边框

outline

如果只需要两层边框,那就可以先设置一层常规边框,再加上outline(描边)属性来产生外层的边框,如果想得到上图【双重边框的效果】,outline代码如下:

background:yellowgreen;
border:10px solid #655;
outline:5px solid deeppink;

outline可以模拟虚线边框,outline-offset属性来控制它跟元素边缘之间的间距,接受负值。对一层dashed(虚线)描边使用负的outline-offset后,可以得到简单的缝边效果:

background:yellowgreen;
outline:5px dashed deeppink;
outline-offset: -15px;

如下图所示:
请添加图片描述

背景定位

background-position

目标:针对容器某个角对背景图片做偏移定位,比如让背景图片跟右边缘保持20px的偏移量,同时跟底边保持10px的偏移量,如下图所示:(背景图片即虚线框框出来的范围)
请添加图片描述
解决办法background-position允许我们指定背景图片距离任意角的偏移量,只要我们在偏移量前面指定关键字:

background:url(code-pirate.svg) no-repeat #58a;
background-position:right 20px bottom 10px;

问题在不支持background-position扩展语法的浏览器中,背景图片会紧贴在左上角(背景图片的默认位置),而且它会干扰到文字的可读性,因此需要在代码中提供一个回退方案,把老套的bottom right定位值写进background的简写属性中即可:

background:url(code-pirate.svg) no-repeat bottom right #58a;# 但是这种方式存在的问题是:背景图片无法指定距离容器底部、右部的距离
background-position:right 20px bottom 10px;

background-origin

目标:针对容器某个角对背景图片做偏移定位,且偏移量与容器的内边距一致,比如容器内边距10px,背景图片距离容器底部10px,距离容器右边10px,依前述,代码应为:

padding:10px;
background:url(code-pirate.svg) no-repeat #58a;
background-position:right 10px bottom 10px;

问题:每次改动内边距的值都需要在三个地方更新这个值!能否让背景图片自动地跟着我们设定的内边距走,不用另外声明偏移量的值?
解决方案:每个元素身上都存在三个矩形框:border box(边框的外沿框)、padding box(内边距的外沿框)和content box(内容区的外沿框)。
请添加图片描述
默认情况下,background-position是以padding box为准的,这样边框才不会遮住背景图片。因此,top left默认指的是padding box的左上角。我们可以使用background-origin来改变这种现象,background-origin默认值为padding-box,如果把它的值改成content-box,那么在background-position属性中使用的边角关键字将会以内容区的边缘作为基准(也就是说,此时背景图片距离边角的偏移量就跟内边距保持一致了):

padding:10px;
background:url("code-pirate.svg") no-repeat #58a
            bottom right; /* 或 100% 100% */
background-origin:content-box;

如果想让偏移量与内边距稍稍有些不同(比如稍微收敛或超出),那么可以在使用background-origin: content-box的同时,再通过background-position的扩展语法来设置这些额外的偏移量。

calc()

目标:把背景图片定位到距离底边10px且距离右边20px的位置。
解决方案:如果我们仍然以左上角偏移的思路来考虑,其实就是希望有一个100% -20px的水平偏移量,以及100% -10px的垂直偏移量(这里其实不太懂,我理解为:background-position: calc(100%) calc(100%);就是背景图片位于容器右下方,然后各自向右边便宜20px,向上偏移10px,所以就是:background-position:calc(100% - 20px)calc(100% - 10px);

background:url("code-pirate.svg") no-repeat;
background-position:calc(100% - 20px)calc(100% - 10px);

⚠️注意:在使用calc()时,不要忘记在calc()函数内部的-和+运算符的两侧各加一个空白符

条纹背景

水平条纹

目标:使用css实现条纹
解决方案

  1. 生成等宽条纹
background:linear-gradient(#fb3 50%,#58a 50%);
background-size:100% 30px;
/* background-size:宽 高; */

请添加图片描述

  1. 创建不等宽的条纹,只需调整色标的位置值即可:
background:linear-gradient(#fb3 30%,#58a 0);
background-size:100% 30px;
height: 200px;

请添加图片描述

  1. 生成三种颜色的水平条纹:
background:linear-gradient(#fb3 33.3%,#58a 0,#58a 66.6%,yellowgreen 0);
background-size:100% 45px;
height: 200px;

请添加图片描述

linear-gradient(颜色 颜色终止位置),那么linear-gradient(#fb3 20%,#58a 80%)表示:容器顶部的20%区域被填充为#fb3实色,底部20%区域被填充为#58a实色,中间为二者过度区域

形状

圆形

容器宽高固定且相等,为其设置border-radiusborder-radius的值大于等于容器宽高可以得到一个圆形:

background:#fb3;
width:200px;
height:200px;
border-radius: 100px; /* >= 正方形边长的一半 */

圆柱

容器宽高固定且不相等,为其设置border-radiusborder-radius的值大于等于容器宽高可以得到一个圆柱:

background:#fb3;
width:300px;
height:200px;
border-radius: 100px;

自适应的椭圆

如果我们有一个尺寸为200px×150px的元素,就可以把它圆角的两个半径值分别指定为元素宽高的一半,从而得到一个精确的椭圆:

background:#fb3;
width:200px;
height:150px;
border-radius: 100px /75px; /* 容器宽高的一半 */

自适应的椭圆:

background:#fb3;
width:200px;
height:150px;
border-radius: 50%; /* 圆角的宽高始终为容器宽高的一半 */

半椭圆

目标:
请添加图片描述
基础知识border-radius其实是一个简写属性。我们可以为元素的每个角指定不同的值

  1. 如果我们传给它四个值,这四个值就会被分别从左上角开始以顺时针顺序应用到元素的各个拐角。
  2. 如果只提供了三个值,则意味着第四个值与第二值相同;
  3. 如果只有两个值,则意味着第三个值与第一个相同
    请添加图片描述

我们甚至可以为所有四个角提供完全不同的水平和垂直半径,方法是在斜杠前指定1~4个值,在斜杠后指定另外1~4个值。请注意这两组值是单独展开为四个值的。例如,当border-radius的值为10px / 5px 20px时,其效果相当于10px 10px 10px 10px / 5px20px 5px 20px。

还可以使用border-radius所对应的各个展开式属性:border-top-left-radius、border-top-right-radius、border-bottom-right-radius、border-bottom-left-radius来指定各个角的大小

思路

  1. 这个形状是垂直对称的,这意味着左上角和右上角的半径值应该是相同的;与此类似,左下角和右下角的半径值也应该是相同的。
  2. 顶部边缘并没有平直的部分(也就是说,整个顶边都是曲线),这意味着左上角和右上角的半径之和应该等于整个形状的宽度。
  3. 基于前两条观察,我们可以推断出,左半径和右半径在水平方向上的值应该均为50%。
  4. 再看看垂直方向,似乎顶部的两个圆角占据了整个元素的高度,而且底部完全没有任何圆角。因此,在垂直方向上border-radius的合理值似乎就是100%100% 0 0。
  5. 因为底部两个角的垂直圆角是零,那么它们的水平圆角是多少就完全不重要了,因为此时水平圆角总是会被计算为零。
    实现方案border-radius:50% /100% 100% 0 0;

四分之一椭圆

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1415720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习_集成学习之Bagging(集成多个模型,以降低整体的方差)

文章目录 Bagging 算法 —— 多个基模型的聚合决策树的聚合从树的聚合到随机森林从随机森林到极端随机森林 Bagging 算法 —— 多个基模型的聚合 Bagging 是我们要讲的第一种集成学习算法,是Bootstrap Aggregating 的缩写。有人把它翻译为套袋法、装袋法&#xff0…

Flutter App 生命周期观察监听

前言 本文主要讲解两种 Flutter生命周期观察监听 方式一:Flutter SDK 3.13 之前的方式,WidgetsBindingObserver; 方式二:Flutter SDK 3.13 开始的新方式,AppLifecycleListener; 测试平台:IO…

HCS 华为云Stack产品组件

HCS 华为云Stack产品组件 Cloud Provisioning Service(CPS) 负责laas的云平台层的部署和升级是laas层中真正面向硬件设备,并将其池化软件化的部件。 Service OM 资源池(计算/存储/网络)以及基础云服务(ECS/EVS/PC)的管理工具。 ManageOne ManageOne包括服务中心…

IMX6ULL驱动学习——通过总线设备驱动模型点亮野火开发板小灯【参考韦东山老师教程】

参考:【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想(学习设备树过渡部分)-CSDN博客 韦东山课程:LED模板驱动程序的改造_总线设备驱动模型 我使用的开发板:野火imx6ull pro 欢迎大家一起讨论学习 实现了总线设…

大型语言模型基础知识的可视化指南

直观分解复杂人工智能概念的工具和文章汇总 如今,LLM(大型语言模型的缩写)在全世界都很流行。没有一天不在宣布新的语言模型,这加剧了人们对错过人工智能领域的恐惧。然而,许多人仍在为 LLM 的基本概念而苦苦挣扎&…

c++学习第十三讲---STL常用容器---string容器

string容器: 一、string的本质: string和char*的区别: char*是一个指针 string是一个类,封装了char*,管理这个字符串,是char*的容器。 二、string构造函数: string() ; …

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Swiper容器组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Swiper容器组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Swiper容器组件 滑块视图容器,提供子组件滑动轮播显示的能力。…

独享http代理安全性是更高的吗?

不同于共享代理,独享代理IP为单一用户提供专用的IP,带来了一系列需要考虑的问题。今天我们就一起来看看独享代理IP的优势,到底在哪里。 我们得先来看看什么是代理IP。简单来说,代理服务器充当客户机和互联网之间的中间人。当你使用…

CIFAR-10数据集详析:使用卷积神经网络训练图像分类模型

1.数据集介绍 CIFAR-10 数据集由 10 个类的 60000 张 32x32 彩色图像组成,每类 6000 张图像。有 50000 张训练图像和 10000 张测试图像。 数据集分为5个训练批次和1个测试批次,每个批次有10000张图像。测试批次正好包含从每个类中随机选择的 1000 张图像…

GitHub 一周热点汇总第7期(2024/01/21-01/27)

GitHub一周热点汇总第7期 (2024/01/21-01/27) ,梳理每周热门的GitHub项目,离春节越来越近了,不知道大家都买好回家的票没有,希望大家都能顺利买到票,一起来看看这周的项目吧。 #1 rustdesk 项目名称:rust…

Redis 面试题 | 15.精选Redis高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

make: *** No rule to make target ‘clean‘. Stop.

项目场景: 在Ubuntu下编写makefile文件编译的时候,出现make: *** No rule to make target ‘clean’. Stop. 问题描述 make: *** No rule to make target ‘clean’. Stop. 解决方案: 原本我makefile文件的名字是MakeFile , 把它改为makefile以后完美运…

再学http

HTTP状态码 1xx 信息性状态码 websocket upgrade 2xx 成功状态码 200 服务器已成功处理了请求204(没有响应体)206(范围请求 暂停继续下载) 3xx 重定向状态码 301(永久) :请求的页面已永久跳转到新的url302(临时) :允许各种各样的重定向,一般…

FlashInternImage实战:使用 FlashInternImage实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度,DP多卡,EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

利用STM32CubeMX和Keil模拟器,3天入门FreeRTOS(5.3) ——递归锁

前言 (1)FreeRTOS是我一天过完的,由此回忆并且记录一下。个人认为,如果只是入门,利用STM32CubeMX是一个非常好的选择。学习完本系列课程之后,再去学习网上的一些其他课程也许会简单很多。 (2&am…

物联网协议Coap之C#基于Mozi的CoapClient调用解析

目录 前言 一、CoapClient相关类介绍 1、CoapClient类图 2、CoapClient的设计与实现 3、SendMessage解析 二、Client调用分析 1、创建CoapClient对象 2、实际发送请求 3、Server端请求响应 4、控制器寻址 总结 前言 在之前的博客内容中,关于在ASP.Net Co…

循序渐进,学会用pyecharts绘制桑基图

循序渐进,学会用pyecharts绘制桑基图 桑基图介绍 桑基图是比较冷门的可视化图形,知道的人不多,但它的可视化效果很惊艳,以后肯定会有越来越多的人使用,我平时使用桑基图,主要是用其绘制可视化图形做PPT。…

签到业务流程

1.技术选型 Redis主写入查询,Mysql辅助查询,传统签到多数都是直接采用mysql为存储DB,在大数据的情况下数据库的压力较大.查询速率也会随着数据量增大而增加.所以在需求定稿以后查阅了很多签到实现方式,发现用redis做签到会有很大的优势.本功能主要用到r…

JVM系列——基础知识

Java运行区域 程序计数器(Program Counter Register) 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里[1],字节码解释器工作时就是通过改变这个计数器的值来选取下一…

STM正点mini-跑马灯

一.库函数版 1.硬件连接 GPIO的输出方式:推挽输出 IO口输出为高电平时,P-MOS置高,输出为1,LED对应引脚处为高电平,而二极管正&#…