CSS显示属性--无显示、表显示、内联块等介绍

273 阅读7分钟

在CSS中,显示属性决定了一个元素的外观。它也是你的HTML代码呈现的一个关键部分,因为它对布局有重大影响。

事实上,要使用现代的Flexbox和Grid模型,你需要在访问它们的各种属性和值之前使用显示属性。这就是为什么显示属性在CSS中如此重要的原因之一。

让我们深入了解一下,如何使用display 属性及其所有不同的值。

基本display 属性语法

element {
        display: value;
     }

CSS中的显示属性值

在CSS中,有内联和块级元素。两者之间的区别在于,内联元素不占用整个空间--也就是说,它们不从新的一行开始--但块状元素会。

display属性采取许多不同的值,如inlineinline-blockblocktable ,等等,它们都会影响一个元素在网页上的布局和表现。另外,为了实现flex和grid布局,你需要使用display属性。

你可以使用这个显示属性将一个inline 元素改为blockblock 元素改为inlineblockinline 元素改为inline-block ,以及更多。

display-property-values

display: inline

一个显示属性设置为inline 的元素将不会在新的一行开始,它将占用剩余/可用的屏幕宽度。它只是占用了这样一个元素通常会占用的空间。

正因为如此,你不能设置一个显示为inline 的元素的widthheight ,因为它不会占用整个屏幕宽度。

有些元素默认是内联的,比如<span>,<a>,<i>, 和<img> :

<div>
      Lorem ipsum dolor sit amet consectetur adipisicing elit.
      <span>This is an inline lement</span> Modi eaque debitis eos quod labore
      maiores delectus asperiores voluptatem voluptas soluta!
</div>
 body {
        display: flex;
        align-items: center;
        justify-content: center;
        height: 100vh;
        font-size: 2rem;
      }
div {
        max-width: 600px;
      }
span {
        background-color: #006100;
      }

inline-display

display: block

一个将显示属性设置为block 的元素会在新的一行开始,并占用可用的屏幕宽度。

你可以为这类元素指定widthheight 属性。默认处于块级的元素的例子有:<div>,<section>,<p>, 以及更多。

你可以把前面的HTML代码中的span 设置为block 显示,它的行为就像一个块级元素:

span {
        display: block;
        background-color: #006100;
      }

block-display

你可以看到,<span> 占据了整个宽度,这是因为它的显示属性设置为块:

display: inline-block

除了block和inline display之外,还有inline-block。

你指定显示为inline-block 的元素是内联显示。但它有一个额外的好处,就是你可以对它应用widthheight ,而当这个元素被分配到一个dispaly为inline ,你就不能这样做了。

所以,你可以把inline-block 显示看成是一个内联元素和块元素的组合:

 span {
        display: inline-block;
        background-color: #006100;
        width: 140px;
        height: 140px;
      } 

inline-block-display

display: none

当你把一个元素的display属性设置为none ,这个元素就完全脱离了页面,它不会对布局产生影响。

这也意味着像屏幕阅读器这样的设备无法访问该元素,而屏幕阅读器可以让盲人访问网站。

不要把display: nonevisibility: hidden 混淆。后者也隐藏了该元素,但它通常占用的空间是开放或空的:

span {
        display: none;
        background-color: #006100;
        width: 140px;
        height: 140px;
      }

display-none

隐藏的可见性使span元素占用的空间开放,正如你在下面看到的:

 span {
        visibility: hidden;
        background-color: #006100;
        width: 140px;
        height: 140px;
      }

visibility-hidden

display: table

现在你很少会用到table ,但知道这个值仍然很重要。它在过去更有用,因为在浮动、Flex和Grid出现之前,你会把它用于布局。

将display设置为table ,使元素的行为像一个表格。因此,你可以制作一个HTML表格的复制品,而不需要使用表格元素和相应的元素,如trtd

例如,在HTML中,你可以用<table> 元素和<div> ,或任何你选择的容器来制作一个表格。

你用HTML中的<table> 元素制作一个表格,就像这样:

<table>
      <tr>
        <td>Fruits</td>
        <td>Lemurs</td>
        <td>Pets</td>
      </tr>
      <tr>
        <td>Cashew</td>
        <td>Hua hua</td>
        <td>Dog</td>
      </tr>
      <tr>
        <td>Apple</td>
        <td>Diadem Sifaka</td>
        <td>Cat</td>
      </tr>
      <tr>
        <td>Mango</td>
        <td>Rig-tailed</td>
        <td>Chicken</td>
      </tr>
</table>
body {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
    font-size: 2rem;
}

div {
    max-width: 600px;
}

span {
    display: inline-block;
    background-color: #006100;
    width: 140px;
    height: 140px;
}

tr,
td {
    padding: 10px;
}

上面的HTML和CSS代码片断的结果是这样的:

table-with-table-element

