作者:WangMin

格言:努力做好自己喜欢的每一件事

网页上的每个元素都是一个矩形框。CSS中的display属性决定了矩形框的行为。display属性是我们在前端开发中常常使用的一个属性。



display的属性值如下:

属性值 含义
block 块对象的默认值。用该值为对象之后添加新行
none 隐藏对象。与visibility属性的hidden值不同,其不为被隐藏的对象保留其物理空间
inline 内联对象的默认值。用该值将从对象中删除行
inline-block 行内块元素。这个属性值融合了inline 和 block 的特性,即是它既是内联元素,又可以设置width和height。
inherit 规定应该从父元素继承 display 属性的值。
compact 分配对象为块对象或基于内容之上的内联对象(已废除)
marker 指定内容在容器对象之前或之后。要使用此参数,对象必须和:after及:before 伪元素一起使用(已废除)
inline-table 将表格显示为无前后换行的内联对象或内联容器
list-item 将块对象指定为列表项目。并可以添加可选项目标志
run-in 分配对象为块对象或基于内容之上的内联对象
table 将对象作为块元素级的表格显示
table-caption 将对象作为表格标题显示
table-cell 将对象作为表格单元格显示
table-column 将对象作为表格列显示
table-column-group 将对象作为表格列组显示
table-header-group 将对象作为表格标题组显示
table-footer-group 将对象作为表格脚注组显示
table-row 将对象作为表格行显示
table-row-group 将对象作为表格行组显示

其中常用的如上表黄色着重部分:block、none、inline、inline-block,下面我们就开始讲一下这几个常见的属性吧!

display:block

block: 将元素将显示为块级元素,元素前后会带有换行符,通常用于将行内元素转换为块级元素时使用。那么什么是块级元素呢?什么是行内元素呢?

块级元素:

  • 总是以一个块的形式表现出来,占领一整行。若干同级块元素会从上之下依次排列(使用float属性除外)。
  • 可以设置高度、宽度、各个方向外补丁(margin)以及各个方向的内补丁(padding)。
  • 当元素宽度(width)没有设置时,它的宽度时其容器的100%,除非我们给它设定了固定的宽度。
  • 块级元素中可以嵌套其他块级元素或行内元素。
  • 块级元素的display属性值默认为block。

行内元素

  • 它不会单独占据一整行,而是只占领自身的宽度和高度所在的空间,也就是元素的的宽高度是由它的文本内容撑开。若干同级行内元素会从左到右(即某个行内元素可以和其他行内元素共处一行),从上到下依次排列。
  • 行内元素不可以设置高度、宽度,其高度一般由其字体的大小来决定,其宽度由内容的长度控制。
  • 行内元素只能设置左右的margin值和左右的padding值,而不能设置上下的margin值和上下的padding值。因此我们可以通过设置左右的padding值来改变行内元素的宽度。
  • 行内元素一般不可以包含块级元素。
  • 块级元素的display属性值默认为inline。

通过给一个行内元素设置为block后,元素可以设置width和height了。元素独占一行。这里我用行内元素 span来说明一下, 例子如下:

<span></span>
span{
width:200px;
height:200px;
display: block;
background:#f00;
}

没有给span设置display:block,span的宽高度由元素内容撑开,及时span设置了宽高度,如下:



给span设置display:block,span由行内元素转换为块级元素,span设置的宽高度就起作用了,如下:



除了上面对display:block的理解,它还有一个含义,表示显示元素。实际含义由项目需求而定。

除了给行内元素设置display:block使它转换为块级元素的方式以外,以下还有两种方式可以使行内元素转换为块级元素,如下:

第一种:给元素设置 float 属性

span{
width:200px;
height:200px;
float:left;
border:1px solid #ccc;
}





第二种:给行内元素设置position:absolute/fixed,效果跟第一种方法是一样的

display:none

display:none这个值表示元素不被显示。当你想要某个元素隐藏时,就可以给某个元素设置这个属性,它就会消失在网页中,但元素并没有在文档中删除,只是隐藏在网页结构中,不在网页中显示而已。但如果你想要元素显示的话,可以给元素设置display:block,元素就可以显示在网页中了。

display:inline

display:inline 的作用可以将一个块级元素转换成行内元素,那么这个块级元素将不能再设置宽和高以及上下方向的margin和padding。这个块级元素实际的宽度和高度都是auto,并不是我们设定的值。如下:

