当前位置: 首页 > Web前端 > CSS

CSSbox-sizing和background-clip解决背景显示范围的问题

时间:2023-03-31 13:39:22 CSS

以前学习CSS,首要的任务就是理解“盒子模型”,因为盒子模型是CSS中非常重要的模型概念,介绍了padding,margin,border,content的空间定位,今天的项目卡在一个简单的问题上,所以用一篇文章做个记录,提醒自己不要忘记,以免以后再卡。(下图是css的盒子模型)今天遇到的问题是,我用了半透明的边框,但是不能顺利的穿过显示背景的图案或者颜色。后来发现原来盒子的边框是预设好的。事实上,它就在盒子里面。border虽然在box里面,但是并不违反刚才的box模型,因为border围起来的空间还是padding和content,但是如果border变成半透明的,就会显示原来box的背景色。(如下图所示)为了让边框能够平滑的显示外面的背景图案或者颜色,需要用到box-sizing和background-clip这两个CSS3属性来设置,让我们来看看这两个属性如何使用:box-sizingbox-sizing有两个值可以设置,分别是:content-box(默认值)和border-box,如果是content-box的情况下,我们设置paddingbox或border的,box会被拉长,因为padding和border在box里面很长,但是如果我们把box-sizing设置为border-box,那么它会一直保持原来的大小,但是也会相对压缩内部空间,我自己设计网页的习惯是提前把所有的div都设置成border-box,这样计算尺寸更方便,也可以避免在内容上加padding使outerframelarger然后根据当前情况决定是否改成content-box。以下示例使用三个示例进行比较和参考。半透明的蓝色方块是原始尺寸。第一张图片设置padding:20px;第二张图片除了padding:20pxBorder:10pxdottedrgba(255,0,0,.5)外还有设置;第三张图和第二张图一样的设置,但是box-sizing设置为border-box,经过对比,可以很明显的看出彼此之间的差异。HTML:

CSS:div{width:120px;高度:120px;边距:20px0010px;填充:20px;显示:内联块;背景:url(地址);}div>div{背景:rgba(0,200,255,.4);保证金:0;padding:0;}.box{border:10pxdottedrgba(255,0,0,.5);}.default{/*box-sizing:content-box;*//*默认值*/}.border-box{box-sizing:border-box;}background-clip严格来说background-clip和box-sizing应该是不兼容的,但是由于设计上对于一个盒子,border,padding,margin往往是组合使用的,并且因为这个css3的属性,瞬间不知道错在哪里了,结果忘记怎么使用这个属性了。background-clip一共有三种设置,分别是:border-box(默认值)、padding-box、content-box。有意思的是,刚才box-sizing的默认值是content-box,这里默认值改为了border-box。下面三张图分别代表了这三个设置值的外观。我们可以看到第一张图是默认值下的。原框背景色(边框为半透明虚线),第二张图设置为padding-box,边框下不会有框背景色,最后一张设置为content-box,只有content区域会出现background,border下的background和padding会消失,这也是background(背景)裁剪(cutting)的意思。HTML:
CSS:div{width:120px;高度:120px;边距:20px0010px;显示:内联块;背景:网址(地址);填充:20px;}div>div{边距:0;填充: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;}也和background-clip有关盒子大小。相信了解之后,遇到调整boxsize的时候会更加得心应手!