聊聊CSS盒模型以及CSS選擇器

Part 1 :盒模型(box model)

"every element in web design is a rectangular box."

在一個文檔中钢颂,每個元素都被表示為一個矩形的盒子。在CSS中计螺,使用標(biāo)準(zhǔn)盒模型(也可叫做框模型)描述這些矩形盒子中的每一個订咸。這個模型描述了元素所占空間的內(nèi)容把还。

每個盒子有四個邊:外邊距邊(margin), 邊框邊(border), 內(nèi)填充邊(padding) 與 內(nèi)容邊(content)。

1-設(shè)置外邊距邊(margin)

外邊距區(qū)域 margin area用空白區(qū)域擴(kuò)展邊框區(qū)域藻雌,以分開相鄰的元素孽拷。它的大小為 margin-box 的高寬吨掌。外邊距區(qū)域大小由 margin-top, margin-right, margin-bottom, margin-left及簡寫屬性 margin控制半抱。

屬性名稱 屬性用途
margin-top 設(shè)置元素的頂部外邊距
margin-right 設(shè)置與元素相關(guān)聯(lián)的盒子模型的右外邊距
margin-bottom 用于設(shè)置元素的底部外邊距
margin-left 設(shè)置與元素相關(guān)聯(lián)的盒子模型的左外邊距

上面屬性均允許使用負(fù)值

注意:這些值的順序是從上外邊距 (top) 開始圍著元素順時針旋轉(zhuǎn)的:
即:margin: top right bottom left

margin 屬性接受任何長度單位脓恕,可以是像素、英寸窿侈、毫米或 em炼幔。
margin 可以設(shè)置為 auto。也可為外邊距設(shè)置長度值或百分比(百分?jǐn)?shù)是相對于父元素的 width 計算的).

單邊外邊距屬性

可以使用單邊外邊距屬性為元素單邊上的外邊距設(shè)置值史简。
假設(shè)需要把 p 元素的左外邊距設(shè)置為 20px乃秀。可以采用以下方法:p {margin-left: 20px;}

值復(fù)制
若有值相同的邊距值圆兵,則不用將四個屬性值全部寫出
CSS 定義了一些規(guī)則跺讯,允許為外邊距指定少于 4 個值。規(guī)則如下:

  • 如果缺少左外邊距的值殉农,則使用右外邊距的值刀脏。
  • 如果缺少下外邊距的值,則使用上外邊距的值超凳。
  • 如果缺少右外邊距的值愈污,則使用上外邊距的值。

例子 要設(shè)置上 下 右 左邊距值為0.25em 1em 0.5em 0.5em.也就是說右邊和下邊的值相同轮傍。

h1 {margin: 0.25em 1em 0.5em;}

2-設(shè)置邊框邊(border)

邊框 (border) 是圍繞元素內(nèi)容和內(nèi)邊距的一條或多條線,CSS border 屬性允許你規(guī)定元素邊框的樣式(border-style)暂雹、寬度(border-style)和顏色(border-color)。

屬性名稱 屬性用途 使用方法
border-width 為邊框指定寬度 指定長度值(px, em)或使用 3 個關(guān)鍵字之一 (thin 创夜、medium(默認(rèn)值) 和 thick)
border-style 設(shè)置邊框樣式 10 個不同的非 inherit 樣式
border-color 設(shè)置邊框顏色 使用border-color屬性

同樣杭跪,border屬性的值也采用了 top-right-bottom-left 的順序

3-設(shè)置內(nèi)填充邊(padding)

CSS padding 屬性定義元素邊框與元素內(nèi)容之間的空白區(qū)域,padding 屬性接受長度值或百分比值,但不允許使用負(fù)值驰吓。

可以按照上揍魂、右、下棚瘟、左的順序分別設(shè)置各邊的內(nèi)邊距现斋,各邊均可以使用不同的單位(em/ ex / px)或百分比.

屬性名稱 屬性用途
padding-top 設(shè)置元素的上內(nèi)邊距
padding-right 設(shè)置與元素右內(nèi)邊距
padding-bottom 用于設(shè)置元素的下內(nèi)邊距
padding-left 設(shè)置元素的左內(nèi)邊距

