浮動定位-BFC-邊距合并

問答

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

  • 浮動元素的特征:
    • 文字環(huán)繞浮動元素。
    • 脫離文檔流劫映、不占位置违孝。
    • 任何定義為float的元素都會自動被設置為一個塊狀元素顯示,相當于被定義display:block泳赋;聲明雌桑。這樣就可以為浮動元素定義width和height屬性,即使是內聯(lián)顯示元素也可以祖今。
    • 當我們沒有指定浮動元素寬度時校坑,浮動元素會自動收縮到能夠包含內容的寬度。
    • 當兩個或兩個以上的相鄰元素都被定義為浮動顯示時千诬,如果存在足夠的空間容納它們耍目,浮動元素之間可以并列顯示,它們的上邊線是在同一水平線上徐绑。如果沒有足夠空間那么后面的浮動元素將會下移到能夠容納它的地方這個向下移動的元素有可能產生一個單獨的浮動邪驮。
  • 浮動元素的影響:
    • 普通元素:普通元素將會占據(jù)其原來的位置,后面的浮動元素會浮在普通元素之上傲茄。
    • 文字:文字會環(huán)繞浮動元素顯示毅访。
    • 對其它浮動元素:從左到右,從上到下排列盘榨。
    • 當元素沒有設置寬度值喻粹,而設置了浮動屬性,元素的寬度隨內容的寬度的變化而變化草巡。
    • 當一個包含框中的元素全設置了浮動時磷斧,該包含框會出現(xiàn)“高度塌陷”現(xiàn)象。
    • 浮動的元素會脫離普通流捷犹,因此文檔流中的塊框會無視浮動的元素弛饭,但是文本不會。
    • inline元素設置浮動萍歉,會改變inline的display使得它像個block-level侣颂。

2.清除浮動指什么? 如何清除浮動?

  • 清除浮動:當一個容器里的內容浮動時,容器的高度不能自動伸長以適應內容的高度枪孩,會使得內容溢出到容器外面而影響布局憔晒。清除浮動就是指消除浮動所帶來的這種影響藻肄。
  • 如何清楚浮動:
    • 方法一:添加新的元素 、應用 clear:both拒担;
      <pre>
      HTML:
      <div class="outer">
      <div class="div1">1</div>
      <div class="div2">2</div>
      <div class="div3">3</div>
      <div class="clear"></div>
      </div>
      CSS:
      .clear{clear:both; height: 0; line-height: 0; font-size: 0}
      </pre>

    • 方法二:父級div定義 overflow: auto / hidden
      <pre>
      HTML:
      <div class="outer over-flow"> //這里添加了一個class
      <div class="div1">1</div>
      <div class="div2">2</div>
      <div class="div3">3</div>
      </div>
      CSS:
      .over-flow{
      overflow: auto;
      zoom: 1; //zoom: 1; 是在處理兼容性問題
      }
      </pre>

    • 方法三:偽元素法嘹屯;
      <pre>
      HTML:
      <div class="outer">
      <div class="div1">1</div>
      <div class="div2">2</div>
      <div class="div3">3</div>
      </div>
      CSS:
      .outer{
      zoom: 1;
      } //兼容ie
      .outer::after {
      content:'';
      display:block;
      width: 0;
      height: 0;
      clear:both;
      }
      </pre>

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

  • static: 默認值低零。沒有定位婆翔,元素出現(xiàn)在正常的流中(忽略 top, bottom, left, right 或者 z-index 聲明)。
  • inherit: 規(guī)定應該從父元素繼承 position 屬性的值掏婶。
  • relative: 生成相對定位的元素啃奴,相對于其正常位置進行定位。
    如果我想讓一個元素在他本來的位置做一些調整(位移)雄妥,我們可以將該元素定位設置為relative最蕾,同時指定相對位移(利用top,bottom,left,right)。
    有一點需要注意的是老厌,相對定位的元素仍然在文檔流中瘟则,仍然占據(jù)著他本來占據(jù)的位置空間。
  • absolute: 生成絕對定位的元素梅桩,相對于 static 定位以外的第一個父元素進行定位壹粟。
    如果你想在一個文檔(Document)中將一個元素放至指定位置拜隧,你可以使用absolute來定位宿百。
    如果沒有定位父元素,位置是相對于body來進行的洪添。
    絕對定位會使元素脫離文檔流中垦页,結果就是該元素原本占據(jù)的空間被其它元素所填充。
  • fixed: 生成絕對定位的元素干奢,相對于瀏覽器窗口進行定位痊焊。
    利用fixed定位,我們很容易讓一個div定位在窗口任意方位忿峻。
  • 注意:如果同時定義了left和right值薄啥,且width和height有值,那么left生效逛尚,right無效垄惧,同樣,同時定義了top和bottom绰寞,top生效到逊。

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

  • 概念:
    1.在 CSS 2.1中, 所有的盒模型元素都處于三維坐標系中铣口。 除了我們常用的橫坐標和縱坐標, 盒模型元素還可以沿著“z軸”層疊擺放觉壶, 當他們相互覆蓋時脑题, z軸順序就變得十分重要。
    2.這意味著其實CSS允許你在現(xiàn)有的渲染引擎上層疊的擺放盒模型元素铜靶。 所有的層都可以用一個整數(shù)(z軸順序)來表明當前層在z軸的位置叔遂。 數(shù)字越大, 元素越接近觀察者旷坦。Z軸順序用CSS的z-index屬性來指定掏熬。
  • z-index 屬性設置元素的堆疊順序。擁有更高堆疊順序的元素總是會處于堆疊順序較低的元素的前面秒梅。
  • Z-index 僅能在定位元素上奏效(position屬性值為 relative 或 absolute 或 fixed的對象)旗芬!
  • 相同z-index誰上誰下
    1.如果兩個元素都沒有定位發(fā)生位置重合現(xiàn)象或者兩個都已定位元素且z-index相同發(fā)生位置重合現(xiàn)象,那么按文檔流順序捆蜀,后面的覆蓋前面的疮丛。
    2.如果兩個元素都沒有設置z-index,使用默認值辆它,一個定位一個沒有定位誊薄,那么定位元素覆蓋未定位元素
  • 父子關系處理
    1.如果父元素z-index有效,那么子元素無論是否設置z-index都和父元素一致锰茉,會在父元素上方
    2.如果父元素z-index失效(未定位或者使用默認值)呢蔫,那么定位子元素的z-index設置生效
  • Z-index默認值為auto,則不建立層疊上下文。設置為0則會建立層疊上下文飒筑。
  • 使用:未使用Z-index的情況 , 使用后

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

  • 使用position:relative將元素偏移后片吊,其他的元素的位置則不會受該元素的影響發(fā)生位置改變來彌補它偏離后剩下的空間。
  • 使用負margin使位置偏離后协屡,其它元素將會彌補它偏離后的空間俏脊。

