浮動定位BFC邊距合并

1. 浮動元素有什么特征?對父容器、其他浮動元素、普通元素、文字分別有什么影響?

浮動元素特征:

  1. 浮動元素會脫離正常的文檔流,按照其外邊距指定的位置相對于它的上一個塊級元素(或父元素)顯示
  2. 浮動元素后面的內(nèi)聯(lián)元素會向此浮動元素的外邊距靠齊
  3. 浮動元素后面的塊級元素的文字會環(huán)繞此浮動元素的外邊框

對父容器影響:
元素浮動之后,它脫離當前正常文檔流,所以它也無法撐開其父元素,造成父元素的塌陷

對其他浮動元素影響:

  1. 同一個方向的浮動元素:當一個浮動元素在浮動過程中碰到同一個方向的浮動元素時,它會緊跟在它們后面
  2. 反方向的浮動元素:互不影響,位于同一條水平線上,當空間不夠時會被擠下

對普通元素影響:

  1. 如果兄弟元素為塊級元素,該元素會忽視浮動元素的而占據(jù)它的位置,并且元素會處在浮動元素的下層(并且無法通過z-index屬性改變他們的層疊位置),但它的內(nèi)部文字和其他行內(nèi)元素都會環(huán)繞浮動元素
  2. 如果如果兄弟元素為內(nèi)聯(lián)元素,則元素會環(huán)繞浮動元素排列

對文字的影響:
文字會環(huán)繞浮動元素排列


2.清除浮動指什么? 如何清除浮動? 兩種以上方法

清除浮動指元素的側(cè)邊不允許出現(xiàn)浮動元素,從而使得浮動元素的不占據(jù)普通文檔流空間的使得父元素的高度塌陷問題得到解決,主要通過clear屬性實現(xiàn)。

clear:指定一個元素是否可以在它之前的浮動元素旁邊,或者必須向下移動(清除浮動) 在它的下面。clear 屬性適用于浮動和非浮動元素。

當應用于非浮動塊時,它將非浮動塊的邊框邊界移動到所有相關浮動元素外邊界的下方。這個行為作用時會導致margin collapsing不起作用。

當應用于浮動元素時,它將元素的外邊界移動到所有相關的浮動元素外邊界的下方。這會影響后面浮動元素的布局,后面的浮動元素的位置無法高于它之前的元素。

清除浮動方法:

  1. 在父容器內(nèi)添加一個標簽,使用clear:both樣式:<div style="clear:both;"></div>,如下:
    <div style="border: solid 5px #0e0; width:300px;">
    <div style="height: 100px; width: 100px; background-color: Red; float:left;">
    </div>
    <div style="height: 100px; width: 100px; background-color: Green; float:left;">
    </div>
    <div style="height: 100px; width: 100px; background-color: Yellow; float:left;">
    </div>
    <div style="clear:both;"></div>
    </div>

  2. 通過對父容器添加以下樣式,形成BFC達到“清浮動”效果,例如:

     .clearfix{
       *zoom:1;
     }
     .clearfix:after{
         content:"";
         display:block;
         clear:left;
     }
    
  3. 設置浮動包含塊的父元素height值。


3. 有幾種定位方式,分別是如何實現(xiàn)定位的,參考點是什么,使用場景是什么?

| 定位方式 | 實現(xiàn) | 參考點 |使用場景|
| --- | --- | --- |
| static | 默認值,沒有定位,元素出現(xiàn)在正常的流中(忽略 top, bottom, left, right 或者 z-index 聲明) |父元素 |普通正常流布局的頁面|
| relative | 生成相對定位的元素,相對于元素本身正常位置進行定位,因此,left:20px 會向元素的 left 位置添加20px | 元素本身正常位置 |1.元素小范圍偏移 2.作為絕對定位子元素的參考點 |
| absolute | 生成絕對定位的元素,相對于static定位以外的第一個祖先元素(offset parent)進行定位,元素的位置通過 left, top, right 以及 bottom 屬性進行規(guī)定 | 相對于static定位以外的第一個祖先元素 |1.小元素的布局,如:按鈕的icon |
| fixed | 固定定位,生產(chǎn)絕對定位元素,但不隨著滾動條的移動而改變位置 | 瀏覽器首屏坐標 |回到頂部按鈕|
| sticky |CSS3新屬性,表現(xiàn)類似position:relative和position:fixed的合體,在目標區(qū)域在屏幕中可見時,它的行為就像position:relative; 而當頁面滾動超出目標區(qū)域時,它的表現(xiàn)就像position:fixed,它會固定在目標位置 | | | |


4. z-index 有什么作用? 如何使用?

z-index規(guī)定了元素在Z軸(距離用戶遠近)上的順序,值越大則越靠近用戶,表現(xiàn)就是元素在最上面。

z-index僅在設置了position非static屬性的元素生效,且z-index的值只能在兄弟元素之間比較。

