CSS高階學習-1
優先順序
權值
標籤權值為1,類權值為10,ID權值最高為100。
p{color:red;} /*權值為1*/
p span{color:green;} /*權值為1+1=2*/
.warning{color:white;} /*權值為10*/
p span.warning{color:purple;} /*權值為1+1+10=12*/
#footer .note p{color:yellow;} /*權值為100+10+1=111*/
層疊
內聯式 > 嵌入式 > 外部式
重要性
為某些樣式設定具有最高權值,使用!important。
p{color:red!important;}
當網頁製作者不設定css樣式時,瀏覽器會按照自己的一套樣式來顯示網頁。
使用者也可以在瀏覽器中設定自己習慣的樣式,比如有的使用者習慣把字號設定為大一些,使其檢視網頁的文字更加清楚。
這時樣式優先順序為:瀏覽器預設的樣式 < 網頁製作者樣式 < 使用者自己設定的樣式
但!important優先順序樣式是個例外,權值高於使用者自己設定的樣式。
佈局模型
CSS包含3種基本的佈局模型,用英文概括為:Flow、Layer 和 Float。
在網頁中,元素有三種佈局模型:
1、流動模型(Flow)
2、浮動模型 (Float)
3、層模型(Layer)
流動模型
流動模型,流動(Flow)是預設的網頁佈局模式。網頁在預設狀態下的 HTML 網頁元素都是根據流動模型來分佈網頁內容的。
- 塊狀元素都會在所處的包含元素內自上而下按順序垂直延伸分佈,因為在預設狀態下,塊狀元素的寬度都為100%。實際上,塊狀元素都會以行的形式佔據位置。
- 在流動模型下,內聯元素都會在所處的包含元素內從左到右水平分佈顯示。(內聯元素可不像塊狀元素這麼霸道獨佔一行)
浮動模型
使用float:left;/float:right;
使塊狀元素可以並排顯示。
層模型
層佈局模型就像圖層編輯功能一樣,每個圖層能夠精確定位操作,但在網頁設計領域,由於網頁大小的活動性,層佈局沒能受到熱捧。
層模型有三種形式:
1、絕對定位(position: absolute)
為元素設定層模型中的絕對定位。
將元素從文件流中拖出來,然後使用left、right、top、bottom屬性相對於其最接近的一個具有定位屬性的父包含塊進行絕對定位。如果不存在這樣的包含塊,則相對於body元素,即相對於瀏覽器視窗。
2、相對定位(position: relative)
為元素設定層模型中的相對定位,通過left、right、top、bottom屬性確定元素在正常文件流中的偏移位置。相對定位完成的過程是首先按static(float)方式生成一個元素(並且元素像層一樣浮動了起來),然後相對於以前的位置移動,移動的方向和幅度由left、right、top、bottom屬性確定,偏移前的位置保留不動。
3、固定定位(position: fixed)
fixed:表示固定定位,與absolute定位型別類似,但它的相對移動的座標是檢視(螢幕內的網頁視窗)本身。檢視本身是固定的,它不會隨瀏覽器視窗的滾動條滾動而變化,固定定位的元素會始終位於瀏覽器視窗內檢視的某個位置,不會受文件流動影響。
使用規範
1、參照定位的元素必須是相對定位元素的前輩元素。
2、參照定位的元素必須加入position:relative;
3、定位元素加入position:absolute,便可以使用top、bottom、left、right來進行偏移定位了。
特殊效果
水平居中
使用text-align:center
來進行居中設定,但是當被設定元素是塊狀元素時,此設定不起作用。
滿足定寬和塊狀兩個條件的元素是可以通過設定“左右margin”值為“auto”來實現居中的
不定寬度的塊狀元素有三種方法居中(這三種方法目前使用的都很多):
加入 table 標籤
利用table標籤的長度自適應性---即不定義其長度也不預設父元素body的長度(table其長度根據其內文字長度決定),因此可以看做一個定寬度塊元素,然後再利用定寬度塊狀居中的margin的方法,使其水平居中。
設定 display: inline 方法:與第一種類似,顯示型別設為 行內元素,進行不定寬元素的屬性設定
設定 position:relative 和 left:50%:利用 相對定位 的方式,將元素向左偏移 50% ,即達到居中的目的
通過給父元素設定 float,然後給父元素設定 position:relative 和 left:50%,子元素設定 position:relative 和 left: -50% 來實現水平居中。
垂直居中
父元素高度確定的單行文字
父元素高度確定的單行文字的豎直居中的方法是通過設定父元素的 height 和 line-height 高度一致來實現的。(height: 該元素的高度,line-height: 顧名思義,行高(行間距),指在文字中,行與行之間的 基線間的距離 )。
line-height 與 font-size 的值之差,在 CSS 中成為“行間距”。分為兩半,分別加到一個文字行內容的頂部和底部。
這種文字行高與塊高一致帶來了一個弊端:當文字內容的長度大於塊的寬時,就有內容脫離了塊。
父元素高度確定的多行文字
方法一:使用插入 table (包括tbody、tr、td)標籤,同時設定 vertical-align:middle
在父元素設定此樣式時,會對inline-block型別的子元素都有用
方法二:在 chrome、firefox 及 IE8 以上的瀏覽器下可以設定塊級元素的 display 為 table-cell(設定為表格單元顯示),啟用 vertical-align 屬性,但注意 IE6、7 並不支援這個樣式, 相容性比較差。
不用新增多餘的無意義的標籤,但相容性不是很好,不相容 IE6、7,而且這樣修改display的block變成了table-cell,破壞了原有的塊狀元素的性質。
單位
單位 | 描述 | 使用場景 |
---|---|---|
px | 絕對單位,頁面按精確畫素展示 | |
em | 相對單位,基準點為父節點字型的大小 | 前端行業做移動端會普遍預設用rem或em,可以通過js控制根元素(或者用@media)來達到適配各種解析度的字型大小的效果 em是指字型高度 瀏覽器預設1em=16px, |
rem | 相對單位,可理解為”root em”, 相對根節點html的字型大小來計算 | CSS3新加屬性,chrome/firefox/IE9+支援 |
vw | 視窗寬度,1vw等於視窗寬度的1% | |
vh | 視窗高度,1vh等於視窗高度的1% | |
vmin | vw和vh中較小的那個 | |
vmax | vw和vh中較大的那個 |