CSS外邊距(margin)重疊及防止方法

#css外邊距margin重疊及防止方法CSS外邊距(margin)重疊及防止方法

#1-什么是外邊距margin重疊1. 什么是外邊距(margin)重疊

外邊距重疊是指兩個或多個盒子(可能相鄰也可能嵌套)的相鄰邊界(其間沒有任何非空內容、補白、邊框)重合在一起而形成一個單一邊界。

#2-相鄰marign重疊的問題2. 相鄰marign重疊的問題

#21-示例2.1 示例

<style>*{margin:0;padding: 0;}.divout{width: 100px;height: 100px;background: yellow;margin-bottom: 50px;border: 1px solid black;}.divout1{width:50px;height: 50px;background: yellow;margin-top: 80px;/*float:left;*//*position:absolute;*/border: 1px solid black;}
</style>
<body><div class="divout">        </div><div class="divout1">        </div>
</body>
復制代碼

#22-外邊距重疊計算方式2.2 外邊距重疊計算方式

  • 全部都為正值,取最大者;

  • 不全是正值,則都取絕對值,然后用正值的最大值減去絕對值的最大值;


  • 沒有正值,則都取絕對值,然后用0減去最大值。

#23-解決辦法2.3 解決辦法

底部元素設置為浮動 float:left;

底部元素的position的值為absolute/fixed

在設置margin-top/bottom值時統一設置上或下

#3-元素和父元素margin值問題3. 元素和父元素margin值問題

父元素無 border、padding、inline content 、 clearance時,子元素的margin-top/bottom會與父元素的margin產生重疊問題。

#31-示例3.1 示例

<style>*{margin:0;padding: 0;color: black;}#parrent{width:300px;height:150px;margin-top: 20px;background:teal;}#box1{width:100px;height:100px;background:aqua;margin:100px 0;}
</style>
<body><div id="parrent"><div id="box1">我是box1</div>我是內容</div>
</body>
復制代碼

#32-解決辦法3.2 解決辦法

  • 外層元素添加padding
  • 外層元素 overflow:hidden;
  • 外層元素透明邊框 border:1px solid transparent;
  • 內層元素絕對定位 postion:absolute:
  • 內層元素 加float:left;或display:inline-block;

#4-相關文章

史上最全面、最透徹的BFC原理剖析

CSS清浮動處理(Clear與BFC)

邊界重疊是指兩個或多個盒子(可能相鄰也可能嵌套)的相鄰邊界(其間沒有任何非空內容、補白、邊框)重合在一起而形成一個單一邊界。

兩個或多個塊級盒子的垂直相鄰邊界會重合。結果的邊界寬度是相鄰邊界寬度中最大的值。如果出現負邊界,則在最大的正邊界中減去絕對值最大的負邊界。如果沒有正邊界,則從零中減去絕對值最大的負邊界。注意:相鄰的盒子可能并非是由父子關系或同胞關系的元素生成。

但是邊界的重疊也有例外情況:

1、水平邊距永遠不會重合。

2、在規范文檔中,2個或以上的塊級盒模型相鄰的垂直margin會重疊。最終的margin值計算方法如下:

a、全部都為正值,取最大者;

b、不全是正值,則都取絕對值,然后用正值減去最大值;

c、沒有正值,則都取絕對值,然后用0減去最大值。

注意:相鄰的盒模型可能由DOM元素動態產生并沒有相鄰或繼承關系。

3、相鄰的盒模型中,如果其中的一個是浮動的(float),垂直margin不會重疊,并且浮動的盒模型和它的子元素之間也是這樣。

4、設置了overflow屬性的元素和它的子元素之間的margin不被重疊(overflow取值為visible除外)。

5、設置了絕對定位(position:absolute)的盒模型,垂直margin不會被重疊,并且和他們的子元素之間也是一樣。

6、設置了display:inline-block的元素,垂直margin不會重疊,甚至和他們的子元素之間也是一樣。

7、如果一個盒模型的上下margin相鄰,這時它的margin可能重疊覆蓋(collapse through)它。在這種情況下,元素的位置(position)取決于它的相鄰元素的margin是否重疊。

a、如果元素的margin和它的父元素的margin-top重疊在一起,盒模型border-top的邊界定義和它的父元素相同。

b、另外,任意元素的父元素不參與margin的重疊,或者說只有父元素的margin-bottom是參與計算的。如果元素的border-top非零,那么元素的border-top邊界位置和原來一樣。

