在學習CSS時,遇到的很多問題都是和margin有關,這個小怪獸總是出其不意的讓我的界面排版變的混亂,還讓人摸不著頭腦,原因還是在于我對他的一些屬性沒有進行一個深入的了解,導致我在設計之初就忽略了一些潛在的bug。所以本文就margin屬性以及常見的問題做一個總結歸納。
CSS 邊距屬性定義元素周圍的空間。通過使用單獨的屬性,可以對上、右、下、左的外邊距進行設置。也可以使用簡寫的外邊距屬性同時改變所有的外邊距?!猈3School
邊界,元素周圍生成額外的空白區?!翱瞻讌^”通常是指其他元素不能出現且父元素背景可見的區域?!狢SS權威指南
是不是看到以上的權威解釋還是不明所以?別急,我畫個圖你就明白了。
還不明白?那好,我給你舉個栗子,假設你住在一個別墅區,每棟別墅都是一個元素, 既然是別墅了那怎么著也得有個圍墻吧(當然也可以沒有,純粹取決于業主喜不喜歡)。圍墻就相當于上圖的border邊界(灰色區域),圍墻與房子(上圖的child即元素內容)之間的空間就是padding內邊距(黃色區域),而圍墻之外的空間就是外邊距margin了(紫色區域),你可以當做是別墅與別墅之間的空間距離。margin存在的目的就是控制元素之間的間隔使頁面排版更加的美觀整齊,但它不屬于元素的私有財產,在計算元素大小的時候可不要把margin算在內哦,畢竟你總不能把你家門口空氣算作你自己的吧,那太霸道啦!看到這里你是不是對margin的作用范圍有了大致的了解了,如果還不清楚,請繼續往下看呀~
1、margin始終透明。這個特性其實可以這么理解,margin存在的目的就是為了隔開不同的元素使布局更加的美觀,如果margin不是透明的就無法讓不同的元素產生間隙達到隔開的目的還會影響其他布局,所以margin必須是透明的。
2、簡寫特性。margin屬性可以設置4個值,分別是margin:top right bottom left;(可以按照順時針的方式記憶,即:上右下左。順序不能亂),這四個值也可以單獨設置,即:margin-top、margin-bottom、margin-right、margin-left。除了可以單獨設置之外,margin還可以進行簡寫(如非必要,不建議使用第三種簡寫),基本如下:
3、垂直方向外邊距合并。塊級元素的上外邊距(margin-top)與下外邊距(margin-bottom)有時會合并為一個外邊距,這樣的現象稱為“margin合并”。只發生在與當前文檔流方向相垂直的方向上,并且只能是塊級元素。
1、相鄰兄弟元素margin合并。這是margin合并中最常見、最基本的。例如:
p { margin: 1em 0; background-color: pink; }<p>第一行</p><p>第二行</p>
效果圖:
第一行和第二行的間距還是1em,因為第一行的margin-bottom和第二行的margin-top合并在了一起,并非上下相加。
2、父級和第一個/最后一個子元素合并。
1 <style> 2 .grandfather { 3 border: 2px solid red; 4 width: 300px; 5 height: 300px; 6 } 7 8 .father { 9 width: 200px;10 height: 200px;11 background-color: yellow;12 }13 14 .son {15 margin: 2em 0;16 background-color: pink;17 }18 </style>19 20 <body>21 <p >22 <p >23 <p >this is son</p>24 </p>25 </p>View Code
效果圖:
當給子元素添加外邊距之后,父元素和子元素的上外邊距(margin-top)發生了合并,導致父元素上外邊距等同于變成了子元素的上外邊距(合并的外邊距值若都為正,則外邊距取兩者的最大值)造成了視覺上的父元素塌陷但實際父元素的上外邊距的值并未改變。如何阻止這里margin合并的發生呢?
對于margin-top合并,可以進行如下操作(滿足一個條件即可):
對于margin-bottom合并,可以進行如下操作(滿足一個條件即可):
上面例子中在.father中添加overflow:hidden效果如下:
3、空塊級元素的margin合并。例如:
.father { overflow: hidden; }.son { margin: 1em 0; } <p > <p ></p> </p>
效果圖:
此時,.father所在的這個父級<p>元素高度僅僅是1em,因為.son這個空<p>元素的margin-top和margin-bottom合并在了一起。
案列展示:
(1)margin-top為負值
(2)margin-left為負值
(3)margin-right為負值
(4)margin-bottom為負值
1、display:inline的非替換元素的垂直margin無效,對于內聯替換元素垂直margin有效,并且沒有margin合并的問題,所以圖片永遠不會發生margin合并。
2、表格中的<tr>和<td>元素或者設置display計算值是table-cell或table-row的元素的margin都是無效的。但是如果計算值是table-caption、table或者inline-table則沒有此問題,可以通過margin控制外間距,甚至::first-letter偽元素也可以解析margin。
3、margin合并的時候,更改margin值可能是沒有效果的。以父子margin重疊為例,假設父元素設置有margin-top:50px,則此時子元素設置margin-top:30px就沒有任何效果表現,除非大小比50px大,或者是負值。
4、絕對定位元素非定位方向的margin值“無效”。因為絕對定位元素的渲染是獨立的,普通元素和兄弟元素是互相關聯的,但是絕對定位元素由于獨立渲染無法和兄弟元素產生聯系,因此margin無法影響兄弟元素定位,所以看上去就是無效的。
5、定高容器的子元素的margin-bottom或者寬度定死的子元素的margin-right的定位“失效”。這個現象的本質和和上面絕對定位元素非對立方margin值“無效”類似。原因在于,若想使用margin屬性改變自身的位置,必須是和當前元素定位方向一樣的margin屬性才可以,否則,margin只能影響后面的元素或者父元素。
好了,總結了這么多,我想你應該對margin屬性不陌生了吧,如果對你有幫助,就點個贊吧~
https://www.cnblogs.com/zhangmingze/articles/4664074.html
https://blog.csdn.net/weixin_39855431/article/details/79929135
http://www.nowamagic.net/librarys/veda/detail/1608
https://blog.csdn.net/xun__xing/article/details/107334925
https://www.cnblogs.com/jjucap/p/5339725.html
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
唐山三女河機場航班時刻表?來自環渤海新聞網的消息唐山機場自27日起開始運行夏秋航班。上海和廣州的航班時刻表沒有變化。唐山-石家莊-昆明航班時刻比冬春晚10分鐘。唐山-Xi安航班時刻暫停,唐山-宜昌-三亞航班時刻調整。新的時間比以前更方便市民出行。具體為08: 00從三亞起飛,10: 05到達宜昌,10: 45從宜昌起飛,12: 30到達唐山、唐山。實施日期為2012年3月27日至2012年9月30...
11對戰平臺警告!檢測到不匹配是怎么回事?不運行某些程序的時候,經常會會直接出現出現了,接著該程序就關了。就像再次出現這個現象有方面的,一是硬件,即內存方面有問題,二是軟件,這就有多方面的問題了。故障分析硬件方面:一般來說,內存又出現問題的可能性并不大,比較多方面是:內存條主板壞、內存質量有問題,有應該是2個差別牌子不同容量的內存混插,也也很很容易再次出現不不兼容的情況,同樣的也要注意一點散熱問題...
100萬日元在日本人眼里算多嗎?很多人認為100萬日元兌換成大約是6萬元,應該不是很多錢。這只是一個完全錯誤的想法。我也是這么想的,因為日本收入高,物價低。但是,當你接觸到年輕一代的日本人,和日劇的情節進行交叉對比,你會發現,實際的100萬日元真的不是一筆小數目。首先,日本人不 他們沒有像人那樣存錢買房的習慣,所以每個月花在租房上的錢占了他們收入的很大一部分。其次,日本服務的價格都很高,每個月想省...