Display在官方定义:规定元素应该生成的框的类型。本文只重点分析常用的6个值:none、block、inline、inline-block、inherit、flex。其他table、list-item等都不再推荐使用。

一、None

此元素不会被显示。主要与visibility属性为hidden时相区分。

1) 当元素的none时,js可以获取此元素,但不能获取/设置此元素的可视化属性的值(但可以设置自定义属性的值),如Width、Height、background等Css属性的值,这也就表明当元素为none时,元素是不被浏览器渲染的。

2) 当元素的visibility值为hidden时,元素虽然不可见,但可以获取/设置元素的任何值,包含Css相关属性。这也就表明此时的元素是被浏览器渲染的(在文档流中是占有位置的),只是处于不可见的状态。

3) 示例代码如下:

Css代码:

  1. #div01{
  2. display: none;
  3. width: 200px;
  4. background: red;
  5. }
  6. #div02{
  7. visibility: hidden;
  8. width: 100px;
  9. }
  10. #div03{
  11. width: 100px;
  12. }

Js/html代码:

  1. <div id="div01" data-name="div01" > div01</div>
  2. <div id="div02" data-name="div02" > div01</div>
  3. <div id="div03" > div03</div>
  4. <script type="text/javascript">
  5. window.onload = function(){
  6. var div01 = document.getElementById('div01');
  7. var div02 = document.getElementById('div02');
  8. var div03 = document.getElementById('div03');
  9.  
  10. //output: div01:0 background: name:div01
  11. console.log( 'div01:' + div01.offsetWidth + " background: " + div01.style.background + " name:" + div01.getAttribute("data-name"));
  12. //output: div02:100 name:div02
  13. console.log( 'div02:' + div02.offsetWidth + " name:" + div02.getAttribute("data-name"));
  14. //output: div03:100
  15. console.log( 'div03:' + div03.offsetWidth);
  16.  
  17. div01.style.width = 1000;
  18. div01.setAttribute("data-name","div0101");
  19. div02.style.width = "800px";
  20. div02.setAttribute("data-name","div0202");
  21. div03.style.width = 800;
  22.  
  23. //output: div01:0 background: name:div0101
  24. console.log( 'div01:' + div01.offsetWidth + " background: " + div01.style.background + " name:" + div01.getAttribute("data-name"));
  25. //output: div02:800 name:div0202
  26. console.log( 'div02:' + div02.offsetWidth + " name:" + div02.getAttribute("data-name"));
  27. //output: div03:800
  28. console.log( 'div03:' + div03.offsetWidth);
  29. }
  30. </script>

二、Block

设置元素为块级元素,可应用盒子模型相关属性。默认Width会100%,Height自适应。Margin、padding都有效。如果没有占宽或高的子元素存在,则高度为零。

代码如下:

  1. <html>
  2. <head>
  3. <style>
  4. #div01{
  5. background: red;
  6. }
  7. #div02{
  8. height: 100px;
  9. background: gray;
  10. }
  11. #div03{
  12. background: green;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div id="div01" ></div>
  18. <div id="div02" ></div>
  19. <div id="div03" >div03</div>
  20. </body>
  21. </html>

效果截图:

三、inline

行内元素或者通过display:inline修饰为行内元素的都具有行内元素的行为。

1) 多个inline元素会排成一行,并列的多个inline元素之间会存在8个像素左右的间隔,8像素间隔解决办法:

a). Html文本有意识的都排成一行,如下代码所示:

  1. <a>a01</a><a>a02</a>

b). 利用margin-left:-8px,也就是marginq负值实现,也可以在外层使用letter-spaceing和word-spaceing为负值的方式实现(此种试子元素需要重置被设置属性)

  1. .inline{
  2. display: inline;
  3. background: red;
  4. margin: 0px;
  5. padding: 10px;
  6. margin-left: -8px;
  7. }
  1. <div class="inline">inline01</div>
  2. <div class="inline">inline02</div>
  3. <div class="inline">inline03</div>
  4. <div class="inline">inline04</div>

c). 包裹inline元素的外层元素加上font-size:0px和-webkit-text-size-adjust:none实现

  1. a{
  2. background: red;
  3. font-size: 14px;
  4. }
  5. .overWidth{
  6. white-space: nowrap;
  7. border: 1px solid gray;
  8. font-size: 0px;
  9. -webkit-text-size-adjust: none;
  10. }
  1. <div class="overWidth" >
  2. <a>a01</a>
  3. <a>a000000002</a>
  4. </div>

2) Inline元素的width和height无效

3) Inline元素的padding都有效,但margin左右有效,上下无效

4) Inline元素包裹inline元素,外层元素的width和height会被内部的撑开

  1. .overWidth{
  2. display: inline;
  3. border: 1px solid gray;
  4. }
  1. <div class="overWidth" >
  2. <a>a01</a>
  3. <a>a000000002</a>
  4. </div>

