亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

CSS

CSS最核心的概念

時間:2024-09-02 17:03:38 CSS 我要投稿
  • 相關(guān)推薦

CSS最核心的概念

  CSS中最核心的幾個概念,包括:盒模型、position、float等。這些是 CSS 的基礎(chǔ),也是最常用的幾個屬性,它們之間看似獨立卻又相輔相成。下面我們一起來看看這些css概念的內(nèi)容吧~

  元素類型

  HTML 的元素可以分為兩種:

  ?

  塊級元素(block level element)

  ?

  內(nèi)聯(lián)元素(inline element 有的人也叫它行內(nèi)元素)

  兩者的區(qū)別在于以下三點:

  1.塊級元素會獨占一行(即無法與其他元素顯示在同一行內(nèi),除非你顯式修改元素的 display 屬性),而內(nèi)聯(lián)元素則都會在一行內(nèi)顯示。

  2.塊級元素可以設(shè)置 width、height 屬性,而內(nèi)聯(lián)元素設(shè)置無效。

  3.塊級元素的 width 默認為 100%,而內(nèi)聯(lián)元素則是根據(jù)其自身的內(nèi)容或子元素來決定其寬度。

  最常見塊級元素應(yīng)該是 <div> 吧,內(nèi)聯(lián)元素有 <span> <a> <img> 等等,完整的元素列表可以谷歌一下。

  具體來說一下吧,

  .example {

  width: 100px;

  height: 100px;

  }

  我們?yōu)?<div> 設(shè)置上面的樣式,是有效果的,因為其是塊級元素,而對 <span> 設(shè)置上面的樣式是沒用的。要想讓 <span> 也可以改變寬高,可以通過設(shè)置 display: block; 來達到效果。當 display 的值設(shè)為 block 時,元素將以塊級形式呈現(xiàn);當 display 值設(shè)為 inline 時,元素將以內(nèi)聯(lián)形式呈現(xiàn)。

  若既想讓元素在行內(nèi)顯示,又能設(shè)置寬高,可以設(shè)置:

  display: inline-block;

  inline-block 在我看來就是讓元素對外呈內(nèi)聯(lián)元素,可以和其他元素共處與一行內(nèi);對內(nèi)則讓元素呈塊級元素,可改變其寬高。

  HTML 代碼是順序執(zhí)行的,一份無任何 CSS 樣式的 HTML 代碼最終呈現(xiàn)出的頁面是根據(jù)元素出現(xiàn)的順序和類型排列的。塊級元素就從上到下排列,遇到內(nèi)聯(lián)元素則從左到右排列。這種無樣式的情況下,元素的分布叫普通流,元素出現(xiàn)的位置應(yīng)該叫正常位置(這是我瞎起的),同時所有元素會在頁面上占據(jù)一個空間,空間大小由其盒模型決定。

  盒模型

  頁面上顯示的每個元素(包括內(nèi)聯(lián)元素)都可以看作一個盒子,即盒模型( box model )。請看 Chrome DevTools 里的截圖:

  可以顯而易見的看出盒模型由 4 部分組成。從內(nèi)到外分別是:

  content -> padding -> border -> margin

  按理來說一個元素的寬度(高度以此類推)應(yīng)該這樣計算:

  總寬度 = margin-left + border-left + padding-left + width + padding-right + border-right + margin-right

  但是不同瀏覽器(你沒有猜錯,就是那個與眾不同的瀏覽器)對寬度的詮釋不一樣。符合 W3C 標準的瀏覽器認為一個元素的寬度只等于其 content 的寬度,其余都要額外算。于是你規(guī)定一個元素:

  .example {

  width: 200px;

  padding: 10px;

  border: 5px solid #000;

  margin: 20px;

  }

  則他最終的寬度應(yīng)為:

  寬度 = width(200px) + padding(10px * 2) + border(5px * 2) + margin(20px * 2) =  270px;

  而在 IE(低于IE9) 下,最終寬度為:

  寬度 = width(200px) + margin(20px * 2) = 240px;

  我個人覺得 IE 的更符合人類思維,畢竟 padding 叫內(nèi)邊距,邊框算作額外的寬度也說不下去。W3C 最后為了解決這個問題,在 CSS3 中加了 box-sizing 這個屬性。當我們設(shè)置 box-sizing: border-box;  時,border 和 padding 就被包含在了寬高之內(nèi),和 IE 之前的標準是一樣的。所以,為了避免你同一份 css 在不同瀏覽器下表現(xiàn)不同,最好加上:

  *, *:before, *:after {

  -moz-box-sizing: border-box;

  -webkit-box-sizing: border-box;

  box-sizing: border-box;

  }

  這里還有兩種特殊情況:

  ?

  無寬度 —— 絕對定位(position: absolute;) 元素

  ?

  無寬度 —— 浮動(float) 元素

  它們在頁面上的表現(xiàn)均不占據(jù)空間(脫離普通流,感覺像浮在頁面上層一樣,移動它們不影響其他元素的定位)。這就涉及到另外兩個核心概念 position 和 float。

  position

  position 這個屬性決定了元素將如何定位。它的值大概有以下五種:

  具體效果可以參考w3school的實例,或者自己寫一下就明白了。

  每個網(wǎng)頁都可以看成是由一層一層頁面堆疊起來的,如下圖所示。

  position 設(shè)置為 relative 的時候,元素依然在普通流中,位置是正常位置,你可以通過 left right 等移動元素。會影響其他元素的位置。

  而當一個元素的 position 值為 absolute 或 fixed 的時候,會發(fā)生三件事:

  1.把該元素往 Z 軸方向移了一層,元素脫離了普通流,所以不再占據(jù)原來那層的空間,還會覆蓋下層的元素。

  2.該元素將變?yōu)閴K級元素,相當于給該元素設(shè)置了 display: block;(給一個內(nèi)聯(lián)元素,如 <span> ,設(shè)置 absolute 之后發(fā)現(xiàn)它可以設(shè)置寬高了)。

  3.如果該元素是塊級元素,元素的寬度由原來的 width: 100%(占據(jù)一行),變?yōu)榱?auto。

  由此觀之,當 position 設(shè)置為 absolute 或 fixed,就沒必要設(shè)置 display 為 block 了。而且如果你不想覆蓋下層的元素,可以設(shè)置 z-index 值 達到效果。

  float

  float 顧名思義,就是把元素浮動,它的取值一共有四個:left right none inherit,光看名字就懂了,無需多言。

  最初的 float 只是用來實現(xiàn)文字環(huán)繞圖片的效果,僅此而已。而現(xiàn)在 float 的應(yīng)用已不止這個,前輩們也是寫了無數(shù)博文來深入淺出的講解它。

  我就不班門弄斧寫原理了,只說說 float 的幾個要點就行了:

  1.只有左右浮動,沒有上下浮動。

  2.元素設(shè)置 float 之后,它會脫離普通流(和 position: absolute; 一樣),不再占據(jù)原來那層的空間,還會覆蓋下一層的元素。

  3.浮動不會對該元素的上一個兄弟元素有任何影響。

  4.浮動之后,該元素的下一個兄弟元素會緊貼到該元素之前沒有設(shè)置 float 的元素之后(很好理解,因為該元素脫離普通流了,或者說不在這一層了,所以它的下一個元素當然要補上它的位置)。

  5.如果該元素的下一個兄弟元素中有內(nèi)聯(lián)元素(通常是文字),則會圍繞該元素顯示,形成類似「文字圍繞圖片」的效果。

  6.下一個兄弟元素如果也設(shè)置了同一方向的 float,則會緊隨該元素之后顯示。

  7.該元素將變?yōu)閴K級元素,相當于給該元素設(shè)置了 display: block;(和position: absolute; 一樣)。

【CSS最核心的概念】相關(guān)文章:

css教程07-22

css經(jīng)典教程07-18

(優(yōu))css教程07-21

(必備)css教程07-25

【熱】css教程07-24

css經(jīng)典教程(優(yōu))07-26

css經(jīng)典教程[集合]07-30

css教程13篇[必備]07-20

css教程精品(13篇)07-23

css經(jīng)典教程優(yōu)秀(13篇)07-27