今天我们来分析一下display的一些用法,display样式在我们整个CSS设置中,非常重要,掌握好display,才能有效的解决CSS布局的问题,在理解display之前,我们先了解两个概念:块元素和行内元素。

1、基本概念

块级元素(block element)

其就是以块状呈现,具有块的基本特征,如高度、宽度等等,其主要有以下几个特点:

  • 在新行上开始;所以它们都是独占一行度,行高以及外边距和内边距都可控制(使用float属性除外)。
  • 可以设置 width, height属性和margin,padding等属性。
  • 宽度缺省是它的容器的100%,除非设定一个宽度。
  • 它可以容纳内联元素和其他块元素

比如我们常用的div,p, h1等,都是块级元素。

内联元素(inline element

其是以长条型呈现,可以改变宽度,但是无法改变高度,其主要有以下几个特点:

  • 和其他元素都在一行上;所以它们都是一个挨着一个,除非一行排不下,则会换行
  • 高,行高及外边距和内边距不可改变;只能改变宽度,Margin和padding只能改变左右,上下无效
  • 宽度就是它的文字或图片的宽度,不可改变
  • 内联元素只能容纳文本或者其他内联元素

比如我们常用的span、a、input都是内联元素。

2、display样式

定义和用法

display 属性规定元素应该生成的框的类型。

说明

这个属性用于定义建立布局时元素生成的显示框类型。对于 HTML 等文档类型,如果使用 display 不谨慎会很危险,因为可能违反 HTML 中已经定义的显示层次结构。对于 XML,由于 XML 没有内置的这种层次结构,所有 display 是绝对必要的。

默认值:inline

其他值:

描述

none

此元素不会被显示。

block

此元素将显示为块级元素,此元素前后会带有换行符。

inline

默认。此元素会被显示为内联元素,元素前后没有换行符。

inline-block

行内块元素。(CSS2.1 新增的值)

list-item

此元素会作为列表显示。

run-in

此元素会根据上下文作为块级元素或内联元素显示。

compact

CSS 中有值 compact,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。

marker

CSS 中有值 marker,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。

table

此元素会作为块级表格来显示(类似 <table>),表格前后带有换行符。

inline-table

此元素会作为内联表格来显示(类似 <table>),表格前后没有换行符。

table-row-group

此元素会作为一个或多个行的分组来显示(类似 <tbody>)。

table-header-group

此元素会作为一个或多个行的分组来显示(类似 <thead>)。

table-footer-group

此元素会作为一个或多个行的分组来显示(类似 <tfoot>)。

table-row

此元素会作为一个表格行显示(类似 <tr>)。

table-column-group

此元素会作为一个或多个列的分组来显示(类似 <colgroup>)。

table-column

此元素会作为一个单元格列显示(类似 <col>)

table-cell

此元素会作为一个表格单元格显示(类似 <td> 和 <th>)

table-caption

此元素会作为一个表格标题显示(类似 <caption>)

inherit

规定应该从父元素继承 display 属性的值。

3、分别介绍 

   none:

    none这个值表示此元素将不被显示,设置为none的元素,即不显示在界面上,关键是设置为none,它将让出自己占有的空间,这个是和visibility的主要区别,visibility只是隐藏对象,对象在文档流中并没有被移除,display:none则元素会被从文档流中移除。 我们看看如下案例:

普通div

<div style="height:100px;background-color:#ffd800"></div>
<div style="height:100px;background-color:#ccd800"></div>

显示效果如下:

如设置上面div的display:none,代码如下:

<div style="height:100px;background-color:#ffd800;display:none"></div>
<div style="height:100px;background-color:#ccd800"></div>

其效果如下:

发现上面的div不显示,且占有的区域让了出来。直接从文档流中剔除了,好像不存在一样。

同时,我们设置visibility看一下,代码如下:

<div style="height:100px;background-color:#ffd800;visibility:hidden"></div>
<div style="height:100px;background-color:#ccd800"></div>

其显示效果如下图所示:

虽然上面的div隐藏不可见,但div所占的区域,还是被占用,并没有从文档流中剔除。

  block:

使用了display:block之后, 此元素将显示为块级元素,此元素前后会带有换行符。设置为block后,那么内联元素就具有了块级元素的特征,具有高度和margin-top和padding-top等信息,我们以案例说明,a标签原本为内联元素,我们进行如下的对比:

<div>
<a href="#"></a><a href="#"></a><a href="#"></a><a href="#"></a><a href="#"></a>
</div>
<style>
#b a {
display: block;
height: 20px;
}
</style>
<div id="b">
<a href="#"></a><a href="#"></a><a href="#"></a><a href="#"></a><a href="#"></a>
</div>

将下面的div中的a标签设置为display: block;且指定了高度,其结果如下:

下面div中的a元素,出现了块级元素的特征,换行,且对指定的高度有效。

inline