6. BFC 是什么?如何生成 BFC肤晓?BFC 有什么作用爷贫?

  • 概念
    Formatting context(格式化上下文) 是 W3C CSS2.1 規(guī)范中的一個概念。它是頁面中的一塊渲染區(qū)域补憾,并且有一套渲染規(guī)則漫萄,它決定了其子元素將如何定位,以及和其他元素的關系和相互作用盈匾。最常見的 Formatting context 有 Block fomatting context (簡稱BFC)和 Inline formatting context (簡稱IFC)腾务。
    CSS2.1 中只有 BFC 和 IFC, CSS3 中還增加了 GFC 和 FFC。
  • 如何生成BFC
    1.根元素(整個頁面就是一個大的BFC)
    2.float屬性不為none
    3.position為absolute或fixed
    4.display為inline-block, table-cell, table-caption, flex, inline-flex
    5.overflow不為visible
  • BFC的作用
    1威酒、防止margin重疊:根據(jù)BFC布局規(guī)則窑睁,同一個BFC中的相鄰塊級元素垂直方向的margin會重疊挺峡,故要解決margin重疊問題,只需要讓兩個塊級元素處于不同的BFC就ok了担钮。
    實例
    2橱赠、左右兩欄布局: BFC布局規(guī)則第4條規(guī)定:BFC的區(qū)域不會與float box重疊。
    實例
    3箫津、清理內部浮動:如果父元素不浮動狭姨,而子元素都浮動的話,那么父元素就無法自動撐開苏遥。解決這個問題可以讓父類元素形成BFC饼拍,因為根據(jù)BFC布局規(guī)則第6條得知,BFC計算高度時會把其內部浮動子元素的高度也計算在內田炭。
    實例
    4师抄、內層div的上下margin并不會撐開外層div,反而會使得外層div距離頂部和底部的距離增加教硫∵端保可以使外層div形成BFC來解決嵌套元素邊距疊加的問題。
    實例

