CSS布局(二) 盒子模型属性
盒子模型的屬性
寬高width/height
在CSS中,可以對任何塊級元素設(shè)置顯式高度。
如果指定高度大于顯示內(nèi)容所需高度,多余的高度會(huì)產(chǎn)生一個(gè)視覺效果,就好像有額外的內(nèi)邊距一樣;
如果指定高度小于顯示內(nèi)容所需高度,取決于overflow屬性,需要滾動(dòng)條需要設(shè)置為overflow:auto。
auto
寬高和margin可以設(shè)置auto。對于塊級元素來說,寬度設(shè)置為auto,則會(huì)盡可能的寬。詳細(xì)來說,元素寬度=包含塊寬度—元素水平外邊距-元素水平邊距寬度-元素水平內(nèi)邊距;
高度設(shè)置為auto,則會(huì)盡可能的窄。詳細(xì)來說,元素高度=恰好足以包含其內(nèi)聯(lián)內(nèi)容的高度
[注意]如果沒有顯式聲明包含塊的height,則元素的百分?jǐn)?shù)高度會(huì)重置為auto
?
?【最大最小寬高】
min-width | min-height
初始值: 0
應(yīng)用于: 塊級元素和替換元素
百分?jǐn)?shù): 相對于包含塊的寬度(高度)
max-width | max-heightt
初始值: none
應(yīng)用于: 塊級元素和替換元素
百分?jǐn)?shù): 相對于包含塊的寬度(高度)
[注意]當(dāng)最小寬度(高度)大于最大寬度(高度)時(shí),以最小寬高的值為準(zhǔn)
?
內(nèi)邊距padding
相比于盒模型的其他屬性(如在定位中經(jīng)常使用負(fù)值的margin),padding顯得中規(guī)中矩了很多,沒有什么兼容性,也沒有一些特殊的問題
對于行內(nèi)元素,左內(nèi)邊距應(yīng)用到元素的開始處,右內(nèi)邊距應(yīng)用到元素的結(jié)尾處,垂直內(nèi)邊距不影響行高,但會(huì)影響自身尺寸,加背景顏色可以看出
[注意]內(nèi)邊距不能是負(fù)值
padding
初始值: 未定義
百分?jǐn)?shù): 相對于包含塊的width
【50%】
塊級元素通過padding:50%可以實(shí)現(xiàn)正方形的效果,因?yàn)樗胶痛怪眕adding的百分比值都是相對于包含塊的寬度決定的,常常用于移動(dòng)端頭圖
?
?外邊距margin
設(shè)置外邊距margin會(huì)在元素外創(chuàng)建額外的空白,空白通常指不能放其他元素的區(qū)域,而且在這個(gè)區(qū)域中可以看到父元素的背景
margin
初始值: 未定義
應(yīng)用于: 所有元素
百分?jǐn)?shù): 相對于包含塊的width
[注意]對于普通元素來說,包含塊就是塊級父級元素,對于定位元素來說,包含塊是定位父級。所以,普通元素的margin百分比相對于塊級父級元素的width,定位元素的margin百分比相對于定位父級的width
?
margin可以設(shè)置為負(fù)值,margin和寬高支持auto,以及margin具有非常奇怪的重疊特性。
介紹外邊距margin的幾個(gè)重點(diǎn)部分,包括重疊、auto和無效情況
1.重疊
【前提】
??margin重疊又叫margin合并,發(fā)生這種情況有兩個(gè)前提
??1、只發(fā)生在block元素上(不包括float、absolute、inline-block元素)
??2、只發(fā)生在垂直方向上(不考慮writing-mode)
【分類】
??margin重疊的情況
1、相鄰的兄弟元素
<style> p{line-height: 2em; margin: 2px 0; background-color: lightblue; display:inline-block; width: 100%; } </style> <p>兄弟一</p> <p>兄弟二</p>?2、父級元素和第一個(gè)或最后一個(gè)子元素,父子級的margin重疊又叫margin傳遞
<style> .box{background-color: pink; height:30px; } .inner{ margin-top: 1em; background-color: lightblue; } </style> <div class="box"> <div class="inner">子級</div> </div>?在網(wǎng)頁布局中,因?yàn)閙argin重疊的原因,我們常常把margin作為一個(gè)“問題樣式”而盡量少地使用它。但實(shí)際上,它是在很大的作用的,
所以,我們要善用重疊,可以在列表項(xiàng)中同時(shí)使用margin-top和margin-bottom。這樣,使頁面結(jié)構(gòu)更具有健壯性,最后一個(gè)元素移除或位置調(diào)換,都不會(huì)破壞原生的布局
2.auto
??只有width/height和margin可以設(shè)置auto。
【為什么margin:auto無法實(shí)現(xiàn)垂直居中】
??水平方向可以居中是因?yàn)閴K級元素的寬度默認(rèn)是撐滿父級元素的,如果給寬度設(shè)置一個(gè)固定值,而左右margin設(shè)置為auto,則可以平分剩余空間
??垂直方向不可以居中是因?yàn)閴K級元素的高度默認(rèn)是內(nèi)容高度,與父級元素的高度并沒有直接的關(guān)系,而上下margin設(shè)置為auto,則被重置為0
margin: 0 auto;【為什么圖片使用margin:auto不能水平居中】
??圖片無法水平居中,類似于塊級元素?zé)o法垂直居中。因?yàn)閳D片的寬度width默認(rèn)是自身寬度,與父元素的寬度沒有直接關(guān)系。左右margin設(shè)置為auto,會(huì)被重置為0
??所以,圖片要水平居中,需要設(shè)置為display:block元素
3.無效情形
??1、行內(nèi)元素垂直margin無效
??因?yàn)樾袃?nèi)元素垂直布局主要是通過行高line-height和垂直對齊vertical-align來影響的,垂直margin并不會(huì)影響它們,所以不會(huì)影響垂直布局。而在顯示方式,margin區(qū)域不會(huì)顯示元素背景,所以也不會(huì)影響自身元素的顯示,所以行內(nèi)元素垂直margin無效。[注意]不包括inline-block
2、某些表格類元素margin無效
<thead>``<tbody>``<tfoot>``<tr>``<col>``<colgroup>``<td>``<th> 不可設(shè)置margin。? 3、BFC造成的margin看似無效
??左側(cè)元素使用浮動(dòng),右側(cè)元素使用overflow-hidden實(shí)現(xiàn)兩欄自適應(yīng)的布局時(shí),右側(cè)元素的margin-left值只有足夠大,才能看到效果。這是因?yàn)閙argin-left是相對于父元素左側(cè),而不是圖片右側(cè)
邊框border
元素外邊距內(nèi)就是元素的邊框border,邊框由粗細(xì)、樣式和顏色三部分組成,且先后順序無關(guān)
基礎(chǔ)樣式
border: border-width border-color border-style border: 1px red solid;邊框樣式
??如果一個(gè)邊框沒有樣式,邊框?qū)⒏静粫?huì)存在
??關(guān)于虛線dashed,在chrome/firefox下,虛線寬高比是3/1;而在IE下,虛線寬高比為2/1。所以在IE下虛線顯得比較密
??關(guān)于點(diǎn)線dotted,在chrome下,點(diǎn)線是方點(diǎn);而在IE/firefox下,點(diǎn)線是圓點(diǎn)
border-style:none(默認(rèn)) border-style:hidden/dotted/dashed/solid/double/groove/ridge/inset/outset(共9種)邊框單邊
border-top/border-right/border-bottom/border-left??圓角邊框
border-radius: none(默認(rèn)) border-radius: 6pxborder-radius: 10px 20px 30px 40px 四值順序是左上、右上、右下、左下
border-top-left-radius: 10px 20px; 左上
?
?【特殊圖形】
圓形
??元素的寬高相同,且圓角半徑為寬高的一半
div{width: 100px;height: 100px;border-radius: 50%; }半圓
??元素寬高不同,且圓角半徑與寬高要配合
div{width: 100px;height: 50px;border-radius: 50px 50px 0 0; }扇形
??元素寬高及一個(gè)圓角半徑相同
div{width: 50px;height: 50px;border-radius: 50px 0 0 0; }盒子陰影
??盒子陰影box-shadow可以為元素設(shè)置陰影
box-shadow: none(默認(rèn)) box-shadow: (h-shadow v-shadow blur spread color inset) ;h-shadow: 水平陰影位置(必須) v-shadow: 垂直陰影位置(必須) blur: 模糊距離(可選) spread: 陰影尺寸(可選) color: 陰影顏色,默認(rèn)和文本顏色一致(可選) inset: 內(nèi)部陰影(可選) box-shadow:10px 10px red,20px 20px blue;??使用盒子陰影box-shadow時(shí),有如下幾點(diǎn)注意事項(xiàng):
??1、可以使用多重陰影,但使用過多會(huì)造成性能差
??2、邊框在內(nèi)陰影之上,內(nèi)陰影在背景圖片之上,背景圖片在背景色之上,背景色在外陰影之上
??3、內(nèi)陰影對
<img>元素沒有任何效果??4、最先寫的陰影在最頂層
??5、該屬性與border-radius一脈相承,若通過border-radius設(shè)置為圓角,則box-shadow的最終呈現(xiàn)也將是圓角
總結(jié)
以上是生活随笔為你收集整理的CSS布局(二) 盒子模型属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打开就随机生长的树
- 下一篇: CSS--居中方式总结