Z-index默認值為auto,則不建立層疊上下文。設置為0則會建立層疊上下文。


5. position:relative和負margin都可以使元素位置發(fā)生偏移?二者有什么區(qū)別

相對定位和負margin都可以使元素位置發(fā)生偏移
區(qū)別:

  1. position:relative是相對于元素原本的位置進行偏移,偏移之后,原本的元素所占空間依舊保留。
  2. 負margin是子元素相對于父元素的內(nèi)邊框進行偏移,偏移之后,原本的元素所占空間不保留。并且偏移之后元素仍處于正常文檔流中。

6.BFC 是什么?如何生成 BFC?BFC 有什么作用?舉例說明

BFC是什么
BFC是 block formatting context的縮寫,意思就是格式化內(nèi)容文本。創(chuàng)建了一個BFC的元素就是一個獨立的盒子,只有block level box可以參與創(chuàng)建BFC,他的內(nèi)部與外部都不受盒子外的元素的影響。

生成BFC
可以給需要創(chuàng)建BFC的元素添加以下任意屬性:
1.float,除了none都可以。
2.overflow,設置為auto,hidden,scroll中的任意一個都可以。
3.position,設置為absolute,fixed都行。
4.display,設置為inline-block,table-cell,table-caption。

BFC的作用:
1.阻止垂直邊距的折疊
通過在父元素ct中添加樣式(包括border,padding, float等)的方式,使ct生成新的BFC,從而使外邊距不合并,如下:

阻止垂直邊距折疊.png

2.BFC元素與浮動元素不重疊
在黃色div中添加overflow: hidden; 或 margin:1px; 樣式,
原理:可使黃色div生成新的塊級格式化上下文(BFC),
BFC不會重疊浮動元素

不重疊浮動元素.png
  1. BFC元素可以包含浮動。
    在ct中添加 float:left 或 overfolw:hidden 或 position:absolute 等樣式后,可以使ct的div包裹子浮動元素,防止父元素高度塌陷
包含浮動.png

7 在什么場景下會出現(xiàn)外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個父子外邊距合并的范例

外邊距合并出現(xiàn)的三個場景。

image.png
image.png

同一個BFC,且同處于普通流中的垂直相鄰元素外邊距合并。
父子元素的外邊距合并。
空元素的外邊距合并。
合并規(guī)則:

兩個margin都是正值的時候,取兩者的最大值;
當 margin 都是負值的時候,取的是其中絕對值較大的,然后,從0位置,負向位移;
當有正有負的時候,先取出負 margin 中絕對值中最大的,然后,和正 margin 值中最大的 margin 相加。
所有毗鄰的margin要一起參與運算,不能分步進行。
不讓相鄰元素外邊距合并的方法:

被非空內(nèi)容、padding、border 或 clear 分隔開。
不在一個普通流中或一個BFC中。
margin在垂直方向上不毗鄰。
總結(jié):

這些margin都處于普通流中,并在同一個BFC中;
這些margin沒有被非空內(nèi)容、padding、border 或 clear 分隔開;
這些margin在垂直方向上是毗鄰的,包括以下幾種情況:

  • 一個box的top margin與第一個子box的top margin
  • 一個box的bottom margin與最后一個子box的bottom margin,但須在該box的height 為auto的情況下
  • 一個box的bottom margin與緊接著的下一個box的top margin
  • 一個box的top margin與其自身的bottom margin,但須滿足沒創(chuàng)建BFC、零min-height、零或者“auto”的height、沒有普通流的子元素。
    例外的情況
    根元素的外邊距不會參與折疊
    不設置任何屬性的空span和空div不影響任何布局,可以無視之。

代碼

http://js.jirengu.com/foxefobugi/1/edit

http://js.jirengu.com/nomavohodu/1/edit?html,css,output

http://js.jirengu.com/fudeciheru/4/edit

http://js.jirengu.com/davacaqipi/2/edit

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • relative:生成相對定位的元素,通過top,bottom,left,right的位置相對于其正常位置進行定位...
    zx9426閱讀 1,077評論 0 2
  • 1.浮動元素有什么特征?對父容器、其他浮動元素、普通元素、文字分別有什么影響? 任何定義為float的元素,都可以...
    QQQQQCY閱讀 309評論 0 0
  • 1.浮動元素有什么特征?對父容器、其他浮動元素、普通元素、文字分別有什么影響? 浮動元素不在文檔的普通流中,它可以...
    饑人谷_Young丶K閱讀 516評論 0 0
  • 1.浮動元素有什么特征?對父容器、其他浮動元素、普通元素、文字分別有什么影響? 浮動元素不在文檔的普通流中,它可以...
    yuhuan121閱讀 541評論 0 0
  • 1.浮動元素有什么特征?對父容器、其他浮動元素、普通元素、文字分別有什么影響? 特征:浮動元素脫離普通文檔流,普通...
    山門龍龍閱讀 380評論 0 2

友情鏈接更多精彩內(nèi)容