5) Block/inline-block元素包裹inline元素,默认超width自动换行,height撑开。

a) 强制不换行可以通过white-space:nowrap来实现,此时超width的就会浮出来,可以通过overflow:hidden和text-overflow:ellipsis配合实现省略显示。

  1. .overWidth{
  2. white-space: nowrap;
  3. width: 100px;
  4. border: 1px solid gray;
  5. overflow: hidden;
  6. text-overflow: ellipsis;
  7. }
  1. <div class="overWidth" >
  2. <a>a01</a>
  3. <a>a000000002</a>
  4. </div>

深入理解和应用display属性(一)的更多相关文章

  1. 深入理解和应用display属性(二)

    四.inline-block 此类元素是inline + block的合体 1) margin和padding都有效:width和height都有效: .inline{ display: inline ...

  2. 理解与应用css中的display属性

    理解与应用css中的display属性 display属性是我们在前端开发中常常使用的一个属性,其中,最常见的有: none block inline inline-block inherit 下面, ...

  3. 深入理解display属性

    display 属性在网页布局中很常见,但是之前一直不了解他的各个属性的区别,只是简单的使用block.none属性,对于其他属性都不清楚,今天详细的学习和实践display属性的各个方面 定义 di ...

  4. 深入理解display属性——前端布局常用重要属性

    小注:display属性在网页布局中非常常见,但经常用到的仅仅是block.inline-block.inline和none等寥寥几个属性值,下面本人将详细介绍display属性的各个方面 定义 di ...

  5. 理解clear:both属性(转)

    理解clear:both属性 在前端开发布局中,经常会被float这个属性搞晕,尤其是新手 CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列.Float(浮动),往往是 ...

  6. 转帖 css的块元素、内联元素、内联块元素、display属性、浮动、定位

    块元素 块元素,也可以称为行元素,布局中常用的标签如:div.p.ul.li.h1~h6.dl.dt.dd等等都是块元素,它在布局中的行为:1.支持全部的样式.2.如果没有设置宽度,默认的宽度为父级宽 ...

  7. 前端,基础选择器,嵌套关系.display属性,盒模型

    基础选择器 1.统配选择器 控制html,body及body内跟显示相关的标签 *{ width:80px; height:80px; background-color:red; } 2.类选择器 以 ...

  8. CSS Display属性与盒模型

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

  9. CSS学习笔记:display属性

    目录 一.display属性概述 1. 块级元素和行内元素的区别 2.常见的块级元素和行内元素 3. display属性常见的属性值 二.测试display取各属性值的效果 1. 测试inline和b ...

随机推荐

  1. Echarts使用

    Echarts使用 |版权声明:此文为本人原创,望尊重原创 前言:     和朋友聊天的过程中,朋友提到了Echarts.我当时不知道那个是用来做什么的.回到家我就百度了,开始自己看文档学习.本文是自 ...

  2. ES6新特性之 promise

    新的ES6中引入了promise的概念,目的是让回调更为优雅.层层嵌套的回调会让javascript失去美感和可读性,同时javascript也推荐采用链式的方式去书写函数调用.于是Promise就应 ...

  3. 【开源】OSharp3.3框架解说系列:重新开源及3.3版本新特性

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  4. Android okHttp网络请求之Retrofit+Okhttp+RxJava组合

    前言: 通过上面的学习,我们不难发现单纯使用okHttp来作为网络库还是多多少少有那么一点点不太方便,而且还需自己来管理接口,对于接口的使用的是哪种请求方式也不能一目了然,出于这个目的接下来学习一下R ...

  5. Java 8新特性-5 内建函数式接口

    在之前的一片博文 Lambda 表达式,提到过Java 8提供的函数式接口.在此文中,将介绍一下Java 8四个最基本的函数式接口 对于方法的引用,严格来讲都需要定义一个接口.不管我们如何操作实际上有 ...

  6. MongoDB的CRUD操作

    1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...

  7. jQuery的事件模型

    前几天自己着重读了jQuery1.11.1的源码,又结合了之前对DE事件模型的分析,最后也实现一个简陋的事件模型. jQuery的事件系统离不开jQuery的缓存系统. jQuery的第一代缓存是直接 ...

  8. 8.Struts2类型转换器

    类型转换器1.引入在Struts2中,请求参数类型不仅可以是String,还可以是其它类型.如,定义一个请求参数birthday为Date类型,给其赋值为1949-10-1,则birthday接收到的 ...

  9. 关于一道PHP面试题的解法

    参照一个int型数组,如int[] a1=new int[]{10,9,10,20,15,3,9,8,7,1,1},编写一个方法,要求输出不重复,且降序的拼接字符串(连接字符用逗号),如上数组,输出的 ...

  10. jQuery中使用ajax,$.post

     jQuery.post( url, [data], [callback], [type] ) :使用POST方式来进行异步请求 参数: url (String) : 发送请求的URL地址. data ...