7.在什么場景下會出現(xiàn)外邊距合并瞬矩?如何合并茶鉴?如何不讓相鄰元素外邊距合并?

  • 概念:
    外邊距合并是CSS中一個特殊的概念景用。當兩個外邊距相鄰時涵叮,它們會合并為較大的那一個。 包括相鄰元素的上下邊距伞插,父子元素的上下邊距割粮,甚至是同一元素的上下邊距。
    父子外邊距合并范例

  • 外邊距合并場景:
    1.毗鄰的兩個兄弟元素之間的外邊距會塌陷蜂怎;
    2.如果塊級父元素中穆刻,不存在上邊框置尔、上內邊距杠步、內聯(lián)元素、清除浮動這四條屬性(也可以說榜轿,當上邊框寬度及上內邊距距離為0時)幽歼,那么此時這個塊級父元素和其第一個子元素就會發(fā)生上外邊距合并現(xiàn)象,換句話說谬盐,此時這個父元素對外展現(xiàn)出來的外邊距將直接變成這個父元素和其第一個子元素的margin-top的較大者甸私。
    3.類似的,若塊級父元素的margin-bottom與它的最后一個子元素的margin-bottom 之間沒有父元素的border飞傀、padding皇型、inline content诬烹、height、min-height弃鸦、max-height分隔時绞吁,就會發(fā)生 下外邊距合并 現(xiàn)象。
    4.如果存在一個空的塊級元素唬格,其border家破、padding、inline content购岗、height汰聋、min-height、max-height都不存在喊积。那么此時它的上下邊距中間將沒有任何阻隔烹困,此時它的上下外邊距將會合并。

  • 合并規(guī)則:
    1.兩個margin都是正值的時候乾吻,取兩者的最大值韭邓;
    2.當 margin 都是負值的時候,取的是其中絕對值較大的溶弟,然后女淑,從0位置,負向位移辜御;
    3.當有正有負的時候鸭你,先取出負 margin 中絕對值中最大的,然后擒权,和正 margin 值中最大的 margin 相加袱巨。
    4.所有毗鄰的margin要一起參與運算,不能分步進行碳抄。

  • 解決方案:
    1愉老、給父元素添加padding或border。
    2剖效、讓其中一個元素生成BFC嫉入。
    3、被非空內容璧尸、padding咒林、border 或 clear 分隔開。
    4爷光、margin在垂直方向上不毗鄰垫竞。

代碼

1.實現(xiàn)如下alert效果,效果范例121

2.實現(xiàn)如下表單效果蛀序, 效果范例111

3.實現(xiàn)如下模態(tài)框效果欢瞪, 效果范例119

4.實現(xiàn)如下導航欄效果活烙,效果范例129

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市遣鼓,隨后出現(xiàn)的幾起案子瓣颅,更是在濱河造成了極大的恐慌,老刑警劉巖譬正,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宫补,死亡現(xiàn)場離奇詭異,居然都是意外死亡曾我,警方通過查閱死者的電腦和手機粉怕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抒巢,“玉大人贫贝,你說我怎么就攤上這事◎让眨” “怎么了稚晚?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長型诚。 經常有香客問我客燕,道長,這世上最難降的妖魔是什么狰贯? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任也搓,我火速辦了婚禮,結果婚禮上涵紊,老公的妹妹穿的比我還像新娘傍妒。我一直安慰自己,他們只是感情好摸柄,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布颤练。 她就那樣靜靜地躺著,像睡著了一般驱负。 火紅的嫁衣襯著肌膚如雪嗦玖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天电媳,我揣著相機與錄音踏揣,去河邊找鬼庆亡。 笑死匾乓,一個胖子當著我的面吹牛,可吹牛的內容都是我干的又谋。 我是一名探鬼主播拼缝,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼娱局,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咧七?” 一聲冷哼從身側響起衰齐,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎继阻,沒想到半個月后耻涛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡瘟檩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年抹缕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片墨辛。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡卓研,死狀恐怖,靈堂內的尸體忽然破棺而出睹簇,到底是詐尸還是另有隱情奏赘,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布太惠,位于F島的核電站磨淌,受9級特大地震影響,放射性物質發(fā)生泄漏凿渊。R本人自食惡果不足惜伦糯,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗽元。 院中可真熱鬧敛纲,春花似錦、人聲如沸剂癌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佩谷。三九已至旁壮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谐檀,已是汗流浹背抡谐。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桐猬,地道東北人麦撵。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親免胃。 傳聞我的和親對象是個殘疾皇子音五,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內容

  • 1.浮動元素有什么特征?對父容器羔沙、其他浮動元素躺涝、普通元素、文字分別有什么影響? 特征1.浮動元素脫離文檔流扼雏,按照其...
    我七閱讀 293評論 0 2
  • 問答 問題1. 浮動元素有什么特征坚嗜?對父容器、其他浮動元素诗充、普通元素惶傻、文字分別有什么影響? 浮動元素可以依據(jù) fl...
    Soarse閱讀 241評論 0 0
  • 浮動元素有什么特征?對父容器其障、其他浮動元素银室、普通元素、文字分別有什么影響?一個元素應沿其容器的左側或右側放置励翼,允許...
    _小黑閱讀 231評論 0 0
  • relative:生成相對定位的元素蜈敢,通過top,bottom,left,right的位置相對于其正常位置進行定位...
    zx9426閱讀 942評論 0 2
  • 一,浮動元素有什么特征汽抚?對父容器抓狭、其他浮動元素、普通元素造烁、文字分別有什么影響? 浮動模型是一種可視化格式模型否过,浮動...
    DeeJay_Y閱讀 868評論 0 4