前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CSS 边框秘探

CSS 边框秘探

作者头像
用户8921923
发布于 2022-10-24 10:56:28
发布于 2022-10-24 10:56:28
2.3K00
代码可运行
举报
文章被收录于专栏:全栈私房菜全栈私房菜
运行总次数:0
代码可运行

CSS 边框秘探

1. 半透明边框

相信你以前肯定尝试过 CSS 中的半透明颜色,比如 rgba()hsla()

假设我们想给一个容器设置「一层白色背景」「一道半透明白色边框」body 的背景会从它的半透明边框透上来。我们最开始的尝试可能是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
border: 10px solid hsla(0,0%,100%,.5);
background: white;

然而这个结果可能会令你摸不着头脑。

image-20220526140422734

我们的边框去哪儿了啊?而且如果我们连使用半透明颜色都不能实现半透明边框,那我们还有什么办法?!

尽管看起来并不像那么回事,但我们的边框其实是存在的。默认情况下,背景会延伸到边框所在的区域下层。这一点很容易验证,我们把元素的背景颜色改一下,就可以看出来:

image-20220526140949612

可以看到黄色背景延伸到边框所在的区域下层。在上面的例子中, 这个特性完全打破了我们的设计意图。我们所做的事情并没有让 body 的背景从半透明白色边框处透上来,而是在半透明白色边框处透出了这个容器自己的纯白实色背景,这实际上得到的效果跟纯白实色的边框看起来完全一样。

在 CSS 2.1 中,这就是背景的工作原理。值得庆幸的是,我们可以通过 background-clip 属性来调整上述默认行为所带来的不便。这个属性的初始值是 border-box,意味着背景会被元素的 border box (边框的外沿框)裁切掉。如果不希望背景侵入边框所在的范围,我们要做的就是把它的值设为 padding-box,这样浏览器就会用内边距的外沿来把背景裁切掉。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
border: 10px solid hsla(0,0%,100%,.5);
background: white;
background-clip: padding-box;

我们在下图中可以看到这个完美的结果。

image-20220526141545883

2. 多重边框

2.1 box-shadow

我们通常希望在 CSS 代码层面以更灵活的方式来调整边框样式。比如使用多个元素来模拟多重边框。不过,我们还有更好的办法来解决这个难题,并不需要添加无用的额外元素来污染我们的结构。那就是box-shadow

box-shadow 属性用于在元素的框架上添加阴影效果。你可以在同一个元素上设置多个阴影效果,并用逗号将他们分隔开。该属性可设置的值包括「阴影的X轴偏移量」「Y轴偏移量」「模糊半径」「扩散半径」「颜色」

你几乎可以在任何元素上使用box-shadow来添加阴影效果。如果元素同时设置了 border-radius属性 ,那么阴影也会有圆角效果。

