css3中定義了許多的新特性,極大的豐富了css的表現力。本片博文意在探討其中的新特性box-shadow。
box-shadow語法如下
box-shadow: h-shadow v-shadow blur spread color inset;
利用box-shadow可以生成投影,增加立體感。但是巧用box-shadow的spread(擴張半徑)屬性也可以實現多重邊框效果。
傳統的多重邊框可以通過元素的多層嵌套實現。對各嵌套元素分別設置邊框,稍加調整就可實現多重邊框效果,但該方法會導致元素嵌套關系混亂,增加許多無意義的標簽。
使用box-shadow特性,將兩個偏移量 h-shadow 、v-shadow設置為0,將模糊值blur也設置為0,此時增加擴張半徑,就會使元素的投影變為實線邊框。即
.moreborder
{
position: absolute;
top: 30%;
left: 30%;
width: 20em;
height: 10em;
border-radius: 4px;
background: #fff;
box-shadow: 0 0 0 10px #D73C51,
}
此時可以發現在元素外圍生成了一圈邊框。但如果想要生成多重邊框,就需要了解box-shadow實際支持分隔語法,可以使用逗號來生成多重投影,同樣利用這個特性,可以生成多重邊框。即
.moreborder
{
position: absolute;
top: 30%;
left: 30%;
width: 20em;
height: 10em;
border-radius: 4px;
background: #fff;
box-shadow: 0 0 0 10px #D73C51,
0 0 0 15px #FFCD47,
0 2px 5px 15px rgba(0,0,0,.6);
}
這樣就生成了兩重邊框,在為該元素增加陰影,使其看起來更加立體。同理可以設置三層,四層…
如需要邊框生成在內圈,只需要在最后將默認的外部陰影改變為內部陰影inset
但是同時也應意識到該”邊框”不是真正的邊框,他只是元素的自身投影,使用firebug查看此元素,也可以看到border值為0,因此它不受很多屬性的影響。但同時因為該邊框為自身投影,因此當你改變元素本身形狀,例如設置圓角border-radius時不會出現邊框無法貼合元素的情況。
對一層 dashed(虛線)描邊使用負 的 outline-offset 后, 可以得到簡單的縫邊效果
background: #655;
border: 1px dashed #fff;
outline: 10px solid #655;
border: 1px dashed #333;
outline: 10px solid #666;
outline-offset: -20px;
拓展-邊框內圓角
只用box-shadow 邊框也會跟着圓角

加上outline可以填補外邊框圓角

background: tan; border-radius: .8em; padding: 1em; box-shadow: 0 0 0 .6em #655; outline: .6em solid #655;
