BFC&邊距合并-Assignment

問答題

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

外邊距出現(xiàn)場景包括:

  • 父子元素的外邊距合并的問題及解決方案
    當父元素不設置border而子元素設置margin時际插,父子元素的外邊距會產生合并。
    如綠色方塊不設置border且設置margin:10px,粉色方塊設置margin:10px,產生父子外邊距合并绝编。

解決方案是在父元素中添加border或padding

設置padding情況下
設置border情況下
  • 兄弟元素的外邊距合并的問題及解決方案
    當相鄰的兄弟元素在同一個父容器下均設置margin時,會產生外邊距合并貌踏,并且margin值為二者的較大值十饥。
    如2個粉色方塊分別設置的margin為10px和20px,但2個粉色方塊交接出的margin為20px而不是30px哩俭,從而產生外邊距合并绷跑。

解決方案是在使用float/display:inline-block/為相鄰的子元素生產BFC

float情形
.child-3,.child-4{
    float:left;
}
 <div class="box">
        <div class="child child-3"></div>
        <div class="child child-4"></div>
    </div>
}
inline-block情形
.child-3,.child-4{
    display:inline-block;
    /*使用display時要注意child-3的margin-top會發(fā)生不規(guī)則偏移 */
}
<div class="box">
        <div class="child child-3"></div>
        <div class="child child-4"></div>
    </div>
生成BFC
 .ctn-3,ctn-4{
    overflow:hidden;
    /*  為child-3和child-4分別添加盒子,并將盒子進行BFC凡资; */
    }
<div class="box">
      <div class="ctn-3">
        <div class="child child-3"></div>
      </div>
      <div class="ctn-4">
        <div class="child child-4"></div>
      </div>
    </div>

2.去除inline-block內縫隙有哪幾種常見方法?

去除inline-block的間隙包括:

inline-block默認下的間隙
  • 將display為inline-block的元素放置在一行砸捏,此方法不適用與包含較多內容的元素
<ul class="box">
  <li>html</li><li>css</li><li>javascript</li>
  • 使用浮動
利用float清除間隙
li{
  font-size:30px;
  display:inline-block;
  background:lightblue;
  float:left;
}
  • 使用負邊距
利用負邊距清除間隙
li{
  font-size:30px;
  display:inline-block;
  background:lightblue;
  margin-left:-4px;
}
li:first-child{
  margin:0;
}

3.父容器使用overflow: auto| hidden撐開高度的原理是什么谬运?

父容器在使用overflow: auto| hidden后使其產生BFC,從而為float開辟出一個獨立的空間垦藏,撐開父容器的高度梆暖。

4.BFC是什么?如何形成BFC掂骏,有什么作用?

BFC是什么
  • BFC本質上就是是一個元素為其內部新生成的獨立空間轰驳,內部的內容全被格式化成塊級容器(注意是塊級容器,不是塊級元素)
  • 既然內部的內容全部為塊級容器弟灼,自然按照塊級容器的排版方式——可設置寬高并且從左到右排列
  • 由于相鄰的子元素同處一個空間级解,margin會產生合并
  • 最后,即使是浮動元素在父容器建立的BFC內部也得老老實實地按照塊級容器排版田绑,不能搞特殊
如何形成BFC

根據(jù)w3c的定義:

浮動元素勤哗、絕對定位元素、非塊級元素的塊級容器(如inline-block,table-cells,and table-captions)和overflow值不為visible的塊級元素掩驱,這些元素都會為它們的內容建立BFC芒划。

因此,建立BFC的方式有:

  • 為元素添加float非none的屬性值
  • 為元素添加postion:absolute
  • 為元素添加display:inline-block | table-cells | table-caption
  • 為元素添加overflow:auto | hidden
BFC的作用
  • 清除浮動
  • 清除外邊距合并
    ......

5.浮動導致的父容器高度塌陷指什么欧穴?為什么會產生民逼?有幾種解決方法

  • 父容器的高度若為自適應,子元素浮動后會產生父元素的高度塌陷

解釋:浮動元素脫離文檔流導致其內容消失在父容器中涮帘,由于父容器高度為自適應拼苍,即其高度全靠子元素內容撐開,子元素消失而父容器高度自然塌陷

方塊1和2未添加浮動

浮動導致的高度塌陷
  • 父容器的高度塌陷的解決方案:
    兩種思路焚辅,一種是父容器形成BFC而為內容開辟獨立空間映屋,另一種是使用清除浮動屬性
    • 父容器形成BFC
      父容器形成BFC效果

      [syntax]
