博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
强大的CSS: box-sizing与background-clip,解决背景显示范围的问题
阅读量:2429 次
发布时间:2019-05-10

本文共 2489 字,大约阅读时间需要 8 分钟。

过去在学习CSS的时候,首要任务就是要理解“box model”,因为box model是CSS里头很重要的模型概念,描述了padding、margin、border与content的空间定位,今天的项目竟然卡在一个简单的小问题,因此就用一篇文章做个纪录提醒自己不要忘记,也避免之后遭遇到又会卡住了。(下图就是CSS的box model)

1240

今天遇到的问题是出在我用了一个半透明的border,但却无法顺利地透过并显示背景的图案或颜色,后来发现原来box预设的border,其实是在这个box之内的,虽然border在box的内部,但其实与刚刚的box model并没有相违背,因为border包住的空间,仍然是padding与content,只是如果把border变成半透明,就会把原本box的底色给呈现出来。(如下图)

1240

为了让border可以顺利的在外面显示背景的图案或颜色,就需要用到box-sizing与background-clip这两个CSS3的属性来设定,就让我们来分别看看这两个属性该如何使用:

box-sizing

box-sizing有两个值可以设定,分别是:content-box(预设值)与border-box,如果在content-box的情形下,我们设定了box的padding或border,box就会被撑开,因为padding和border是长在box内的,不过如果我们将box-sizing设定为border-box,那么就会一直维持原始的大小,但相对的也就会压缩内部的空间,我自己在设计网页的习惯,都会预先把所有的div设为border-box,如此一来才能更方便去计算大小,也能避免内容的东西加了padding就把外框变大了,然后再根据当下的情况,去决定是否要改为content-box。

下面的示例是用三个示例来对照参考,半透明的蓝色方块是原始的大小,第一张图设定了padding:20px;,第二张图除了padding:20px之外,还有设定了border:10px dotted rgba(255,0,0,.5);,第三张图则是与第二张图同样的设定,但box-sizing设为border-box,经由对照,就可以很明显的发现彼此的差异。

HTML:

CSS:

div{  width:120px;  height:120px;  margin:20px 0 0 10px;  padding:20px;  display:inline-block;  background:url(地址);}div>div{  background:rgba(0,200,255,.4);  margin:0;  padding:0;}.box{  border:10px dotted rgba(255,0,0,.5);}.default{  /*box-sizing:content-box;*/ /*预设值*/}.border-box{  box-sizing:border-box;}
1240

background-clip

严格说起来background-clip与box-sizing应该是八竿子打不着边,但因为在设计一个box的时候,往往都会border、padding和margin混合使用,也因为这个CSS3的属性,让我刹那间不知道是哪里写错了,结果原来是自己忘了属性该怎么使用。

background-clip共有三个设定值,分别是:border-box(预设值)、padding-box、content-box,很有趣的是,刚刚的box-sizing预设值为content-box,这里的预设值却变成了border-box,下面的三张图,分别代表了这三个设定值的长相,我们可以看到,第一张图在预设值的情形下,边框之下就是原本box的底色(边框是半透明的虚线),第二张图设为padding-box,border下方就不会有box底色,最后一个设定为content-box,就只会出现content区域的背景,border与padding下的背景都会消失,这也是background(背景)clip(剪裁)的意义所在。

HTML:

CSS:

div{  width:120px;  height:120px;  margin:20px 0 0 10px;  display:inline-block;  background:url(地址);  padding:20px;}div>div{  margin:0;  padding:0;  background:rgba(0,200,255,.4);}.bg-border-box{  /* background-clip:border-box; */ /*预设值*/}.bg-padding-box{  background-clip:padding-box;}.bg-content-box{  background-clip:content-box;}
1240

自己是一个五年的前端工程师,希望本文对你有帮助!

这里推荐一下我的前端学习交流扣qun:731771211 ,里面都是学习前端的,如果你想制作酷炫的网页,想学习编程。自己整理了一份2019最全面前端学习资料,从最基础的HTML+CSS+JS【炫酷特效,游戏,插件封装,设计模式】到移动端HTML5的项目实战的学习资料都有整理,送给每一位前端小伙伴,每天分享技术

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69901074/viewspace-2644859/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/69901074/viewspace-2644859/

你可能感兴趣的文章
Java 序列化和反序列化
查看>>
怎么让笔记本变路由器,亲身试验可用,不用下第三方软件
查看>>
DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016 解决方案
查看>>
java.util.ConcurrentModificationException
查看>>
linux 通过crt直接上传和下载文件和文件
查看>>
javabase64编码原理和解码,加密案例
查看>>
Java 位运算(移位、位与、或、异或、非) 以及负数的二进制相互计算
查看>>
MyBatis 二级缓存机制
查看>>
第一章,安装Vmware和Ubuntu
查看>>
jquery freemarker模板设置变量每次循环加1
查看>>
VMware虚拟机启动后出现黑屏,不能显示界面,无论安装的是ubuntu还是centos
查看>>
osi七层模型,什么是tcp/ip协议,tcp与http,UDP的区别,tcp三次握手过程和特点
查看>>
第二章,ubuntu系统的查看防火墙,切换root用户,设置固定ip、系统时间等
查看>>
hash原理总结
查看>>
mongodb的优缺点
查看>>
如何在cmd下,查找指定一个TXT文件的内容,把这个文本里包含关键字的所有行复制到一个新的文本中
查看>>
线程池和队列学习,队列在线程池中的使用,什么是队列阻塞,什么是有界队列
查看>>
复制集让mongodb的secondary支持读操作,因为存在读写延迟所以是否需要读写分离
查看>>
svn小乌龟怎么断开链接,怎么查看电脑中的隐藏文件,svn复制包或修改包名应注意什么
查看>>
DDR内存基础知识
查看>>