一個應用了清除操作的元素的margin-top絕不會和它的塊級父元素的margin-bottom重疊。

注意,那些已經被重疊覆蓋的元素的位置對其他已經重疊的元素的位置沒有任何影響;只有在對這些元素的子元素定位時,border-top邊界位置才是必需的。

8、根元素的垂直margin不會被重疊。

外邊距(margin)重疊示例

外邊距重疊是指兩個垂直相鄰的塊級元素,當上下兩個邊距相遇時,起外邊距會產生重疊現象,且重疊后的外邊距,等于其中較大者。

圖示:

另一個重疊現象是當一個元素包含在另一個元素之中時,子元素與父元素之間也會產生重疊現象,重疊后的外邊距,等于其中最大者:

同理,如果一個無內容的空元素,其自身上下邊距也會產生重疊。

外邊距重疊的意義

外邊距的重疊只產生在普通流文檔的上下外邊距之間,這個看起來有點奇怪的規則,其實有其現實意義。設想,當我們上下排列一系列規則的塊級元素(如段落P)時,那么塊元素之間因為外邊距重疊的存在,段落之間就不會產生雙倍的距離。

防止外邊距重疊解決方案:

雖然外邊距的重疊有其一定的意義,但有時候我們在設計上卻不想讓元素之間產生重疊,那么可以有如下幾個建議可供參考:

  1. 外層元素padding代替
  2. 內層元素透明邊框 border:1px solid transparent;
  3. 內層元素絕對定位 postion:absolute:
  4. 外層元素 overflow:hidden;
  5. 內層元素 加float:left;或display:inline-block;
  6. 內層元素padding:1px;

以上建議可根據實際情況來采取。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390276.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390276.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390276.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

composer windows安裝

一.前期準備: 1.下載安裝包,https://getcomposer.org/download/ 2.在php.ini文檔中打開extensionphp_openssl.dll 3.下載php_ssh2.dll、php_ssh2.pdb,http://windows.php.net/downloads/pecl/releases/ssh2/0.12/ 4.把php_ssh2.dll、php_ssh2.pdb文件放php的ext文件夾 5.重啟ap…

spring整合mybatis采坑

本來這個錯誤是整合spring和mybatis遇到的錯誤&#xff0c;但是一直沒有解決&#xff0c;但是在做SpringMVC時也了出現了這樣的錯誤org.springframework.beans.factory.BeanCreationException: Error creating bean with name sqlSessionFactory defined in class path resourc…

處理測試環境硬盤爆滿

測試環境經常會收到這類告警 第一步 登陸機器查看硬盤使用 執行df 好吧,使用情況真不妙,根目錄占用過大 第二步 確定哪個文件太大或者文件過多 進入爆滿的目錄,如這里是根目錄 cd / 然后找下面哪個文件夾或者文件太大,有幾種方式: 1.dusudo du -h --max-depth1 | sort -hr 越前…

LeetCode-46. Permutations