.box{
  width:300px;
  border:5px solid pink;
  /* float:left; */
  
  /* position:absolute; */
  
  /* display:inline-block; */
  /* display:table-cell; */
  /* display:table-caption; */
  
  overflow:hidden;
  /* overflow:auto; */
}
  • 利用清除浮動屬性
    這里思想是在父容器中添加偽元素:after或:before(視具體情況而定),添加的元素(最好是沒有內容的元素同蜻,這里為了讓讀者徹底看到其中的原理棚点,所以content:"a"而在實際寫碼時使用content:""這個沒有內容的元素)將在父容器內部的最后或最前,再使用clear:both就可以達到撐開父容器高度的效果


[syntax]

.box:after{
  content:"a";
  display:block;
  clear:both;
}

6.以下代碼每一行的作用是什么湾蔓? 為什么會產生作用瘫析? 和BFC撐開空間有什么區(qū)別?

.clearfix:after{
 content: ''; 
display: block; 
clear: both;
}
.clearfix{
 *zoom: 1;
}
  • 該段代碼起到清除浮動的作用默责,與通過父容器建立BFC的原理不同贬循,它使用clear屬性去清除浮動
  • 第一段代碼的解釋是:給父容器定義class=“clearfix”,通過偽元素.clear:after在父容器內部的最后添加的一個內容為空的塊級元素桃序,再通過這一塊級元素清除浮動的屬性最終達到撐開父容器高度的效果
  • 第二段代碼的解釋是:zoom屬性是IE瀏覽器的專有屬性杖虾,它本來是用來設置或檢索對象的縮放比例,但原有屬性很少被使用媒熊,最常使用的是利用zoom來兼容IE瀏覽器以清除浮動或外邊距合并奇适、以及觸發(fā)IE瀏覽器的haslayout
    • _zoom是csshack中專門對IE6起作用坟比,*zoom則是針對IE6/7
    • 本代碼中*zoom:1是說明清除IE6/7瀏覽器中元素的浮動

代碼題

任務11-代碼

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市嚷往,隨后出現(xiàn)的幾起案子葛账,更是在濱河造成了極大的恐慌,老刑警劉巖皮仁,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件籍琳,死亡現(xiàn)場離奇詭異,居然都是意外死亡贷祈,警方通過查閱死者的電腦和手機趋急,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來付燥,“玉大人宣谈,你說我怎么就攤上這事愈犹〖疲” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵漩怎,是天一觀的道長勋颖。 經(jīng)常有香客問我,道長勋锤,這世上最難降的妖魔是什么饭玲? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮叁执,結果婚禮上茄厘,老公的妹妹穿的比我還像新娘。我一直安慰自己谈宛,他們只是感情好次哈,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吆录,像睡著了一般窑滞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恢筝,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天哀卫,我揣著相機與錄音,去河邊找鬼撬槽。 笑死此改,一個胖子當著我的面吹牛,可吹牛的內容都是我干的侄柔。 我是一名探鬼主播共啃,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鼓寺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了勋磕?” 一聲冷哼從身側響起妈候,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挂滓,沒想到半個月后苦银,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡赶站,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年幔虏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贝椿。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡想括,死狀恐怖,靈堂內的尸體忽然破棺而出烙博,到底是詐尸還是另有隱情瑟蜈,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布渣窜,位于F島的核電站铺根,受9級特大地震影響,放射性物質發(fā)生泄漏乔宿。R本人自食惡果不足惜位迂,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望详瑞。 院中可真熱鬧掂林,春花似錦、人聲如沸坝橡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驳庭。三九已至刑顺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饲常,已是汗流浹背蹲堂。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贝淤,地道東北人柒竞。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像播聪,于是被迫代替她去往敵國和親朽基。 傳聞我的和親對象是個殘疾皇子布隔,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,753評論 1 92
  • 一哀军、在什么場景下會出現(xiàn)外邊距合并?如何合并打却?如何不讓相鄰元素外邊距合并杉适?給個父子外邊距合并的范例 在CSS當中,相...
    dengpan閱讀 575評論 0 0
  • relative:生成相對定位的元素柳击,通過top,bottom,left,right的位置相對于其正常位置進行定位...
    zx9426閱讀 943評論 0 2
  • 一猿推,浮動元素有什么特征?對父容器捌肴、其他浮動元素蹬叭、普通元素、文字分別有什么影響? 浮動模型是一種可視化格式模型哭靖,浮動...
    DeeJay_Y閱讀 872評論 0 4
  • 1.在什么場景下會出現(xiàn)外邊距合并卦碾?如何合并铺坞?如何不讓相鄰元素外邊距合并?給個父子外邊距合并的范例 概念:在CSS當...
    饑人谷_任磊閱讀 650評論 0 3