大多数人可能已经用过box-shadow` 来生成投影。不太为人所知的是,它还接受第四个参数(「扩散半径」),通过指定正值或负值,可以让投影面积加大或者减小。一个正值的扩张半径加上两个为零的偏移量以及为零的模糊值,得到的“投影”其实就像一道实线边框。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
background-color: white;
box-shadow: 0 0 0 10px #655;

效果如下:

image-20220526225800420

这并没有什么了不起的,因为你完全可以用 border 属性来生成完全一样的边框效果。不过 box-shadow 的好处在于,它支持逗号分隔语法,我们可以创建任意数量的投影。因此,我们可以非常轻松地在上面的示例中再加上一道 red 颜色的“边框”:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
background-color: white;
box-shadow: 0 0 0 10px #655, 0 0 0 15px red;

效果如下:

image-20220526230022431

唯一需要注意的是,box-shadow 是层层叠加的,第一层投影位于最顶层,依次类推。因此,你需要按此规律调整扩张半径。比如说,在前面的代码中,我们想在外圈再加一道 5px 的外框,那就需要指定扩张半径的值为 15px10px+5px)。如果你愿意,甚至还可以在这些“边框”的底下再加一层常规的投影:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
background-color: white;
box-shadow: 0 0 0 10px #655,
            0 0 0 15px red,
            0 2px 5px 15px rgba(0,0,0,.6);

效果如下:

image-20220526230335732

多重投影解决方案在绝大多数场合都可以很好地工作,但有一些注意事项。

  • 投影的行为跟边框不完全一致,因为它不会影响布局,而且也不会受到 box-sizing 属性的影响。不过,你还是可以通过内边距或外边距(这取决于投影是内嵌和还是外扩的)来额外模拟出边框所需要占据的空间。
  • 上述方法所创建出的假“边框”出现在元素的外圈。它们并不会响应鼠标事件,比如悬停或点击。如果这一点非常重要,你可以给 box-shadow 属性加上 inset 关键字,来使投影绘制在元素的内圈。请注意,此时你需要增加额外的内边距来腾出足够的空隙。

2.2 outline

在某些情况下,你可能只需要两层边框,那就可以先设置一层常规边框,再加上 outline(描边)属性来产生外层的边框。这种方法的一大优点在于边框样式十分灵活,不像上面的 box-shadow 方案只能模拟实线边框 (假设我们需要产生虚线边框效果,box-shadow 就没辙了)。如果要得到下图的效果:

image-20220526230833651

代码可以这样写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
background: yellow;
border: 10px solid red;
outline: 5px solid blue;

描边的另一个好处在于,你可以通过 outline-offset 属性来控制它跟元素边缘之间的间距,这个属性甚至可以接受负值。这对于某些效果来说非常有用。举个例子,下图就实现了简单的缝边效果。

image-20220526231206158

对一层 dashed(虚线)描边使用 负 的 outline-offset 后, 可 以得到简单的缝边效果。

这个方法同样也有一些需要注意的地方。

  • 如上所述,它只适用于双层“边框”的场景,因为 outline 并不能接受用逗号分隔的多个值。如果我们需要获得更多层的边框,前一种方法就是我们唯一的选择了。
  • 边框不一定会贴合 border-radius 属性产生的圆角,因此如果元素是圆角的,它的描边可能还是直角的。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈私房菜 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
《CSS揭秘》读书总结:背景与边框
假设我们想给一个容器设置一层白色背景和一道半透明白色边框,body 的背景会从它的半透明边框透上来。我们最开始的尝试可能是这样的:
逆葵
2019/04/25
1.8K0
《CSS揭秘》读书总结:背景与边框
CSS3实现多样的边框效果
半透明边框 实现效果: 实现代码: <div> 你能看到半透明的边框吗? </div> div { /* 关键代码 */ border: 10px solid rgba(255,25
laixiangran
2018/07/25
9990
CSS3实现多样的边框效果
Css3新特性总结之边框与背景(一)
本系列主要总结Css3一些新特性的认识,来源于《css揭秘》书。 一、半透明边框 css3最好用hsla,而不是rgba,hsla是:h:颜色值(0~360);s:饱合度(0%~100%);l:亮度(0%~100%);a:透明度(0~1) background-clip:裁剪背景颜色,默认为border-box(背景颜色扩散到border);padding-box(背景颜色扩散到padding);content-box(背景颜色扩展到content) 示例代码: width:200px; height:20
sam dragon
2018/01/17
8270
【Java 进阶篇】CSS 属性
当你学习CSS时,了解CSS属性是非常重要的,因为这些属性控制了网页上元素的外观和布局。本文将详细介绍一些常见的CSS属性,包括文本属性、盒子模型属性、背景和边框属性、定位属性等。我们还将为每个属性提供示例代码,以便你更好地理解它们的用法。
繁依Fanyi
2023/10/12
2250
【Java 进阶篇】CSS 属性
【CSS】课程网站开发示例 ① ( 文件目录结构准备 | CSS 属性书写顺序 - 重要 )
最终的展示效果如下 , body 中的文本 , 内外边距清除后 , 紧贴浏览器左上角 ;
韩曙亮
2023/04/02
4960
【CSS】课程网站开发示例 ① ( 文件目录结构准备 | CSS 属性书写顺序 - 重要 )
css应知应会 第二集
h-shadow v-shadow blur spread color inset
李才哥
2020/08/17
1.3K0
css应知应会 第二集
CSS3实现“图片阴影”效果
利用多投影重叠的原理,实现曲线阴影与翘边阴影的效果,花一个小时看完的课程,理解的似懂非懂。直接发一下老师写的成品吧。用到来取。css都补上了注释。
AlexTao
2019/12/13
2K0
CSS3实现“图片阴影”效果
使用 CSS 的仿 GitHub 登录页面
在线演示地址:https://haiyong.site/demo/github.html 码上掘金地址:https://code.juejin.cn/pen/7130522560411729934
海拥
2022/09/28
1.9K0
使用 CSS 的仿 GitHub 登录页面
【CSS进阶】box-shadow 与 filter:drop-shadow 详解及奇技淫巧
box-shadow 在前端的 CSS 编写工作想必十分常见。但是 box-shadow 除去它的常规用法,其实还存在许多不为人知的奇技淫巧。 喜欢 markdown 版本的可以戳这里 。 box-shadow 常规用法 说到 box-shadow ,首先想到的必然是它能够生成阴影,所以称之为 shaodow ,简单看看它的语法: 基础属性语法 box-shadow 属性向框添加一个或多个阴影。 box-shadow: h-shadow v-shadow blur spread color inset;
Sb_Coco
2018/05/28
2.2K0
正则表达式——表单验证
代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>实验</title> <style type="text/css"> /*该元素获得焦点时,不出现虚线框(或高亮框)*/ *:focus{ outline:none; } form{ width: 750px; height: 500px; background-color: #FFC0CB; positi
王凡汎
2020/04/02
1.2K0
CSS多边框的几种实现方法
css3中我们知道可以使用box-shadow属性轻松的为元素添加阴影效果,并且可以设置多组效果,每组参数值用逗号隔开。如果把box-shadow特性的两个偏移量 h-shadow 、v-shadow设置为0,将模糊值blur也设置为0,此时增加扩张半径,就会使元素的投影变为实线边框。这样就可以模拟多边框效果了,首先看下box-shadow语法和参数。
javascript.shop
2019/09/04
2K0
CSS多边框的几种实现方法
【CSS】599- 9个很棒的CSS边框技巧
如果您是前端开发人员,那么几乎每天都会使用CSS边框。我发现了一些可以在您的项目中使用的有用的技巧。
pingan8787
2020/05/26
2.4K0
【CSS】CSS 总结 ⑤ ( CSS 盒子边框 | CSS 盒子模型内边距 | CSS 盒子模型外边距 | CSS 盒子模型圆角边框 | CSS 盒子模型阴影 ) ★
HTML 的 一个布局 可以看做一个 矩形的 盒子模型 , 该 盒子模型 是一个用于 容纳 标签元素 的容器 ;
韩曙亮
2024/03/12
5180
【CSS】CSS 总结 ⑤ ( CSS 盒子边框 | CSS 盒子模型内边距 | CSS 盒子模型外边距 | CSS 盒子模型圆角边框 | CSS 盒子模型阴影 ) ★
有趣的CSS小示例:好看的皮囊千篇一律,有趣的灵魂万里挑一
如果你看上图代码没有看懂,请看下图,我注释掉一行代码,你就明白了。原来是dot元素,沿着Y轴在循环位移,隐藏掉就让你看到了加载的动画效果。
Javanx
2019/09/04
1.1K0
有趣的CSS小示例:好看的皮囊千篇一律,有趣的灵魂万里挑一
掌握这 7 个 CSS 技巧,代码效率秒提升
正当我愁得要改 JS 的时候,隔壁老王一脸淡定:“兄弟,这些 CSS 技巧轻轻松松搞定,少写代码,效果还好。”于是,我抱着试一试的态度研究了一波,才发现 CSS 的隐藏技能简直是“救命稻草”!今天就把这些技巧整理分享给大家,让你应对需求时不用慌,写出既高效又美观的代码!
前端达人
2025/01/10
2400
掌握这 7 个 CSS 技巧,代码效率秒提升
寒假提升 | Day6 CSS 第四部分
当给父元素div(类名为box)设置font-size,color,text-align这些属性时,由于这些属性具有继承性,所以该父元素下的所有子元素(p,span,div)都会默认继承这些属性
Zkeq
2023/01/30
1.3K0
Css学习手册之基本篇
Css学习手册之基本篇 每次写前端都是一个痛苦的过程,总是静不下来,彻底的研究下前端的技术,导致每次套页面都是直接采用一些封装好的控件,而有时对这些样式不满意时,又得百度一下该怎么用,低效且不愉快,强制自己好好的学习下基本功 <!-- more --> I. 基本使用姿势 0. 几种css使用姿势 主要有下面三个使用姿势,其中优先级为 c > b > a a.直接引入css文件 b.在html中,直接写css: c.在标签中直接写css <!-- 方式 a --> <link rel="stylesheet
一灰灰blog
2018/04/18
1.9K0
Css学习手册之基本篇
IT课程 CSS基础 023_图片、背景
图片是网页中非常重要的媒体类型,恰到好处的使用图片可以使网页多彩生动,不再局限冷冰冰的文字。
zhaoJian.Net
2024/04/03
1780
IT课程 CSS基础 023_图片、背景
前端课程——盒子模型
盒子模型又称为框模型,HTML页面所有的元素都具有盒子模型,该模型用于设计HTML页面和实现HTML页面布局。
Dreamy.TZK
2020/04/09
1.2K0
CSS入门?一篇就够了!
CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局等外观显示样式。
对话、
2022/02/22
5.4K0
CSS入门?一篇就够了!
相关推荐
《CSS揭秘》读书总结:背景与边框
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验