4-設(shè)置內(nèi)容邊(content)

內(nèi)容區(qū)域content area 是包含元素真實內(nèi)容的區(qū)域。它通常包含背景偎蘸、顏色或者圖片等庄蹋,位于內(nèi)容邊界的內(nèi)部瞬内,它的大小為內(nèi)容寬度 或 content-box寬及內(nèi)容高度或content-box高。

content 屬性與 :before 及 :after 偽元素配合使用限书,來插入生成內(nèi)容虫蝶。

關(guān)于偽元素:"CSS introduces the concepts of pseudo-elements and pseudo-classes to permit formatting based on information that lies outside the document tree."
即偽元素用于創(chuàng)建一些不在文檔樹中的元素,并為其添加樣式倦西。更多詳情以后會專門整理~

A-content與:before 偽元素配合使用:
該偽元素允許創(chuàng)作人員在元素內(nèi)容的最前面插入生成內(nèi)容
B-content與:after偽元素配合使用能真,在元素之后添加內(nèi)容

例如:如何使用 :before 在元素內(nèi)容之前插入圖像

<!DOCTYPE html >
<html>
<head>
<style type="text/css">
h1:before {content:url(/logo_white.gif)}
</style>
</head>

<body>
<h1>This is a heading</h1>
<p>The :before pseudo-element inserts content before an element.</p>
<h1>This is a heading</h1>
</body>
</html>

CSS3中新增的盒模型計算方式:box-sizing

box-sizing 屬性允許您以特定的方式定義匹配某個區(qū)域的特定元素。

語法:box-sizing: content-box|border-box|inherit;

描述
content-box 這是由 CSS2.1 規(guī)定的寬度高度行為扰柠。寬度和高度分別應(yīng)用到元素的內(nèi)容框粉铐。在寬度和高度之外繪制元素的內(nèi)邊距和邊框。
border-box 為元素設(shè)定的寬度和高度決定了元素的邊框盒卤档。就是說蝙泼,為元素指定的任何內(nèi)邊距和邊框都將在已設(shè)定的寬度和高度內(nèi)進(jìn)行繪制。通過從已設(shè)定的寬度和高度分別減去邊框和內(nèi)邊距才能得到內(nèi)容的寬度和高度劝枣。
inherit 規(guī)定應(yīng)從父元素繼承 box-sizing 屬性的值汤踏。
CSS3中新增的邊框?qū)傩?/h5>
  • border-radius:創(chuàng)建圓角邊框
  • box-shadow:向矩形添加陰影
  • border-image:使用圖片來繪制邊框

Part2:選擇器(Selectors)

CSS選擇器用于選擇你想要的元素的樣式的模式。

選擇器的類別:
類選擇器,id選擇器,屬性選擇器 ,派生選擇器 舔腾,后代(包含)選擇器,子元素選擇器,相鄰兄弟選擇器

1-類選擇器:允許以一種獨立于文檔元素的方式來指定樣式溪胶。
該選擇器可以單獨使用,也可以與其他元素結(jié)合使用.
語法: * 選擇器名稱{樣式}

用法:

  • 獨立使用
  • 多類選擇器:通過把多個類選擇器鏈接在一起稳诚,僅可以選擇同時包含這些類名的元素(類名的順序不限)哗脖。
  • 結(jié)合元素選擇器來使用。
    eg.若希望只有段落顯示為紅色文本:
    p.important {color:red;}

eg.假設(shè) class 為 important 的所有元素都是粗體采桃,而 class 為 warning 的所有元素為斜體懒熙,class 中同時包含 important 和 warning 的所有元素還有一個銀色的背景 。就可以寫作:

.important.warning {background:silver;}

2-id選擇器:可以為標(biāo)有特定 id 的 HTML 元素指定特定的樣式普办。
語法:# 選擇器名稱 {樣式}

用法:

  • 獨立使用
  • 與派生選擇器一起使用:
    eg.
#sidebar p {
    font-style: italic;
    text-align: right;
    margin-top: 0.5em;
    }

