盒子的定位和布局


 

一、基本概念

(一)視覺格式化模型

  1. 視覺格式化模型(visual formatting model):CSS的一種機制,它規定了頁面中的多個盒子如何布局
  2. css的一種機制,視覺格式化模型屬於css范疇
  3. 多個盒子如何布局,中的每個HTML元素都會在頁面盒子中生成
  4. 這些盒子如何排列、如何相互影響,由視覺格式化模型定義
  5. 視覺格式化模型是一套非常復雜的機制,包含錯綜復雜的CSS規范
  6. 本章的課程從實用的角度出發,僅學習在划分頁面區域的時候需要的核心知識
  7. 由於划分頁面區域時幾乎都使用的是塊盒,因此,本章仍然只涉及塊盒

(二)視口

  1. 視口(viewport):可視窗口,通常指瀏覽器的可視區域
  2. 視口的尺寸僅受到瀏覽器可視窗口大小的影響,和內容無關
  3. 當網頁內容的尺寸超過視口尺寸時,瀏覽器會出現滾動條

(三)包含塊

  1. 包含塊(containing block):每個元素都有一個包含塊,它是指元素在頁面中擺放的區域
  2. 通常情況下,元素的包含塊是它父元素的內容盒(content-box
  3. 包含塊:初始化包含塊(initial containing block)初始化包含塊是瀏覽器在渲染前自動生成的一塊區域
  4. 包含塊(containing block):每個元素都有一個包含塊,它是指元素在頁面中擺放的區域
  5. 通常情況下,元素的包含塊是它父元素的內容盒(content-box
  6. 根元素的包含塊是初始化包含塊(initial containing block

二、定位體系概述

(一)什么是定位體系

  1. 視覺格式化模型規定,定位體系一共有三種:常規流(normal flow)浮動(float)絕對定位(absolute positioned
  2. 任何一個元素,必須屬於其中一種定位體系
  3. 不同的定位體系中,元素在包含塊中的尺寸和位置會有一些差異

(二)定位體系判定

  1. position是一個CSS屬性,默認值為static
  2. float是一個CSS屬性默認值為none

 

 

三、盒模型的定位體系

1.定位體系影響盒模型等於最終盒子尺寸;定位體系等於盒子尺寸

2.盒模型中的尺寸:marginpxem%autoborderpxempaddingpxem%widthpxem%autoheightpxem%auto

3.尺寸為設定的值,與定位體系無關

4.尺寸是包含塊尺寸的百分比marginpaddingwidth的百分比:是包含塊寬度的百分比;height的百分比(很少使用)

5.尺寸受到定位體系的影響

6.不同的定位體系,auto的計算規則不一樣

四、常規流

(一)常規流

  1. 常規流,又叫做普通流、文檔流、普通文檔流
  2. 常規流是最常見的定位體系,所有元素默認狀態下都是常規流定位

(二)盒模型中的auto

  1. 常規流盒子水平方向上的尺寸,必須等於包含塊的寬度
  2. marginauto0pxheightauto:適應內容的高度
  3. 水平方向:常規流盒子水平方向上的尺寸,必須等於包含塊的寬度,如果不行,則強行將margin-right設置為auto
  4. 垂直方向:marginauto0pxheightauto:適應內容的高度

五、盒子位置

  1. 盒子在包含塊的垂直方向上依次擺放,盒子在包含塊的垂直方向上依次擺放。
  2. 依次擺放:按照HTML元素的書寫順序從上到下擺放
  3. 依次擺放:按照HTML元素的書寫順序從上到下擺放
  4. 垂直方向上,若兩個外邊距相鄰,則進行合並(折疊)
  5. 垂直方向:水平方向上的外邊距不會合並
  6. 外邊距相鄰:兩個外邊距之間沒有borderpaddingcontent
  7. 合並:均為正數取最大,均為負數取最小,一正一負則相加
  8. 左浮動的盒子向上向左排列
  9. 右浮動的盒子向上向右排列
  10. 浮動盒子的頂邊不得高於上一個盒子的頂邊
  11. 若剩余空間無法放下浮動的盒子,則該盒子向下移動,直到具備足夠的空間能容納盒子,然后再向左或向右移動

六、浮動

  1. 當元素的float屬性取值為leftright時,元素屬於浮動定位

 

 

七、當常規流遇上浮動

(一)常規流盒子和浮動盒子混合擺放

  1. 浮動盒子在擺放時,要避開常規流盒子
  2. 常規流盒子在擺放時,無視浮動盒子

(二)清楚浮動

  1. 對一個元素清除浮動,可以讓該元素在擺放時,出現在浮動元素的下方
  2. Clearnone(不清除浮動)/left(清除左浮動,元素在左浮動的盒子下方擺放)/right(清除右浮動,元素在右浮動的盒子下方擺放)/both(清除右浮動,元素在浮動的盒子下方擺放)
  3. Clear both:對最后一個子元素使用該值,可防止父元素高度坍塌

八、盒子的相對位置

  1. 相對位置,是指相對於盒子在原本定位體系下的位置,將盒子的position屬性設置為relative,以啟用相對位置
  2. 取值為static時:靜態位置,盒子在原本定位體系下的位置
  3. 取值為relative時:相對位置,盒子相對於原本的位置進行偏移
  4. 取值為absolute時:為絕對位置(絕對定位)
  5. 取值為fixed時:為固定位置(絕對定位)

九、絕對定位的概述

  1. 當浮動元素被設置為絕對定位,元素只能屬於一種定位體系
  2. 如果元素被設置為絕對定位,float屬性會被強制設置為none
  3. 絕對定位元素對其他元素的影響,絕對定位元素不會對其他任何元素造成任何影響
  4. 絕對定位元素的位置,可通過lefttoprightbottom來設置
  5. 絕對定位元素的包含塊:通常情況下,元素的包含塊是它父元素的內容盒(content-box),絕對定位元素除外

十、絕對定位的位置和尺寸

(一)盒子的位置

絕對定位中,盒子的位置由lefttoprightbottom四個屬性決定,它們表示盒子離包含塊邊緣的距離

(二)盒子中的auto

  1. 大部分情況下,盒子中auto值計算規則和浮動盒子相同,少部分情況下,盒子中auto值需要適應盒子的位置

十一、堆疊級別

  1. 堆疊級別(stack level),它決定了元素誰顯示在前誰顯示在后
  2. 通常情況下,堆疊級別越高,顯示越靠前
  3. 通過z-index屬性可設置元素的堆疊級別
  4. 不要用於靜態位置的元素
  5. 盡量不要使用z-index

十二、塊級格式化上下文

  1. 全稱Block Formatting Context,簡稱BFC,它是一塊獨立的渲染區域,它規定了在該區域中,常規流塊盒的布局它是一塊獨立的渲染區域,它規定了在該區域中,常規流塊盒的布局
  2. 常規流塊盒在水平方向上,必須撐滿包含塊
  3. 常規流塊盒在包含塊的垂直方向上依次擺放
  4. 常規流塊盒若外邊距無縫相鄰,則進行外邊距合並
  5. 常規流塊盒的自動高度和擺放位置,無視浮動元素
  6. Bfc渲染區域:BFC渲染區域:這個區域由某個HTML元素創建,以下元素會在其內部創建BFC區域:根元素,浮動和絕對定位元素,overflow不等於visible的塊盒
  7. 不同的BFC區域,它們進行渲染時互不干擾
  8. 創建BFC的元素,隔絕了它內部和外部的聯系,內部的渲染不會影響到外部
  9. 創建BFC的元素,它的自動高度需要計算浮動元素
  10. 創建BFC的元素,它的邊框盒不會與浮動元素重疊
  11. 創建BFC的元素,不會和它的子元素進行外邊距合並

 十三、彈性布局

 

  1. 一個盒子,如果將其display屬性設置為 flex ,該盒子變為彈性盒(彈性容器),該盒子的所有子元素,自動變為彈性項目。彈性盒本身按照自身的定位體系排列,彈性布局影響的僅僅是彈性盒中的彈性項目
  2. 屬性

 

   flex-direction :更改主軸方向

 

   row 行 默認值

 

   row-reverse 反向 主軸從右向左

 

   column 列 按主軸從上往下排列

 

   column-reverse 按主軸從下往上

 

 

 

   justify-content :更改主軸對其方式

 

   flex-start 默認值 主軸起點一次排列

 

   flex-end 主軸終點對齊

 

   center 主軸中線對齊

 

   space-between 左右項目靠邊,中間平均分布

 

   space-around 所有項目平均分布 

 

 

 

   align-items: 更改側軸對齊方式

 

   stretch 默認值 拉伸

 

   flex-start 側軸起點對齊

 

   flex-end 側軸終點對齊

 

   flex-center 側軸中線對齊

 

   flex-wrap

 

 

 

   wrap (換行)

 

   nowrap (不換行)

 

  align-content

 

  規則:彈性項目寬度自動時,表示適應內容的寬度和高度。margin為自動時,會吸收彈性容器的剩余空間。

 

  1. 項目屬性

 

(1) order 更改彈性項目的排列順序,順序為從小到大進行排列

 

(2) flex-shrink 更改彈性項目的壓縮比例

 

   1 默認

 

   0 不壓縮

 

(3) flex-grow 更改彈性項目的增長比例

 

   0 默認 不增長

 

(4) flex-basis 彈性項目在壓縮或增長前的基礎寬度,若不設置,默認值為auto,表示與width屬性值相同

 

(5) 速寫 flexgrow shrink basis; 同時設置增長、壓縮、基礎值

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM