HTML中行內元素的豎直方向的padding和margin是否真的無效

来源:http://www.cnblogs.com/mingjiezhang/archive/2016/04/10/5373667.html
-Advertisement-
Play Games

參考資料:Inline elements and padding 今天寫一個導航欄時遇到了一個問題:行內元素的padding-top,padding-bottom和margin-top,margin-bottom是不是真的是無效的? 接下來就這個問題將具體分析: 1.行內元素擁有盒子模型麽 答案是是 ...


參考資料:Inline elements and padding

 

今天寫一個導航欄時遇到了一個問題:行內元素的padding-top,padding-bottom和margin-top,margin-bottom是不是真的是無效的?

接下來就這個問題將具體分析:

1.行內元素擁有盒子模型麽

答案是是的。沒錯,行內元素跟塊級元素一樣,同樣擁有盒子模型。

2.行內元素的padding-top,padding-bottom和margin-top,margin-bottom是否無效

答案同樣是是的。盒子模型的width,height和padding-top,padding-bottom和margin-top,margin-bottom設置都是無效的。但是...

3.實戰探討行內元素的padding-top,padding-bottom和margin-top,margin-bottom

先來看兩個實例:

example1:

源碼:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>example1</title>
<style type="text/css">
*{
  margin:0px;
  padding:0px;
  text-decoration:none;
  list-style:none;
}
#main{
  min-width:1280px;
  background-color:pink;
  margin:auto;
  height:800px;
}
nav{
  height:50px;
  background-color: #ffffff;
}
nav ul li{
  height:50px;
  float:left;
  background-color: #ffffff;
}
a{
  line-height:50px;
  padding:30px;
  margin:30px;
  background-color:green;
  font-size:14px;
  color:rgb(231,79,77);
}
</style>
</head>
<body>
<div id="main">
<header>
    <nav>
        <ul>
            <li><a class="hnav" href="#">首頁</a></li>
            <li><a class="hnav" href="#">最新活動</a></li>
            <li><a class="hnav" href="#">項目介紹</a></li>
            <li><a class="hnav" href="#">愛心社區</a></li>
            <li><a class="hnav" href="#">關於我們</a></li>
        </ul>
    </nav>
</header>
</div>
</body>
</html>

 

效果(不會做點鏈接彈出demo的效果,會的大神求教):

看效果圖:鏈接元素a的父元素li以及nav元素的高度都是50px,且都為白色背景,但是設置a的css樣式為padding:30px之後,發現高度超過了白色區域(即50px),按照行內元素的盒子模型理論,應該是padding-top和padding-bottom都是無效的,然而這裡卻有效了麽?先來看另外一個例子:

example2:

 

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>example2</title>
<style type="text/css">
*{
  margin:0px;
  padding:0px;
}
span{
  color:black;
  padding:50px;
  margin:50px;
  border:3px solid black;
}
.pone{
  color:blue;
}
.ptwo{
  color:tomato;
}
</style>
</head>
<body>
    <p class="pone">
    test 1<span>test span</span>test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 test 1 
    </p>
    <p class="ptwo">test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2 test 2</p>
</body>
</html>

效果:

 又是個奇怪的現象,我在截取另一張圖,其他都一樣,只是test 1部分的數量大量增加:

是的效果如上圖,我們可以看到span設置的margin確實符合行內元素的盒子模型,水平方向外邊距有效,豎直方向外邊距無效,但是對於padding似乎是水平和垂直方向都有效,但我們仔細看上述example1和example2的兩張圖:example1中,我們設置的padding-top和padding-bottom是相等的,那麼如果豎直方向的內邊距真的有效,那麼content的字體就應該居中,事實上並不是;example2中,我們無視邊框的存在,可以看到豎直方向的內邊距看不到任何效果,只有水平方向外邊距有效。因此,行內元素豎直方向內邊距確實是無效的

查w3c的官方文檔並沒有找到這個奇葩現象解釋(可能我英語比較爛,沒找到),後來在一篇老外的文章里找到了答案:

While padding can be applied to all sides of an inline element, only left and right padding will have an effect on surrounding content. In the example below, 50px of padding has been applied to all sides of the element. As you can see, it has an affect on the content on each side, but not on content above or below

這段話基本解釋了上述現象,當我們使用內邊距時,只有左右方向有效;當我們設置四個方向的內邊距時,對於該行內元素,確實顯示出效果,但是豎直方向的內邊距只有效果,對其他元素無任何影響。

因此,行內元素的padding-top,padding-bottom和margin-top,margin-bottom是真的是無效;不過要註意一點,對於豎直方向的內邊距該行內元素的內容範圍是增大了,不過只是表象,對周圍元素無任何影響。

 

轉載請註明原文地址並標明轉載:http://www.cnblogs.com/mingjiezhang/p/5373667.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題場景: 在實現響應式佈局的過程中,如何設置字體大小在不同的視窗尺寸以及不同的移動設備的可讀性? 需要瞭解的有: 1.px,em,pt之間的換算關係 1em = 16px 1px = 1/16 em = 0.0625em ////以下用的比較少////// 1em = 12pt 1px = 3/4 ...
  • 對於多個元素同在同一行的佈局,如比較常見的是輪播。下麵我將探討這這一佈局的做法: 首先約定 結果如下: div.row div.col div.col div.col ... 做法一: 設定 的寬度為 ,然後設置 為`float:left display:inline block` 對於 , 需要清 ...
  • jquery中attr和prop的區別、 什麼時候用 attr 什麼時候用 prop 在高版本的jquery引入prop方法後,什麼時候該用prop?什麼時候用attr?它們兩個之間有什麼區別?這些問題就出現了。 關於它們兩個的區別,網上的答案很多。這裡談談我的心得,我的心得很簡單: 對於HTML元 ...
  • 向下滑動網頁的時候能夠自動載入圖片並顯示。 盛放圖片的盒子模型如下: 設置img-width為150px,然後box_img添加內邊距和陰影效果,box的外邊距為0,添加內邊距。盒子的寬度是由img-width和邊距撐開的。也就是說盒子之間是沒有間距的,但是盒子內部有一些邊距的效果。這樣在js設置位 ...
  • 內置對象:不依賴於宿主對象,在程式執行之前就已經存在。例如Object,Array和String。 今天主要學習另外兩個單體內置對象,Global和Math。 (一)Global 對象 URI編碼方法: encodeURI()方法可以對URI進行編碼,主要用於整個URI。不會對本身屬於URI的特殊字 ...
  • 場景:1 1 <div class="div1"> 2 click me div1 3 <div class="div2">click me div2</div> 4 </div> 5 6 $(".div2").on('click',function(){ 7 alert($(this).attr( ...
  • 第十一章 1、 box-sizing:border-box(讓寬度和高度包含內邊距和邊框) 2、 clear讓後面的元素顯示在浮動元素的後面 3、 z-index只對只對絕對、固定、相對定位的元素有效 4、 vertical-aligh只用於行內元素 baseline/middle/sub/supe ...
  • 一門語言好不好用,很大程度上取決於它的api是否完善,方便使用。很遺憾jqm的api不那麼好用(對比extjs,jqm依賴jquery,也許我不太熟悉jquery也會導致我覺得jqm的api不好用),所以有必要專門寫這段來記錄想api的每個模塊如何使用。模塊截圖如下 CSS Framework: j ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...