3-屬性選擇器 :可以為擁有指定屬性的 HTML 元素設(shè)置樣式
語法 :元素名稱[指定屬性]{樣式}
用法:

  • 單個屬性值
    eg:把包含標(biāo)題(title)的所有元素變?yōu)榧t色
    *[title] {color:red;}

  • 根據(jù)具體屬性值選擇
    eg.將指向 Web 服務(wù)器上某個指定文檔的超鏈接變成紅色
    a[] {color: red;}

  • 子串匹配屬性選擇器

類型 描述
[abc^="def"] 選擇 abc 屬性值以 "def" 開頭的所有元素
[abc$="def"] 選擇 abc 屬性值以 "def" 結(jié)尾的所有元素
[abc*="def"] 選擇 abc 屬性值中包含子串 "def" 的所有元素

eg.

  • 特定屬性選擇類型
    eg.選擇 lang 屬性等于 en 或以 en- 開頭的所有元素
    *[lang|="en"] {color: red;}
  • 根據(jù)部分屬性值選擇
    eg.選擇 class 屬性中包含 important 的元素
    p[class~="important"] {color: red;}

4-派生選擇器:依據(jù)元素在其位置的上下文關(guān)系來定義樣式
語法:元素名{樣式}

5-后代(包含)選擇器:可以定義后代選擇器來創(chuàng)建一些規(guī)則工扎,使這些規(guī)則在某些文檔結(jié)構(gòu)中起作用,而在另外一些結(jié)構(gòu)中不起作用衔蹲。

語法:在后代選擇器中肢娘,規(guī)則左邊的選擇器一端包括兩個或多個用空格分隔的選擇器。選擇器之間的空格是一種結(jié)合符(combinator)舆驶。每個空格結(jié)合符可以解釋為“... 在 ... 找到”橱健、“... 作為 ... 的一部分”、“... 作為 ... 的后代”沙廉,但是要求必須從右向左讀選擇器拘荡。

eg.希望只對 h1 元素中的 em 元素應(yīng)用樣式
h1 em {color:red;}

上面這個規(guī)則會把作為 h1 元素后代的 em 元素的文本變?yōu)?紅色。其他 em 文本(如段落或塊引用中的 em)則不會被這個規(guī)則選中.

6-子元素選擇器:縮小范圍撬陵,只選擇某個元素的子元素

eg.選擇只作為 h1 元素子元素的 strong 元素
h1 > strong {color:red;}
語法解釋:子選擇器使用了大于號(子結(jié)合符)珊皿。
子結(jié)合符兩邊可以有空白符网缝,這是可選的。

7-相鄰兄弟選擇器:可選擇緊接在另一元素后的元素蟋定,且二者有相同父元素
語法:相鄰兄弟選擇器使用了加號(+)粉臊,即相鄰兄弟結(jié)合符(Adjacent sibling combinator)。與子結(jié)合符一樣驶兜,相鄰兄弟結(jié)合符旁邊可以有空白符扼仲。

eg.要增加緊接在 h1 元素后出現(xiàn)的段落的上邊距
h1 + p {margin-top:50px;}

選擇器分組

可以將任意多個選擇器分組在一起,對此沒有任何限制抄淑。

例如屠凶,如果想把很多元素顯示為灰色,可以使用類似如下的規(guī)則:
body, h2, p, table, th, td, pre, strong, em {color:gray;}
提示:通過分組蝇狼,創(chuàng)作者可以將某些類型的樣式“壓縮”在一起阅畴,這樣就可以得到更簡潔的樣式表倡怎。

選擇器的優(yōu)先級

瀏覽器通過優(yōu)先級來判斷哪一些屬性值與一個元素最為相關(guān)迅耘,從而在該元素上應(yīng)用這些屬性值。優(yōu)先級是基于不同種類選擇器組成的匹配規(guī)則监署。

優(yōu)先級是如何計算的颤专?

優(yōu)先級就是分配給指定的CSS聲明的一個權(quán)重,它由 匹配的選擇器中的 每一種選擇器類型的 數(shù)值 決定钠乏。
而當(dāng)優(yōu)先級與多個CSS聲明中任意一個聲明的優(yōu)先級相等的時候栖秕,CSS中最后的那個聲明將會被應(yīng)用到元素上。

