天天看點

CSS之布局方式(内/外部顯示及inline-block顯示類型)附<行内塊空白間隙解決方案>一、布局方式二、行内塊元素inline-block 顯示類型

文章目錄

  • 一、布局方式
    • 1. 外部顯示類型
      • a.塊級盒子/元素
      • b.行内盒子/元素
    • 2. 内部顯示類型
      • 2.1 flex 流式布局
  • 二、行内塊元素inline-block 顯示類型
    • 2.1行内塊的空白間隙解決方案

一、布局方式

tip:以下示例代碼為友善觀察已在css中加上邊框

布局方式分為外部顯示類型和内部顯示類型兩種:

1. 外部顯示類型

浏覽器預設的布局方式,控制的是相鄰盒子之間的布局,分為塊級盒子和行内盒子兩種:

a.塊級盒子/元素

  • 塊級元素就可以設定寬度和高度,
  • 隻有文字内容不設定寬度高度,寬度為父元素的一行,高度為内容撐開的高度。
  • 寬度高度可以設定
  • 内外邊距設定均有效果
  • 排列方式,從上至下

比如

<div>

<h1>..<h6>

,

<p>

等,單獨成行,排列從上向下

它的寬度(指盒子的整體寬度)會占滿整個浏覽器,後邊的盒子會被擠占到下一行去顯示。

<!--塊級盒子-->
<p>這是一段段落</p>
<p>這是第二段</p>
<h1>這是一個h1</h1>
<div>這是一個盒子</div>
           
CSS之布局方式(内/外部顯示及inline-block顯示類型)附<行内塊空白間隙解決方案>一、布局方式二、行内塊元素inline-block 顯示類型

b.行内盒子/元素

  • 内聯元素的寬高是auto,寬高隻會一直随内容的寬高在同步變化。
  • 寬度高度是auto,靠内容撐開
  • 設定寬度高度無效
  • 設定上下内外邊距無效
  • 排列方式,從左至右

比如

<span>

,

<a>

,

<i>

,

<b>

,

<s>

等,它的寬度是内容的寬度,後邊的盒子會跟在它的後邊繼續排列

包括行内塊

<span >這是一行文字</span>
<a href = "http://www.baidu.com">一個連接配接</a>
<b>粗體</b>
           
CSS之布局方式(内/外部顯示及inline-block顯示類型)附<行内塊空白間隙解決方案>一、布局方式二、行内塊元素inline-block 顯示類型

差別:

  • 行内盒子:無法手動設定寬高

    padding 和 margin :

    垂直方向上生效,但不會擠占其他盒子的空間, 導緻重疊;

    水準方向上則會擠占其他盒子的空間。

.inline {
  margin: 25px;
  padding: 25px;
}
<p>在裡邊有一個<span class="inline">行内</span>元素</p>
<p>這是另一塊級元素</p>
           
CSS之布局方式(内/外部顯示及inline-block顯示類型)附<行内塊空白間隙解決方案>一、布局方式二、行内塊元素inline-block 顯示類型
  • 塊級盒子:寬高、padding 和 margin 都生效并且擠占空間。
<style>
#block2 {
    border: yellow 2px solid;
    height: 100;
    width: 300;
    padding: 10;
    margin: 10;
}
</style>
<p id = "block2">我是一個塊級</p>
<p id = "block2">我是另一塊級盒子</p>
           
CSS之布局方式(内/外部顯示及inline-block顯示類型)附<行内塊空白間隙解決方案>一、布局方式二、行内塊元素inline-block 顯示類型

2. 内部顯示類型

控制這個盒子内部的 “子盒” 之間的排列方式。

行内盒子裡邊隻能有行内盒子,不能有塊級盒子

設定 display 的值修改内部盒子的排列方式

  • display: flex

    流式布局 :
  • display: grid

    栅格布局

    一種自适應布局,能根據不同終端自動伸縮容器的寬高

它們屬于非正常的文檔流。

2.1 flex 流式布局

display:flex

首先,放置兩個塊級盒子:

<div class="container">
    <p>一yiyiyi</p>
    <p>二ererer</p>
</div>
           

可以看到兩個盒子單獨占了一行:

CSS之布局方式(内/外部顯示及inline-block顯示類型)附<行内塊空白間隙解決方案>一、布局方式二、行内塊元素inline-block 顯示類型

但此時我們想讓一個盒子裡的兩個塊級元素放在相同的一行,那麼也相當簡單~

隻要在style中設定兩個塊級的父元素

display: flex;

就可以實作啦!

<style>
.container {
    display: flex;
}
</style>
    
<div class="container">
    <p>一yiyiyi</p>
    <p>二ererer</p>
</div>
           

讓我們看看效果:

CSS之布局方式(内/外部顯示及inline-block顯示類型)附<行内塊空白間隙解決方案>一、布局方式二、行内塊元素inline-block 顯示類型

Amazing!兩個塊級元素排列在一行了!

這個排列方式似曾相識,很像行内盒子的布局方式,但在這裡我們稱為流式布局

二、行内塊元素inline-block 顯示類型

display:inline-block

例:

input

img

屬于行内元素/盒子,但以塊級元素顯示

适用:

  1. 盒子的外部類型是行内盒子inline (不把後邊的盒子擠占到下一行)
  2. 且想同時設定寬高、padding 和 margin

使用inline-blcok顯示類型:這個盒子有了寬高,并且無論是水準還是垂直方向上的 padding 和 margin,都可以把周圍的盒子的空間擠占掉。

<style>
.inline-block {
    display: inline-block;
    width: 100px;
    padding: 10px;
    margin: 10px;
}
.inline-block, p {
    border: 1px solid red;
}
</style>

<p>這是一個塊級<span class="inline-block">這是一個行内元素</span>元素</p>
<p>這是另一個塊級元素</p>
           

可以看到此時,行内元素的寬度、padding和margin在水準和垂直方向上已經生效,且擠占空間,而不是重疊。

CSS之布局方式(内/外部顯示及inline-block顯示類型)附<行内塊空白間隙解決方案>一、布局方式二、行内塊元素inline-block 顯示類型

2.1行内塊的空白間隙解決方案

當使用行内塊元素時,會發現一條多出來的空白間隙:

<style>
.box {
	/* 設定背景顔色友善檢視間隙 */
    background-color: violet;
}
img {
    width: 200px;
}
</style>

<div class = 'box'>
    <img src = "./pic.jpg">
    <img src = "./pic.jpg">
</div>
           
CSS之布局方式(内/外部顯示及inline-block顯示類型)附<行内塊空白間隙解決方案>一、布局方式二、行内塊元素inline-block 顯示類型

如果要使兩個行内塊元素之間的空白間隙消失,

解決方案:style中給父元素中添加

font-size:0

<style>
.box {
    background-color: violet;
    /* 幽靈空白節點:兩張圖檔中間的空白,解決如下 */
    font-size: 0px;
}
img {
    width: 200px;
}
</style>

<div class = 'box'>
    <img src = "./pic.jpg">
    <img src = "./pic.jpg">
</div>