但你也可以用<div> 元素制作同样的表格,将各自的显示设置为tabletable-rowtable-cell 。你会得到同样的结果,如下图所示:

 <div class="table">
      <div class="row">
        <div class="cell">Fruits</div>
        <div class="cell">Lemurs</div>
        <div class="cell">Pets</div>
      </div>
      <div class="row">
        <div class="cell">Cashew</div>
        <div class="cell">Hua hua</div>
        <div class="cell">Dog</div>
      </div>
      <div class="row">
        <div class="cell">Apple</div>
        <div class="cell">Diadem Sifaka</div>
        <div class="cell">Cat</div>
      </div>
      <div class="row">
        <div class="cell">Mango</div>
        <div class="cell">Ring-tailed</div>
        <div class="cell">Chicken</div>
      </div>
</div>
body {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
    font-size: 2rem;
}

div {
    max-width: 600px;
}

span {
    display: inline-block;
    background-color: #006100;
    width: 140px;
    height: 140px;
}

.table {
   display: table;
}

.row {
   display: table-row;
}

.cell {
   display: table-cell;
}

.row,
.cell {
  padding: 10px;
}

你仍然可以得到你的表格:

table-with-div

显示属性的其他值

除了inline,block,none, 和table 这些非常重要的值,因为它们极大地影响了网页的外观,还有其他值得你注意的display 属性的值。

其中一些你会一直使用,而没有真正意识到它们也是显示属性的一部分。还有一些你根本就不会经常使用。

现在让我们来看看其中的一些。

display: flex

显示为flex ,你就可以访问Flex布局系统,它简化了我们设计和布局网页的方式:

<div class="container">
      <div class="child">
        Lorem ipsum dolor sit amet consectetur adipisicing elit.
        <span>This is an inline element</span> Modi eaque debitis eos quod
        labore maiores delectus asperiores voluptatem voluptas soluta!
      </div>
      <div class="child">
        Lorem ipsum dolor sit amet consectetur adipisicing elit.
        <span>This is an inline element</span> Modi eaque debitis eos quod
        labore maiores delectus asperiores voluptatem voluptas soluta!
      </div>
</div>
.container {
        display: flex;
        align-items: center;
        justify-content: center;
        height: 100vh;
        font-size: 2rem;
}
    
span {
       visibility: hidden;
       background-color: #006100;
       width: 140px;
       height: 140px;
}

.child {
       border: 2px solid crimson;
       margin: 4px;
}

display-flex

display: grid

显示设置为grid ,可以让你用网格系统建立布局,这就像Flex的一种高级形式:

<div class="container">
      <div class="child">
        Lorem ipsum dolor sit amet consectetur adipisicing elit.
        <span>This is an inline element</span> Modi eaque debitis eos quod
        labore maiores delectus asperiores voluptatem voluptas soluta!
      </div>
      <div class="child">
        Lorem ipsum dolor sit amet consectetur adipisicing elit.
        <span>This is an inline element</span> Modi eaque debitis eos quod
        labore maiores delectus asperiores voluptatem voluptas soluta!
      </div>
</div>
.container {
        display: grid;
        place-items: center;
        height: 100vh;
        font-size: 2rem;
      }
   
span {
       visibility: hidden;
       background-color: #006100;
       width: 140px;
        height: 140px;
}

.child {
       border: 2px solid crimson;
       margin: 4px;
}

display-grid

display: inherit

这使得该元素继承了它的父元素的显示属性。因此,如果你在一个div里面有一个<span> 标签,而你给span标签的显示值是inherit ,它就会把它从内联变成块状元素。

<div>
      Lorem ipsum dolor sit amet consectetur
      <span>Inline element</span> adipisicing elit. Cumque cupiditate harum
      consectetur a exercitationem laboriosam nobis eos pariatur expedita iure.
</div>
body {
     display: flex;
     align-items: center;
     justify-content: center;
     height: 100vh;
     font-size: 2rem;
}

span {
     display: inherit;
     background-color: crimson;
}

display-inherit

display: initial

这将一个元素的显示属性设置为其默认值。因此,如果你将span的显示属性设置为initial,它就保持内联,如果你为div设置同样的值,它就保持块状:

<div>
      Lorem ipsum dolor sit amet consectetur
      <span>Inline element</span> adipisicing elit. Cumque cupiditate harum
      consectetur a exercitationem laboriosam nobis eos pariatur expedita iure.
</div>
body {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
    font-size: 2rem;
}

span {
    display: initial;
    background-color: crimson;
}

display-initial

总结

熟练掌握 display 属性将有助于你的页面布局看起来很棒。它还能让你在使用CSS时对元素的呈现方式有更多的控制。

你也可以继续回过头来看这篇文章,因为显示属性一开始总是令人困惑的,直到你用得足够多,完全理解它。

我希望这篇文章能给你提供你所需要的背景知识,以便好好利用display属性。

谢谢你的阅读,并继续编码。