marign塌陷解決方案

2021-10-25 05:27:26 字數 1615 閱讀 9373

在標準文件流中,豎直方向的margin會出現疊加現象(水平方向不會塌陷),兩個margin緊挨著,中間沒有border或者padding

margin直接接觸,就產生了合併

表現為較大的margin會覆蓋掉較小的margin,豎直方向的兩個盒子中間只有乙個較大的margin,這就是margin塌陷現象

先舉個例子

>

>

charset

="utf-8"

>

type

="text/css"

>

body

.box

style

>

head

>

>

class

=>

class

="box"

>

div>

div>

body

>

html

>

距離上邊100px;

原理:父子巢狀元素在垂直方向的margin,父子元素是結合在一起的,他們兩個的margi會取其中最大的值.

正常情況下,父級元素應該相對瀏覽器進行定位,子級相對父級定位.

但由於margin的塌陷,父級相對瀏覽器定位.而子級沒有相對父級定位,子級相對父級,就像坍塌了一樣.

1.給父級設定邊框或內邊距(不建議使用)

2.觸發bfc(塊級格式上下文)改變父級的渲染規則

方法:改變父級的渲染規則有以下四種方法

給父級盒子新增

position:absolute/fixed

display:inline-block;

float:left/right

overflow:hidden

這四種方法都能觸發bfc,但是使用的時候都會帶來不同的麻煩,具體使用中還需根據具體情況選擇沒有影響的來解決margin塌陷

3.使用偽元素(推薦使用)

/* 方法一 */

.clearmar::before

/* 方法二 */

.clearmar::before

偽元素之所以被稱為偽元素,就是因為他們不是真正的頁面元素,html沒有與之對應的元素,但是其用法和表現行為和真正的元素一樣,所以被成為偽元素。

為父盒子設定border,為外層新增border後父子盒子就不是真正意義上的貼合

為父盒子設定padding值;(不推薦

觸發bfc(會有不同的麻煩

為父盒子新增position:absolute/fixed;

為父盒子新增display:table;

為子盒子新增float:left/right;

為父盒子新增overflow:hidden;

給父盒子新增偽元素(before)(推薦);

頁面塌陷解決方案大集合

因為父級盒子很多情況下,不方便給高度,但是子盒子浮動就不占有位置,最後父級盒子高度為0,就影響了下面的標準流盒子。清除浮動主要為了解決父級元素因為子級浮動引起內部高度為0 的問題。清除浮動之後,父級就會根據浮動的子盒子自動檢測高度。父級有了高度,就不會影響下面的標準流了 選擇器 clear 清除屬性...

CSS盒子塌陷問題解決方案

什麼是盒子塌陷?外部盒子本應該包裹住內部的浮動盒子,結果卻沒有。問題出現的原因 父元素只包含浮動元素,那麼它的高度就會塌縮為零 前提就是你們沒有設定高度 height 屬性,或者設定了為auto,就會出現這種情況,如果父元素不包含任何的可見背景,這個問題會很難被注意到。因為子元素設定了float屬性...

CSS高度塌陷問題解決方案

高度塌陷的存在 原因分析 1doctype html 2 html 3 head 4 meta charset utf 8 5 title title 6 style type text css 78 box1 1314 box2 3435 box3 3940 style 41head 42 bod...