<div>块级元素div</div>
div{
width:200px;
height:200px;
display:inline;
background:#f00;
}





从上面的例子可以看到,div本身是块级元素,因为设置了display:inline,它就有块级元素变为了行内元素,给div设置的宽高度就失效了,而它的宽高度就有它的文本内容撑开了。

display:inline-block

根据名字来看,我们可以得到它是结合了inline和block并保留了它们的特性。所以设置了inline-block属性的元素既具有block元素可以设置width和height属性的特性,又保持了inline元素不换行的特性。

举例说明,我们在做横向导航菜单的时候,一般是用ul li a组合,ul li默认是竖向显示的,然后将li设置为float,这样就可以得到横向的导航标签了。而现在我们可以通过li和display:inline-block;来实现。

默认效果:

<div>
<ul>
<li><a href="">首页</a></li>
<li><a href="">商品</a></li>
<li><a href="">关于我们</a></li>
<li><a href="">招聘</a></li>
</ul>
</div>
div>ul>li{
width:100px;
background:#f00;
line-height: 30px;
text-align: center;
margin-bottom: 10px;
list-style: none;
}

设置了display:inline-block的效果:

div>ul>li{
width:100px;
background:#f00;
line-height: 30px;
text-align: center;
display: inline-block;
list-style: none;
}



从两个图可以看出,设置了display:inline-block后 li 能够在同一行显示,display:inline-block的效果几乎和浮动一样,但是它们其实还是区别。接下来就来讲一下inline-block和浮动 float 的比较。

1)不同之处:对元素设置display:inline-block ,元素不会脱离普通文档流,而float就会使得元素脱离普通文档流,且还有父元素高度坍塌(对于未知高度的元素)的效果,所以要清除浮动。普通文档流参照 CSS属性 Position的几种定位方式 对文档流的解释。

2)相同之处:能在某种程度上达到一样的效果。就以上的例子来说:

float浮动的效果:



就这么一看两个几乎是一样的效果,但仔细看看设置display:inline-block,li之间有间隙问题,而float浮动使 li 紧挨着。

3)浮动布局不太好的地方:参差不齐的现象,也就是元素高度不一样时,我们可以看到一个效果:

<div class="box">
<div class="one">one</div>
<div class="two">two</div>
<div class="three">three</div>
<div class="four">four</div>
</div>
.box{
width:300px;
border:1px solid #ccc;
overflow: hidden;
}
.box>div{
width:100px;
float: left;
}
.box>.one{
height:100px;
background:#8A2BE2;
}
.box>.two{
height:150px;
background:#98FB98;
}
.box>.three{
height:100px;
background:#CCCCCC;
}
.box>.four{
height:150px;
background:#CD853F;
}

设置float的效果,div排列得参差不齐:



设置display: inline-block;的效果,每一个div都很有序的排列:



从上面可以看出浮动的局限性在于,如果要元素排满一行,换行后还要整齐排列,就要子元素的高度一致才行,不然就会出现子元素排列得参差不齐,而inline-block就不会。

display:inline-block存在的间隙问题:

1)用了display:inline-block后,存在间隙问题,间隙为4像素,这个问题产生的原因是换行引起的,因为我们写标签时通常会在标签结束符后顺手敲个回车,而这个回车会产生回车符,回车符相当于空白符。间隙产生的原因就是我们没怎么注意的空白符。

2)去除空隙的方法:对父元素添加,{font-size:0},即将字体大小设为0,那么那个空白符也变成0px,从而消除空隙。但是它会影响元素内部文本的显示。



3)浏览器兼容性:ie6/7是不兼容 display:inline-block的,所以用以下代码处理以下:

  对于行内元素直接使用:{dislplay:inline-block;}

  对于块级元素:需添加 {display:inline;zoom:1;}

总结

 display:inline-block的布局方式和浮动的布局方式,究竟使用哪个,我觉得应该根据实际情况来决定的:

  a. 对于横向排列东西来说,我建议使用inline-block来布局,因为这样清晰,也不用再像浮动那样清除浮动,害怕布局混乱等等。

  b. 对于浮动布局就用于需要文字环绕的时候。

  


以上仅是个人见解,若有不足之处欢迎在下方评论指出,那就先分享到这里!! 后续继续更新!!