當(dāng)同一個元素有多個聲明的時候晓避,優(yōu)先級才會有意義簇捍。因為每一個直接作用于元素的CSS規(guī)則總是會接管/覆蓋(take over)該元素從祖先元素繼承而來的規(guī)則。

1俏拱、無條件優(yōu)先的屬性只需要在屬性后面使用 !important 暑塑。它會覆蓋頁面內(nèi)任何位置定義的元素樣式。當(dāng)然锅必,IE 6不支持這個屬性事格,于是它也成為一種hack被很多人所熟知,真正使命被人淡忘搞隐。

2驹愚、第二高位的優(yōu)先屬性是在html中給元素標(biāo)簽加style。由于該方法會造成CSS的難以管理劣纲,所以不推薦使用逢捺。

3、第三級優(yōu)先的屬性是由一個或多個id選擇器來定義的癞季。例如 #id{margin:0;} 會覆蓋 .classname{margin:3px;}劫瞳。

4棠耕、第四級的屬性由一個或多個 類選擇器、屬性選擇器柠新、偽類選擇器定義窍荧。如 .classname{margin:3px;} 會覆蓋 div{margin:6px;}

5、第五級由一個或多個 類型選擇器定義恨憎。如 div{margin:6px;} 覆蓋 *{margin:10px;} 蕊退。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市憔恳,隨后出現(xiàn)的幾起案子瓤荔,更是在濱河造成了極大的恐慌,老刑警劉巖钥组,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件输硝,死亡現(xiàn)場離奇詭異,居然都是意外死亡程梦,警方通過查閱死者的電腦和手機(jī)点把,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屿附,“玉大人郎逃,你說我怎么就攤上這事⊥Ψ荩” “怎么了褒翰?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長匀泊。 經(jīng)常有香客問我优训,道長,這世上最難降的妖魔是什么各聘? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任揣非,我火速辦了婚禮,結(jié)果婚禮上伦吠,老公的妹妹穿的比我還像新娘妆兑。我一直安慰自己,他們只是感情好毛仪,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布搁嗓。 她就那樣靜靜地躺著,像睡著了一般箱靴。 火紅的嫁衣襯著肌膚如雪腺逛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天衡怀,我揣著相機(jī)與錄音棍矛,去河邊找鬼安疗。 笑死,一個胖子當(dāng)著我的面吹牛够委,可吹牛的內(nèi)容都是我干的荐类。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼茁帽,長吁一口氣:“原來是場噩夢啊……” “哼玉罐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起潘拨,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吊输,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后铁追,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體季蚂,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年琅束,在試婚紗的時候發(fā)現(xiàn)自己被綠了扭屁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡狰闪,死狀恐怖疯搅,靈堂內(nèi)的尸體忽然破棺而出濒生,到底是詐尸還是另有隱情埋泵,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布罪治,位于F島的核電站丽声,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏觉义。R本人自食惡果不足惜雁社,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晒骇。 院中可真熱鬧霉撵,春花似錦、人聲如沸洪囤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘤缩。三九已至喇完,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骗污,已是汗流浹背否过。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留惩系,地道東北人刻诊。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓防楷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親则涯。 傳聞我的和親對象是個殘疾皇子域帐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,754評論 1 92
  • 學(xué)習(xí)CSS的最佳網(wǎng)站沒有之一 http://www.w3school.com.cn/tags/index.asp ...
    Amyyy_閱讀 1,060評論 0 1
  • 1.塊級元素和行內(nèi)元素 塊級(block-level)元素是整;行內(nèi)(內(nèi)聯(lián)肖揣、inline-level)元素。 塊元素的...
    饑人谷_小侯閱讀 2,007評論 1 4
  • 1.CSS基本概念 1.1 CSS的定義 CSS(Cascading Style Sheets)層疊樣式表浮入,主要用...
    寥寥十一閱讀 1,836評論 0 6
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color龙优,font,text-align事秀,li...
    wzhiq896閱讀 1,755評論 0 2