【css揭秘】

文章目录

  • 背景与边框
    • 半透明边框
    • 多重边框
      • `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.mfbz.cn/a/353805.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

树莓派基础应用:智能家居监控系统

引言: 随着智能家居的普及,家居安全与监控逐渐成为人们关注的焦点。树莓派作为一种功能强大的迷你计算机,为我们提供了实现智能家居监控系统的可能。在本篇博客中,我们将通过构建一个简单的智能家居监控系统,来探索树莓…

node学习过程中的终端命令

冷的哥们手真tm冷,打字都是僵的,屮 目录 一、在学习nodejs过程中用到的终端命令总结 一、在学习nodejs过程中用到的终端命令 node -v nvm install 20.11.0 nvm list nvm list available nvm on nvm -v nvm use 20.11.0 node加要运行的js文件路径 ps&a…

docker compose实现mysql一主多从

参考了很多博客,死磕了几天,最终跑起来了,不容易,晚上喝瓶82年可乐庆祝下。 1、整体文件结构,这里忽略log、conf、data映射目录 2、docker-compose.yml文件内容如下: version: 3.3 services:mysql-master…

黑马程序员-瑞吉外卖-day5

修改实体类 package com.itheima.reggie.entity;import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode;i…

JS之隐式转换与布尔判定

大家思考一下 [ ] [ ] ? 答案是空字符串 为什么呢? 当做加法运算的时候,发现左右两端存在非原始类型,也就是引用类型对象,就会对对象做隐式类型转换 如何执行的?或者说怎么查找的? 第一步&…

中国新能源汽车持续跑出发展“加速度”,比亚迪迎来向上突破

2023年已经过去,对于汽车圈而言,2023年是中国车市的分水岭,在这一年,中国汽车工业70年以来首次进入全球序列,自主品牌强势霸榜,销量首次超过合资车。要知道,这是自大众于1984年进入中国市场成立…

Android App开发-简单控件(3)——常用布局

3.3 常用布局 本节介绍常见的几种布局用法,包括在某个方向上顺序排列的线性布局,参照其他视图的位置相对排列的相对布局,像表格那样分行分列显示的网格布局,CommonLayouts以及支持通过滑动操作拉出更多内容的滚动视图。 3.3.1 线…

Jenkins上跑自动化项目,case出现错误时,导致项目运行时间过长,该如何处理?

1、方案一:Jenkins上调整 进入配置: 构建环境: 自行选择超时时间即可~ 2、方案二:代码调整【python】 安装插件:pytest-timeout 选择一:装饰器用法:将单个测试用例标记为超时&…

Qt6入门教程 12:QAbstractButton

目录 一.状态 二.信号 三.使用 1.自定义按钮 2.多选 3.互斥 QAbstractButton类实现了一个抽象按钮,并且让它的子类来指定如何处理用户的动作,并指定如何绘制按钮。QAbstractButton类是所有按钮控件的基类。 QAbstractButton提供…

【Docker】数据持久化 挂载

Docker的镜像是只读的,但是容器是可写的,我们可以将数据写入到容器,不过一旦容器删除数据将会丢 失,那么有什么办法能将数据进行持久化存储呢? ——在宿主机上开辟一块地方,存储内容和docker容器的存储内…

TCP 三次握手 四次挥手以及滑动窗口

TCP 三次握手 简介: TCP 是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的 “ 连接” ,其实是客户端和服务器的内存里保存的一份关于对方的信息,如 IP 地址、端口号等。 TCP 可以…

HCIP复习课(bgp选路实验)

1.如图连接网络,合理规格IP地址,AS200内IGP协议为OSPF 2.R1属于AS 100:R2-R3-R4小AS 234 R5-R6-R7/AS567,同时声明大AS 200,R8属于AS300 3.R2-R5 R4-R7之间为联邦EBGP邻居关系 4.R1-R8之间通信 1、ip配置: R1: R2:…

js中 == 和 === 区别(分别在什么情况使用)

文章目录 一、等于操作符二、全等操作符三、区别小结 一、等于操作符 等于操作符用两个等于号( )表示,如果操作数相等,则会返回 true 前面文章,我们提到在JavaScript中存在隐式转换。等于操作符(&#x…

嵌入式——实时时钟(RTC)

目录 一、初识RTC 1.简介 2.特性 3.后备寄存器和RTC寄存器特性 二、RTC组成 1.相关寄存器 (1)控制寄存器高位(RTC_CRH) (2)控制寄存器低位(RTC_CRL) (3&#xf…

常用DOS命令讲解

DOS命令是DOS操作的基础,下面就来介绍一些常用的DOS命令。 DOS内部命令 1、DIR 含义:显示指定路径上所有文件或目录的信息 格式:DIR [盘符:][路径][文件名] [参数] 参数: /W:宽屏显示,一排显示…

Kotlin MultiPlatform:构建跨平台应用的未来

Kotlin MultiPlatform:构建跨平台应用的未来 1 引言 1.1 Kotlin MultiPlatform简介 Kotlin MultiPlatform(简称KMP)是一种由JetBrains开发的跨平台开发解决方案,它建立在Kotlin语言之上。KMP允许开发者使用一套Kotlin代码来构建…

ELK日志解决方案

ELK日志解决方案 ELK套件日志系统应该是Elasticsearch使用最广泛的场景之一了,Elasticsearch支持海量数据的存储和查询,特别适合日志搜索场景。广泛使用的ELK套件(Elasticsearch、Logstash、Kibana)是日志系统最经典的案例,使用Logstash和Be…

力扣hot100 最小栈 变种栈

Problem: 155. 最小栈 文章目录 思路💖 Stack 自定义 Node🍻 Code 思路 👩‍🏫 甜姨 💖 Stack 自定义 Node 时间复杂度: O ( 1 ) O(1) O(1) 空间复杂度: O ( n ) O(n) O(n) 🍻 Code class MinS…

基于Matlab/Simulink直驱式风电储能制氢仿真模型

接着还是以直驱式风电为DG中的研究对象,上篇博客考虑的风电并网惯性的问题,这边博客主要讨论功率消纳的问题。 考虑到风速是随机变化的,导致风电输出功率的波动性和间歇性问题突出;随着其应用规模的不断扩大以及风电在电网中渗透率…

【无标题】Gateway API 实践之(五)FSM Gateway 的会话保持功能

网关的会话保持功能是一种网络技术,旨在确保用户的连续请求在一段时间内被定向到同一台后端服务器。这种功能在需要保持用户状态或进行连续交互的场景中特别重要,例如在维护在线购物车、保持用户登录状态或处理多步骤事务时。 会话保持通过提供一致的用…
最新文章