CSS display属性的作用的更多相关文章

  1. css display属性详解

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

  2. CSS display属性的值及作用

    display 的属性值有:none|inline|block|inline-block|list-item|run-in|table|inline-table|table-row-group|tab ...

  3. CSS Display属性与盒模型

    由于HTML流式文档的特性,页面布局往往是新手最为头疼的问题之中的一个. 每一个HTML元素都会渲染为一个Box,可分为inline Box和block Box. 依据display属性的不同.Box ...

  4. CSS display 属性

    实例 使段落生出行内框: p.inline { display:inline; } 所有主流浏览器都支持 display 属性. 注释:如果规定了 !DOCTYPE,则 Internet Explor ...

  5. css display属性

    C:内联元素加上display:block后被块级化.块级元素一般是其他元素的容器,可容纳内联元素和其他块状元素,块级元素排斥其他元素与其位于同一行,width和height起作用.因此,可以定义其宽 ...

  6. CSS display属性学习

    ---恢复内容开始--- http://www.w3school.com.cn/cssref/pr_class_display.asp 所有主流浏览器都支持 display 属性,如IE,Firefo ...

  7. CSS display 属性详解

    定义display 属性设置是否及如何显示元素. 继承性: No 说明 这个属性用于定义建立布局时元素生成的显示框类型.对于 HTML 等文档类型,如果使用 display 不 谨慎会很危险,因为可能 ...

  8. 通俗讲解transform3D变换时css各属性的作用与搭配

    当没有浏览器兼容性限制时,就大胆地使用transiton的3D效果吧,前端也要做不一样的烟火! *常用的3D效果 rotateX/rotateY/rotateZ/rotate3dtranslateX/ ...

  9. CSS HTML元素布局及Display属性

    本篇文章主要介绍HTML的内联元素.块级元素的分类与布局,以及dispaly属性对布局的影响. 目录 1. HTML 元素分类:介绍内联元素.块级元素的分类. 2. HTML 元素布局:介绍内联元素. ...

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

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

随机推荐

  1. 为什么Python是数据科学家的首选语言

    这篇文章全面探讨了Python作为数据科学领域首选语言的原因.从Python的历史.特性,到在数据科学中的应用实例,再到与其他数据科学语言的比较,以及在实际企业中的应用,我们深入剖析了Python的优 ...

  2. git关于分支的常用命令

    上家公司实习,一个人干一个项目,没有用git管理代码,导致我以前学的命令都忘了 git checkout -b xxx 创建xxx分支 并切换到xxx分支 等价于 git branch xxx git ...

  3. 2022-1-11 控件学习3 文本渲染、TabIndex、Border、Slider、ProgressBar、

    WPF文本渲染  TextOptions.TextFormattingMode:默认值Ideal大部分是好用的,但是非常小的文本使用Display渲染会好一些 TextRenderMode:使用抗锯齿 ...

  4. React:如何在普通函数中使用Hook

    解决方案

  5. 堆 Heap & 栈 Stack(.Net)【概念解析系列_3】【C# 基础】

    〇.前言 本文主要围绕 .Net 框架中的托管堆(Heap,简称堆)和堆栈(Stack,简称栈)展开. .Net 程序在 CLR(Common Language Runtime 公共语言运行时)上运行 ...

  6. flink-cdc同步mysql数据到elasticsearch

    1,什么是cdc CDC是(Change Data Capture 变更数据获取)的简称.核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的插入INSERT.更新UPDATE.删除DELETE ...

  7. 操作过滤器—MVC中使用操作过滤器实现JWT权限认证

    前言 上一篇文章分享了授权过滤器实现JWT进行鉴权,文章链接:授权过滤器-MVC中使用授权过滤器实现JWT权限认证,接下来将用操作过滤器实现昨天的JWT鉴权. 一.什么是操作过滤器? ​ 与授权过滤器 ...

  8. WorkManager的用法

    一.WorkManager的作用 绝大部分应用程序都有后台执行任务的需求,根据需求的不同,Android为后台任务提供了多种解决方案,如JobShedule,Loader,Service等.如果这些a ...

  9. IDEA 配置桌面快捷方式

    IDEA 配置桌面快捷方式 目录 IDEA 配置桌面快捷方式 1.下载idea.tar解压 2.配置快捷方式 3.为什么要存放在这个目录? 1.下载idea.tar解压 tar xf ideaIC-2 ...

  10. 快速了解C#接口(Interface)

    Runoob 接口定义了所有类继承接口时应遵循的语法合同.接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分. 接口定义了属性.方法和 ...