摘要:本文將講述中最核心的幾個(gè)概念,包括盒模型等。塊級(jí)元素的默認(rèn)為,而內(nèi)聯(lián)元素則是根據(jù)其自身的內(nèi)容或子元素來決定其寬度。如果該元素的下一個(gè)兄弟元素中有內(nèi)聯(lián)元素通常是文字,則會(huì)圍繞該元素顯示,形成類似文字圍繞圖片的效果。
本文將講述 CSS 中最核心的幾個(gè)概念,包括:盒模型、position、float等。這些是 CSS 的基礎(chǔ),也是最常用的幾個(gè)屬性,它們之間看似獨(dú)立卻又相輔相成。為了掌握它們,有必要寫出來探討一下,如有錯(cuò)誤歡迎指正。
元素類型HTML 的元素可以分為兩種:
塊級(jí)元素(block level element)
內(nèi)聯(lián)元素(inline element 有的人也叫它行內(nèi)元素)
兩者的區(qū)別在于以下三點(diǎn):
塊級(jí)元素會(huì)獨(dú)占一行(即無法與其他元素顯示在同一行內(nèi),除非你顯示修改元素的 display 屬性),而內(nèi)聯(lián)元素則都會(huì)在一行內(nèi)顯示。
塊級(jí)元素可以設(shè)置 width、height 屬性,而內(nèi)聯(lián)元素設(shè)置無效。
塊級(jí)元素的 width 默認(rèn)為 100%,而內(nèi)聯(lián)元素則是根據(jù)其自身的內(nèi)容或子元素來決定其寬度。
最常見塊級(jí)元素應(yīng)該是 具體來說一下吧, 我們?yōu)? 若既想讓元素在行內(nèi)顯示,又能設(shè)置寬高,可以設(shè)置: inline-block 在我看來就是讓元素對(duì)外呈內(nèi)聯(lián)元素,可以和其他元素共處與一行內(nèi);對(duì)內(nèi)則讓元素呈塊級(jí)元素,可改變其寬高。 HTML 代碼是順序執(zhí)行的,一份無任何 CSS 樣式的 HTML 代碼最終呈現(xiàn)出的頁面是根據(jù)元素出現(xiàn)的順序和類型排列的。塊級(jí)元素就從上到下排列,遇到內(nèi)聯(lián)元素則從左到右排列。這種無樣式的情況下,元素的分布叫普通流,元素出現(xiàn)的位置應(yīng)該叫正常位置(這是我瞎起的),同時(shí)所有元素會(huì)在頁面上占據(jù)一個(gè)空間,空間大小由其盒模型決定。 頁面上顯示的每個(gè)元素(包括內(nèi)聯(lián)元素)都可以看作一個(gè)盒子,即盒模型( box model )。請(qǐng)看Chrome DevTools 里的截圖: 可以顯而易見的看出盒模型由 4 部分組成。從內(nèi)到外分別是: 按理來說一個(gè)元素的寬度(高度以此類推)應(yīng)該這樣計(jì)算: 但是不同瀏覽器(你沒有猜錯(cuò),就是那個(gè)與眾不同的瀏覽器)對(duì)寬度的詮釋不一樣。符合 W3C 標(biāo)準(zhǔn)的瀏覽器認(rèn)為一個(gè)元素的寬度只等于其 content 的寬度,其余都要額外算。于是你規(guī)定一個(gè)元素: 則他最終的寬度應(yīng)為: 而在 IE(低于IE9) 下,最終寬度為: 我個(gè)人覺得 IE 的更符合人類思維,畢竟 padding 叫內(nèi)邊距,邊框算作額外的寬度也說不下去。W3C 最后為了解決這個(gè)問題,在 CSS3 中加了 box-sizing 這個(gè)屬性。當(dāng)我們?cè)O(shè)置 box-sizing: border-box; 時(shí),border 和 padding 就被包含在了寬高之內(nèi),和 IE 之前的標(biāo)準(zhǔn)是一樣的。所以,為了避免你同一份 css 在不同瀏覽器下表現(xiàn)不同,最好加上: 這里還有兩種特殊情況: 無寬度 —— 絕對(duì)定位(position: absolute;) 元素 無寬度 —— 浮動(dòng)(float) 元素 它們?cè)陧撁嫔系谋憩F(xiàn)均不占據(jù)空間(脫離普通流,感覺像浮在頁面上層一樣,移動(dòng)它們不影響其他元素的定位)。這就涉及到另外兩個(gè)核心概念 position 和 float。 position 這個(gè)屬性決定了元素將如何定位。它的值大概有以下五種: 具體效果可以參考w3school的實(shí)例,或者自己寫一下就明白了。 每個(gè)網(wǎng)頁都可以看成是由一層一層頁面堆疊起來的,如下圖所示。 position 設(shè)置為 relative 的時(shí)候,元素依然在普通流中,位置是正常位置,你可以通過 left right 等移動(dòng)元素。會(huì)影響其他元素的位置。 而當(dāng)一個(gè)元素的 position 值為 absolute 或 fixed 的時(shí)候,會(huì)發(fā)生三件事: 把該元素往 Z 軸方向移了一層,元素脫離了普通流,所以不再占據(jù)原來那層的空間,還會(huì)覆蓋下層的元素。 該元素將變?yōu)閴K級(jí)元素,相當(dāng)于給該元素設(shè)置了 display: block;(給一個(gè)內(nèi)聯(lián)元素,如 ,設(shè)置 absolute 之后發(fā)現(xiàn)它可以設(shè)置寬高了)。 如果該元素是塊級(jí)元素,元素的寬度由原來的 width: 100%(占據(jù)一行),變?yōu)榱?auto。 由此觀之,當(dāng) position 設(shè)置為 absolute 或 fixed,就沒必要設(shè)置 display 為 block 了。而且如果你不想覆蓋下層的元素,可以設(shè)置 z-index 值 達(dá)到效果。 float 顧名思義,就是把元素浮動(dòng),它的取值一共有四個(gè):left right none inherit,光看名字就懂了,無需多言。 最初的 float 只是用來實(shí)現(xiàn)文字環(huán)繞圖片的效果,僅此而已。而現(xiàn)在 float 的應(yīng)用已不止這個(gè),前輩們也是寫了無數(shù)博文來深入淺出的講解它。 我就不班門弄斧寫原理了,只說說 float 的幾個(gè)要點(diǎn)就行了: 只有左右浮動(dòng),沒有上下浮動(dòng)。 元素設(shè)置 float 之后,它會(huì)脫離普通流(和 position: absolute; 一樣),不再占據(jù)原來那層的空間,還會(huì)覆蓋下一層的元素。 浮動(dòng)不會(huì)對(duì)該元素的上一個(gè)兄弟元素有任何影響。 浮動(dòng)之后,該元素的下一個(gè)兄弟元素會(huì)緊貼到該元素之前沒有設(shè)置 float 的元素之后(很好理解,因?yàn)樵撛孛撾x普通流了,或者說不在這一層了,所以它的下一個(gè)元素當(dāng)然要補(bǔ)上它的位置)。 如果該元素的下一個(gè)兄弟元素中有內(nèi)聯(lián)元素(通常是文字),則會(huì)圍繞該元素顯示,形成類似「文字圍繞圖片」的效果。(可參考CSS float浮動(dòng)的深入研究、詳解及拓展(一)中的講解)。這個(gè)我還是實(shí)踐了一下的,點(diǎn)這個(gè)JSfiddle看看吧。 下一個(gè)兄弟元素如果也設(shè)置了同一方向的 float,則會(huì)緊隨該元素之后顯示。 該元素將變?yōu)閴K級(jí)元素,相當(dāng)于給該元素設(shè)置了 display: block;(和position: absolute; 一樣)。 這里還有個(gè)東西,就是廣為人知的——清除浮動(dòng)。具體的方法五花八門,可以看這篇:那些年我們一起清除過的浮動(dòng),我就不多說了。 寫完本文后,腦子中又出現(xiàn)了一系列問題,假如 position 和 float 同時(shí)設(shè)置會(huì)出現(xiàn)什么問題?兼容性如何?哪個(gè)屬性會(huì)被覆蓋?還沒來得及實(shí)踐,改天以排列組合的方式看看到底是什么效果……如果有人實(shí)踐過可以偷偷告訴我^_^ 原文地址:CSS 最核心的幾個(gè)概念 文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。 轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/110825.html Web前端開發(fā)是創(chuàng)建Web頁面或app等前端界面呈現(xiàn)給用戶的過程。第一階段:前端基礎(chǔ)(HTML / CSS / JavaScript / jQuery)初識(shí)HTML+CSS【學(xué)習(xí)筆記】HTML基礎(chǔ)完結(jié)篇html基礎(chǔ)知識(shí)——標(biāo)簽詳解html基礎(chǔ)知識(shí)——與用戶交互!(表單標(biāo)簽)html基礎(chǔ)知識(shí)——css樣式①史上最全Html和CSS布局技巧面試題匯總 HTML+CSS篇CSS 最核心的幾個(gè)概念純HTM... Web前端開發(fā)是創(chuàng)建Web頁面或app等前端界面呈現(xiàn)給用戶的過程。第一階段:前端基礎(chǔ)(HTML / CSS / JavaScript / jQuery)初識(shí)HTML+CSS【學(xué)習(xí)筆記】HTML基礎(chǔ)完結(jié)篇html基礎(chǔ)知識(shí)——標(biāo)簽詳解html基礎(chǔ)知識(shí)——與用戶交互!(表單標(biāo)簽)html基礎(chǔ)知識(shí)——css樣式①史上最全Html和CSS布局技巧面試題匯總 HTML+CSS篇CSS 最核心的幾個(gè)概念純HTM... Web前端開發(fā)是創(chuàng)建Web頁面或app等前端界面呈現(xiàn)給用戶的過程。第一階段:前端基礎(chǔ)(HTML / CSS / JavaScript / jQuery)初識(shí)HTML+CSS【學(xué)習(xí)筆記】HTML基礎(chǔ)完結(jié)篇html基礎(chǔ)知識(shí)——標(biāo)簽詳解html基礎(chǔ)知識(shí)——與用戶交互!(表單標(biāo)簽)html基礎(chǔ)知識(shí)——css樣式①史上最全Html和CSS布局技巧面試題匯總 HTML+CSS篇CSS 最核心的幾個(gè)概念純HTM... Web前端開發(fā)是創(chuàng)建Web頁面或app等前端界面呈現(xiàn)給用戶的過程。第一階段:前端基礎(chǔ)(HTML / CSS / JavaScript / jQuery)初識(shí)HTML+CSS【學(xué)習(xí)筆記】HTML基礎(chǔ)完結(jié)篇html基礎(chǔ)知識(shí)——標(biāo)簽詳解html基礎(chǔ)知識(shí)——與用戶交互!(表單標(biāo)簽)html基礎(chǔ)知識(shí)——css樣式①史上最全Html和CSS布局技巧面試題匯總 HTML+CSS篇CSS 最核心的幾個(gè)概念純HTM... 等等,完整的元素列表可以谷歌一下。
.example {
width: 100px;
height: 100px;
}
display: inline-block;
content -> padding -> border -> margin
總寬度 = margin-left + border-left + padding-left + width + padding-right + border-right + margin-right
.example {
width: 200px;
padding: 10px;
border: 5px solid #000;
margin: 20px;
}
寬度 = width(200px) + padding(10px * 2) + border(5px * 2) + margin(20px * 2) = 270px;
寬度 = width(200px) + margin(20px * 2) = 240px;
*, *:before, *:after {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
position 值
如何定位
static
position的默認(rèn)值。元素將定位到它的正常位置(上文提到過),其實(shí)也就相當(dāng)于沒有定位。元素在頁面上占據(jù)位置。不能使用 top right bottom left 移動(dòng)元素位置。
relative
相對(duì)定位,相對(duì)于元素的正常位置來進(jìn)行定位。元素在頁面占據(jù)位置。可以使用 top right bottom left 移動(dòng)元素位置。
absolute
絕對(duì)定位,相對(duì)于最近一級(jí)的 定位不是 static 的父元素來進(jìn)行定位。元素在頁面不占據(jù)位置。 可以使用 top right bottom left 移動(dòng)元素位置。
fixed
絕對(duì)定位,相對(duì)于瀏覽器窗口來進(jìn)行定位。其余和 absolute 一樣,相當(dāng)于一種特殊的 absolute。
inherit
從父元素繼承 position 屬性的值。
淺如:
經(jīng)驗(yàn)分享:CSS浮動(dòng)(float,clear)通俗講解 篇幅不長(zhǎng),通俗易懂,可以看完這篇文章再回過頭來看本文。
深如:
CSS float浮動(dòng)的深入研究、詳解及拓展(一)
CSS float浮動(dòng)的深入研究、詳解及拓展(二)
從本質(zhì)上講解了 float 的原理。相關(guān)文章
Web前端開發(fā)學(xué)習(xí)推薦--菜鳥必看
Web前端開發(fā)學(xué)習(xí)推薦--菜鳥必看
Web前端開發(fā)學(xué)習(xí)推薦--菜鳥必看
Web前端開發(fā)學(xué)習(xí)推薦--菜鳥必看
發(fā)表評(píng)論
0條評(píng)論
閱讀 1491·2023-04-25 19:51
閱讀 1954·2019-08-30 15:55
閱讀 1781·2019-08-30 15:44
閱讀 2720·2019-08-30 13:58
閱讀 2719·2019-08-29 16:37
閱讀 1098·2019-08-29 15:34
閱讀 4057·2019-08-29 11:05
閱讀 2656·2019-08-28 17:51