使用了display:inline之后, 此元素将显示为内联元素,此元素会以内联元素的特征呈现,我们编写示例如下:

    <style>
div {
display: inline;
}
</style>
<div style="height:100px;background-color:#ffd800"></div>
<div style="height:100px;background-color:#ccd800"></div>

本来div是块级元素,但是我们设置为内联元素以后,其显示效果如下:

其不仅没有换行,且设置的高度也无效。

inline-block

inline-block将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内。总结来说,就是可以设置高度和内联元素,内容是块级元素,但没有换行符。

我们编写案例说明,其代码如下:

  <style>
div {
width: %;
height: %;
} a {
display: inline-block;
height: 60px;
width: 100px;
color: #ffffff;
background-color: #;
border-left: 1px solid #ffffff;
}
</style>
<div><a href="#"></a><a href="#"></a><a href="#"></a><a href="#"></a></div>

以上的代码,呈现的效果如下:

我们可以看到,元素呈现了块级元素的特征,除了没有换行,其最终呈现的是没有换行符的块级元素。

list-item

list-item为元素内容生成一个块级元素,随后再生成一个列表型的行内盒。其效果就和ul中出现项目列表符号一样。通俗地说就是会在内容前面自动加上黑点,而display:block则不会出现黑点。

    <style>
a {
display: list-item;
}
</style>
<div><a href="#"></a><a href="#"></a><a href="#"></a><a href="#"></a></div>

这个比较简单,就是按照列表的方式显示,这个用得不是很多,可以通过UL实现,其效果如下:

run-in

有些浏览器已经不支持了,所以这个属性现在也很少有人使用,我使用IE进行的测试。run-in也是一个有意思的行内块级元素,不过它与inline-block的表现是完全不同的。它的表现与它的后一个直接元素直接挂钩。如果它的后一个直接元素是块级元素的话,它会表现为行内元素插入到该块级元素中;如果它的后一个元素是行内元素的话,它就会表现为块级元素,坦白的讲就是跟后一个元素的表现是完全相反的,最后,它跟前一个元素的表现形式是无关的。

我们看第一种情况:它后面的元素是块级元素,代码如下:

  <style>
div {
height: 100px;
background-color: #f6cfcf;
}
a {
display:run-in;
height:100px;
}
</style> <a href="#"></a>
<div></div>

我们设置a的display为run-in,则其表现为:

可以看到,其下一个元素是块状元素,则他会变成内联元素,并且插入到下一个元素中。我们可以把a改成p试试,也会出现相同的结果。

情况2:其后面元素是内联元素,代码如下:

    <style>
div {
height: 100px;
background-color: #f6cfcf;
}
a {
display:run-in;
height:100px;
}
</style> <a href="#"></a>
<span></span>

其显示效果如下:

a表现了块级元素的特征,所以说run-in的对象,其受下一个元素影响,下一个是块,他就是内联,下一个是内联,它表现为块。

table

table元素和后面所有和table相关的元素,都是让元素按照表格方式显示,设置为table的元素,其具有<table>标签默认的特性。我们可以通过table样式,把不同的元素定义为表格,满足表格化的需求。

  • table    此元素会作为块级表格来显示(类似 <table>),表格前后带有换行符。
  • table-row-group    此元素会作为一个或多个行的分组来显示(类似 <tbody>)。
  • table-header-group    此元素会作为一个或多个行的分组来显示(类似 <thead>)。
  • table-footer-group    此元素会作为一个或多个行的分组来显示(类似 <tfoot>)。
  • table-row    此元素会作为一个表格行显示(类似 <tr>)。
  • table-column-group    此元素会作为一个或多个列的分组来显示(类似 <colgroup>)。
  • table-column    此元素会作为一个单元格列显示(类似 <col>)
  • table-cell    此元素会作为一个表格单元格显示(类似 <td> 和 <th>)
  • table-caption    此元素会作为一个表格标题显示(类似 <caption>)

下面以示例说明,以样式的方式定义了一个表格:

    <style type="text/css">
.table, .table * {
margin: auto;
padding: ;
} .table {
display: table;
width: %;
border-collapse: collapse;
}
.table-tr {
display: table-row;
}
.table-th {
display: table-cell;
border: 1px solid #;
}
.table-td {
display: table-cell;
border:1px solid #;
}
</style>
<div class="table">
<div class="table-tr">
<div class="table-th">编号</div>
<div class="table-th">名字</div>
<div class="table-th"></div>
</div>
<div class="table-tr">
<div class="table-td"></div>
<div class="table-td">张三</div>
<div class="table-td"></div>
</div>
<div class="table-tr">
<div class="table-td"></div>
<div class="table-td">李四</div>
<div class="table-td"></div>
</div>
<div class="table-tr">
<div class="table-td"></div>
<div class="table-td">王五</div>
<div class="table-td"></div>
</div>
</div>

