作者: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. 如何在CMD窗口运行python文件

    进入文件所在的路径输入: python  文件名

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

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

  3. 大数据请把文章推给想了解DLL的人

    DLL(Dynamic Link Library)动态链接库在 webpack 中用来将可共享且不常改变的代码抽取成公共的库. 没有使用 DLL react 和 react-dom 在 react 项 ...

  4. spring-mvc 系列:注解开发(SpringMVCConfig、SpringConfig、AbstractAnnotationConfigDispatcherServletInitializer详细配置)

    目录 一.创建初始化类,代替web.xml 二.创建SpringConfig配置类,代替Spring的配置文件 三.创建SpringMVC配置类,代替SpringMVC的配置文件 四.测试功能 使用配 ...

  5. 使用C#创建安装Windows服务程序(最全教程)

    开发语言:C# 开发环境: Visual Studio 2022 微软官方文档:https://learn.microsoft.com/zh-cn/dotnet/framework/windows-s ...

  6. centos7关闭防火墙后只有22端口可以telnet的解决方法

    1.问题描述 防火墙已经关闭 22端口可以telnet 其他端口无法telnet 2.解决方法 注意:下列命令要用root账号/权限执行 2.1.开启防火墙 systemctl start firew ...

  7. QA|Pycharm中的git分支提交冲突问题和解决|GIT

    前天,Pycharm中的git分支提交冲突了,原因是我PC上改了文件没有提交,笔记本又本地改代码,笔记本提交时就出现报错:提交拒绝,但pull也被拒绝,网上试了rebase等方法,均没得到解决,最终自 ...

  8. iframe子窗口调用父窗口方法

    //一个iframe页面调用另一个iframe页面的方法self.parent.frames["sort_bottom"].mapp($("#id").val( ...

  9. CentOS 8 无痕升级到 Rocky Linux

    CentOS 8 无痕升级到 Rocky Linux 1.升级当前系统 dnf upgrade -y 2.重启当前系统: reboot 3.下载脚本: CentOS 8 到 Rocky Linux 8 ...

  10. 内网DNS解析☞dnsmasq

    内网DNS解析☞dnsmasq 目录 内网DNS解析☞dnsmasq 简介: 安装dnsmasq 问题: 1.怎么让172.30.1.* 与172.30.2.* 两个网段能互相访问? 2.firewa ...