一、問題描述 就是全排列問題。 二、問題解決 應該哪一本數據結構的書上都有講了。 void get_permute(vector<int>& nums, int pos, vector<vector<int>>& result) {if (nums.size() pos) {result.push_back(nums);return;}for (int i pos; i <…

web操作系統開發的_哪種操作系統更適合Web開發

web操作系統開發的If youre new to web development and are in the market for a new laptop, you might be wondering which operating system is best.如果您是Web開發的新手&#xff0c;并且正在購買新的筆記本電腦&#xff0c;您可能想知道哪種操作系統是最好的。 Spoile…

白鷺引擎 - 顯示對象的基準點與橫縱坐標 ( 繪制一個來回移動的綠色方塊 )

class Main extends egret.DisplayObjectContainer {/** * Main 類構造器, 初始化的時候自動執行, ( 子類的構造函數必須調用父類的構造函數 super )* constructor 是類的構造函數, 類在實例化的時候調用* egret.Event.ADDED_TO_STAGE, 在將顯示對象添加到舞臺顯示列表時調度*/…

SpringBoot項目屬性配置

我們知道&#xff0c;在項目中&#xff0c;很多時候需要用到一些配置的東西&#xff0c;這些東西可能在測試環境和生產環境下會有不同的配置&#xff0c;后面也有可能會做修改&#xff0c;所以我們不能在代碼中寫死&#xff0c;要寫到配置中。我們可以把這些內容寫到applicatio…

670. 最大交換

670. 最大交換 給定一個非負整數&#xff0c;你至多可以交換一次數字中的任意兩位。返回你能得到的最大值。 示例 1 : 輸入: 2736 輸出: 7236 解釋: 交換數字2和數字7。 示例 2 : 輸入: 9973 輸出: 9973 解釋: 不需要交換。 解題思路 目標就是優先鎖定高位&#xff0c;像…

flexbox布局_Flexbox vs Grid-如何構建最常見HTML布局

flexbox布局There are so many great CSS resources all over the internet. But what if you just want a simple layout and you want it NOW? 互聯網上有很多很棒CSS資源。 但是&#xff0c;如果您只是想要一個簡單的布局而現在就想要呢&#xff1f; In this article, I d…

789. 逃脫阻礙者

789. 逃脫阻礙者 你在進行一個簡化版的吃豆人游戲。你從 [0, 0] 點開始出發&#xff0c;你的目的地是 target [xtarget, ytarget] 。地圖上有一些阻礙者&#xff0c;以數組 ghosts 給出&#xff0c;第 i 個阻礙者從 ghosts[i] [xi, yi] 出發。所有輸入均為 整數坐標 。 每一…

計算機視覺-自定義對象檢測器

1、模板匹配 運行指令&#xff1a;python template_matching.py --source 3.jpg --template 2.jpg import argparse import cv2ap argparse.ArgumentParser() ap.add_argument("-s", "--source", requiredTrue, help"Path to the source image"…

Java 微信公眾號導出所有粉絲(openId)

由于公眾號換了公司主體&#xff0c;需要做遷移&#xff0c;玩家的openId數據需要做處理。 (我是按我要的json格式&#xff0c;將粉絲導成了1萬條數據的一個json文件) 文件格式&#xff1a; {"info":[{"openId":"ogVous494ltuNmO4zHb1seHeGLSk"}…

javascript閉包_JavaScript閉包教程–帶有JS閉包示例代碼

javascript閉包Closures – many of you JavaScript devs have probably heard this term before. When I started my journey with JavaScript, I encountered closures often. And I think theyre one of the most important and interesting concepts in JavaScript. 閉包–…

1646. 獲取生成數組中的最大值

1646. 獲取生成數組中的最大值 給你一個整數 n 。按下述規則生成一個長度為 n 1 的數組 nums &#xff1a; nums[0] 0 nums[1] 1 當 2 < 2 * i < n 時&#xff0c;nums[2 * i] nums[i] 當 2 < 2 * i 1 < n 時&#xff0c;nums[2 * i 1] nums[i] nums[i …

docker保存日志文件到本地

其實很簡單 docker logs 你需要添加的額外參數 容器id >文件名稱 然后查看這個文件就可以了&#xff0c;也可以通過ftp協議下載到本地

防反射JavaScript –如何讓您的JS等待

Debounce methods do not execute when invoked. Instead, they wait for a predetermined time before executing. If the same method is called again, the previous is cancelled and the timer restarts.防抖動方法在調用時不執行。 而是&#xff0c;它們在執行之前等待預…

21天學通Visual.Basic pdf

下載地址&#xff1a;網盤下載《21天學通Visual Basic(第2版)》是Visual Basic 6.0的入門教程&#xff0c;主要針對沒有程序設計基礎的讀者&#xff0c;詳細介紹了Visual Basic 6.0的基本概念和編程技術。書中通過大量的范例及綜合練習來介紹Visual Basic 6.0的基本概念、語言特…

297. 二叉樹的序列化與反序列化

297. 二叉樹的序列化與反序列化 序列化是將一個數據結構或者對象轉換為連續的比特位的操作&#xff0c;進而可以將轉換后的數據存儲在一個文件或者內存中&#xff0c;同時也可以通過網絡傳輸到另一個計算機環境&#xff0c;采取相反方式重構得到原數據。 請設計一個算法來實現…

交互式圖表_如何構建羅馬數字轉換器和交互式羅馬數字圖表

交互式圖表The Roman numerals are no longer an essential part of our daily lives. But we do use them when designing monuments, clocks, and even for sporting events.羅馬數字不再是我們日常生活中必不可少的部分。 但是我們在設計紀念碑&#xff0c;鐘表甚至體育賽事…

Python 08 面向對象

Python 面向對象 1、編程范式 2、面向對象特性 3、屬性、方法 4、三大特性 5、高級方法 6、類的特殊成員方法 7、反射 8、異常處理 9、單例模式 一、編程范式 編程&#xff1a;程序員用特定的語法數據結構算法組成的代碼來告訴計算機如何執行任務的過程 &#xff0c; 實現一個…