其显示效果如下图所示:

我们可以通过自由的方式设置表格。

在css3.0以后,添加另外几个布局方式,由于现在浏览器兼容性的问题,暂时使用还不是很普遍,这几个会在后面的介绍。

inline-grid

grid

inline-flex

CSS display使用的更多相关文章

  1. CSS display:inline-block

    CSS display:inline-block 在css布局里,我们经常看到代码 「display:inline-block; *display:inline; zoom:1; 」,大多人会说上面的 ...

  2. [转]CSS Display(显示) 与 Visibility(可见性)

    CSS Display(显示) 与 Visibility(可见性) display属性设置一个元素应如何显示,visibility属性指定一个元素应可见还是隐藏. 隐藏元素 - display:non ...

  3. CSS display:inline和float:left两者区别探讨

     本文和大家重点讨论一下CSS display:inline和float:left两者的区别,CSS display是指显示状态,inline表示内联,特点是紧贴着前一个内联元素,通常默认的内联元素有 ...

  4. CSS Display(显示) 与 Visibility(可见性)

    display属性设置一个元素应如何显示,visibility属性指定一个元素应可见还是隐藏. Box 1 Box 2 Box 3 隐藏元素 - display:none或visibility:hid ...

  5. [CSS3] CSS Display Property: Block, Inline-Block, and Inline

    Understanding the most common CSS display types of block, inline-block, and inline will allow you to ...

  6. CSS display:table属性用法- 轻松实现了三栏等高布局

    display:table:此元素会作为块级表格来显示(类似 <table>); display:table-cell属性指让标签元素以表格单元格的形式呈现,类似于td标签.目前IE8+以 ...

  7. CSS display:inline-block的元素特点:

    将对象呈递为内联对象,但是对象的内容作为块对象呈递.旁边的内联对象会被呈递在同一行内,允许空格. 在CSS中,块级对象元素会单独占一行显示,多个block元素会各自新起一行,并且可以设置width,h ...

  8. CSS DISPLAY AND POSITIONING

    CSS DISPLAY AND POSITIONING Review: Layout Great job! In this lesson, you learned how to control the ...

  9. CSS Display(显示)和Visibility(可见性)

    CSS Display(显示)和Visibility(可见性) 一.简介 display属性设置一个元素应如何显示(隐藏不占用空间),visibility属性指定一个元素应可见还是隐藏(隐藏占用空间) ...

  10. css display属性详解

    css display属性在对css做layout设计时非常重要,它的值有以下几种: Value Description Play it inline Default value. Displays ...

随机推荐

  1. python自动化运维:系统基础信息模块

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 第一章: 首先介绍下系统性能信息模块:psutil psutil能够轻松实现获取系统 ...

  2. javascript中this的用法

    this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如, function test(){ this.x = 1; } 随着函数使用场合的 ...

  3. Qt5构建出错问题解决办法

    我之前用的Qt其他版本,因为一些原因我更换了Qt版本,从Qt5.9.1又更换到之前用的Qt5.3.2,但是发现无法build,问题提示如下: 19:54:03: 为项目untitled执行步骤 ... ...

  4. php nginx反向代理

    一.概念理解 1.代理服务器 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘 ...

  5. 如何快速查看github代码库中第一次commit的记录

    发现一个别人推荐的代码库用来学习源码, star星还不少,别人推荐从第一次commit开始阅读,于是试着去找commits的第一次 问题来了,这个代码库commits7855次,点击进入commits ...

  6. python3--网络爬虫--爬取图片

    网上大多爬虫仍旧是python2的urllib2写的,不过,坚持用python3(3.5以上版本可以使用异步I/O) 相信有不少人爬虫第一次爬的是Mm图,网上很多爬虫的视频教程也是爬mm图,看了某人的 ...

  7. NYOJ--139--我排第几个(康托展开)

    我排第几个 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 现在有"abcdefghijkl"12个字符,将其所有的排列中按字典序排列,给出任意一 ...

  8. 将app接口服务器改为dotnet core承载

    昨天我的一个 app 的接口服务器挂掉了,国外的小鸡意外的翻车,连同程序和数据一起,猝不及防.我的服务端程序是 asp.net mvc ,小鸡是 256 M 的内存跑不了 windows 系统,装的 ...

  9. Luogu P2802 回家

    题目描述 小H在一个划分成了n*m个方格的长方形封锁线上. 每次他能向上下左右四个方向移动一格(当然小H不可以静止不动), 但不能离开封锁线,否则就被打死了. 刚开始时他有满血6点,每移动一格他要消耗 ...

  10. 高性能MySQL之【第十五章 备份与恢复】学习记录

      我们不打算包括的话题:      安全(访问备份,恢复数据的权限,文件是否需要加密)      备份存储在哪里,包括他们应该离源数据多远,以及如何将数据从源头移动到目的地      保留策略.审计 ...