行內元素通常是內容的容器,而塊級元素通常是其餘容器的容器,行內元素適合顯示具體內容,而塊級元素適合作佈局。css
塊級元素(block):獨佔一行,對寬高的屬性值生效;若是不給寬度,塊級元素就默認爲瀏覽器的寬度,即就是100%寬。瀏覽器
行內元素(inline):能夠多個標籤存在一行,對寬高屬性值不生效,徹底靠內容撐開寬高。佈局
行內塊元素(inline-block):結合的行內和塊級的優勢,既能夠設置長寬,可讓padding和margin生效,又能夠和其餘行內元素並排。測試
其中img和input爲行內塊元素。spa
<head> <meta charset="UTF-8"> <title>測試</title> <style type="text/css"> p{ background-color: red; height: 500px; width: 30%; padding: 20px; margin: 20px; float: left;} div{ background-color: green; height: 50px; width: 40%; padding: 20px; margin: 20px;} span{ background-color: gray; height: 70px; padding: 40px; margin: 20px; float:left; width:200px;} strong{ background-color: blue; height: 70px; padding: 40px; margin: 20px;} </style> <!--<p>塊級元素一</p>--> <div>塊級元素一</div> <span>行內元素一</span> <strong>行內元素二</strong> </body>
如圖,當把行內元素一設爲左浮動時,就能夠爲其設置寬度了,說明它已經變成了塊級元素。code
2. position: 當爲行內元素進行定位時,position:absolute與position:fixed.都會使得原先的行內元素變爲塊級元素。ip
3 .display:ci
一、塊級標籤轉換爲行內標籤:display:inline;input
二、行內標籤轉換爲塊級標籤:display:block;it
三、轉換爲行內塊標籤:display:inline-block;
緣由是塊級標籤若是不給寬度,塊級元素就默認爲瀏覽器的寬度,即就是100%寬,那麼在100%的寬度中居中生效;可是行內元素的寬徹底是靠內容撐開,因此寬度就是內容撐開的寬:
因此塊級是在盒子中間居中了,可是由於行內元素的寬就是內容寬,沒有可居中的空間,因此text-align:center;就沒有做用;可是若是給font轉換爲塊級就不同了:
<style type="text/css"> div{ background-color: green; height: 50px; width: 40%;; padding: 20px; margin: 20px;} span{ background-color: gray;height: 70px; padding: 40px;margin: 20px;} strong{background-color: blue; height: 70px; padding: 40px; margin: 20px; float: left; } </style> <div>塊級元素一</div> <span>行內元素一</span> <strong>行內元素二</strong>
如圖所示,當咱們改變padding值時,效果是背景向四個方向擴展,padding-top和padding-bottom是增大的,可是對於塊狀元素一是沒有影響的(在豎直方向上),否則行內元素一也不會擠入塊狀元素了。
下面的實例能夠看到若是inline的元素沒有內容,「padding-top、padding-bottom"將不起做用
<style> body,div{ margin: 0; padding:0; } .item1{ height:100px; background-color: red; } .item2{ display: inline; padding-top: 50px; padding-bottom: 50px; background-color: pink; } </style> <div class="item1"></div> <div class="item2"></div>
若是想讓padding-top或者padding-bottom起做用,只須要給padding-left或者padding-right設置一個值,或者當inline的元素有內容時就會起做用。
<style> body,div{ margin: 0; padding:0; } .item1{ height:100px; background-color: red; } .item2{ display: inline; padding-top: 50px; padding-bottom: 50px; padding-left: 50px; background-color: pink; } </style> <div class="item1"></div> <div class="item2"></div>
<style> body,div{ margin: 0; padding:0; } .item1{ display: inline-block; width: 100px; height:100px; margin-top: 20px; background-color: red; } .item2{ margin-top: 100px; display: inline-block; background-color: pink; } </style> <div class="item1">item1</div> <div class="item2">item2</div>
<style> body,div{ margin: 0; padding:0; } .item1{ display: inline-block; width: 100px; height:100px; line-height: 100px; background-color: red; } .item2{ display: inline-block; background-color: pink; } </style> <div class="item1">item1</div> <div class="item2">item2</div>
如圖所示,inline-block碰到同類時,行高也會一塊兒使用。其餘的padding-top和margin-top甚至都會一塊兒使用
<style> body,div{ margin: 0; padding:0; } div{ display: inline; background-color: #61dafb; } </style> <div class="item1">item1</div> <div class="item2">item2</div>
能夠看到兩個div之間會有幾個像素的間距,這個間距是有換行或回車致使的。有如下解決方法
(1)將空格直接刪除,放到一行
<div class="item1">item1</div><div class="item2">item2</div>
(2)在空格代碼中加入註釋
<div class="item1">item1</div><!-- --><div class="item2">item2</div>
(3)設置margin-left爲負值,可是每一個瀏覽器的間距不同,因此基本不用這種方法
.item2{ margin-left:-8px; display:inline; background-color:pink; }
(4)給父元素增長「font-size:0px"
<style> body,div{ margin: 0; padding:0; } body{ font-size: 0px; } .item1{ display: inline-block; width:100px; height:100px; font-size: 20px; background-color: red; } .item2{ display:inline-block; font-size: 20px; background-color: pink; } </style> <div class="item1">item1</div> <div class="item2">item2</div>
(5)給父元素加letter-spacing負值,而後經過子元素清除letter-spacing值
<style> body,div{ margin: 0; padding:0; } body{ letter-spacing: -8px; } body *{ letter-spacing: 0px; } .item1{ display: inline-block; width:100px; height:100px; background-color: red; } .item2{ display:inline-block; background-color: pink; } </style> <div class="item1">item1</div> <div class="ite