CSS Display属性与盒模型

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

本文首先引入CSS盒模型。然后通过不同的display属性分别介绍Box常见的呈现方式。

Box Sizing:元素大小的计算方式

在HTML中。不论什么HTML元素都会被呈现为一个矩形。该矩形由内容、内边距、边框、外边距构成。举个样例:

<style>
.box-demo{
  width: 100px;
  height: 100px;
  border: 50px solid green;
  padding: 30px;
  margin: 50px;
  background: yellow;
}
</style>
<div class="box-demo"></div>

上述的<div>中,内容、边距与边框例如以下图所看到的:

  • 黄色的背景作用于内容和内边距构成的矩形,其宽高为160px:宽度100px+两側的内边距30pxX2;
  • 绿色部分为边框,宽度为50px
  • 与浏览器边框的距离为外边距,宽度为50px

样例中width属性定义的是内容的宽度,不包括边距、边框。然而在IE中width定义的是内容+内边距+边框的宽度。

这是由box-sizing属性来定义的,前者的默认值为content-box‘。后者的默认值为border-box`。

Display:渲染类型

了解了box-sizing之后,我们回到display属性。display指定了元素渲染Box的类型(type
of rendering box)。我们来看它经常使用的取值:

  • none:
    隐藏元素;
  • inline:行内元素,顾名思义。用于把一个元素放在行的内部;
  • block:块元素,用于显示占用一行的块。
  • inline-block:以block的方式渲染。以inline的方式放置。
  • table-cell:以表格元素的方式显示。

隐藏元素

none是最easy理解的取值。当一个元素的displayCSS属性被设为none时,该元素不会被渲染,也不会占位,就像不存在一样。对布局不会产生不论什么影响。

行内元素

行内(inline)元素不会打断文本流。默认(UA)显示为inline的元素包含:<span><a><em>等。它们的出现不会使得兴许元素另起一行。行内元素能够设置marginpadding,但margin仅仅在水平方向上起作用:

div{
  display: inline;
  background: red;
  padding: 10px;
  margin: 10px;
}

上图中,红色背景的是一个<div>,其大小为内容大小+padding。左右的空隙即为外边距margin。能够看到在Chrome中,这个inline<div>遮挡了出如今它前面的文本,同一时候被出如今它后面的文本所遮挡。这正是流式文档的特性。

另外,对inline元素设置widthheight是不起作用的。

块元素

块(block)元素会中断当前的文本流。另起一行,并在父元素中尽可能地占领最大宽度。常见的块元素有<p>,<div>,<section>等。

通常块元素不可包括在行内元素内部。比如以下的两个<p>标签,不论内容是否足够。都会占领整个body的宽:

行内块

行内块(inline-block)将会产生一个块元素,并以行内元素的方式放置。

什么意思呢?该元素的样式是以块元素的方式来渲染的。比如能够设置宽和高。然后以行内元素的方式放置在其上下文中,就像在行内元素的位置上替换成这个块元素一样。

MDN:The element generates a block element box that will be flowed with surrounding content as if it were a single inline box.

相同地。我们在一行文本内增加一个<div>。这次将它的display设为inline-block

div{
  display: inline-block;
  background: yellow;
  padding: 10px;
  margin: 10px;
  height: 20px;
}

此时。垂直方向的marginheight都起作用了:

  • 蓝色部分为内容,能够看到其高度为20px
  • 绿色部分为10pxpadding
  • 接着,border为空;
  • 红色为10pxmargin

inline-blockinline的不同在于:垂直方向上的margin也会起作用,而且能够设置widthheightinline-block是很经常使用的样式设置。

表格元素

display设为table-cell的元素与<td>标签的行为一致,即:可设置padding。不接受margin,可伸缩的width

IE6/7不支持table-cell,然而WinXP已经下架。Win7的标配是IE8。如今能够放心地使用table-cell了。

利用table-cell属性能够在不写<table>标签的情况下完毕表格布局:

<style>
.left, .right{
  display: table-cell;
  line-height: 50px;
}
.left{
  background: yellow;
  min-width: 150px;
}
.right{
  background: lightgreen;
  width: 100%;
}
</style>

<div>
  <div class="left">This is left cell</div>
  <div class="right">This is right cell</div>
</div>

左側固定150px宽度,右側自适应:



除非注明,本博客文章均为原创。转载请以链接形式标明本文地址: http://harttle.com/2015/05/28/css-display.html

时间: 2024-10-10 15:15:27

CSS Display属性与盒模型的相关文章

前端开发:css基础知识之盒模型以及浮动布局。

前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把它写到我的博客中,想知道自己过来翻就好啦 ^_^  下面楼主把当前的自己对css的基础认知一一给大家道来...... 盒模型 谈到盒模型,有经验的小伙伴一定滚瓜烂熟,无非就是 内容(content).填充(padding).边框(border).边界(margin): 这些属性我们可以把它转移到我们

css文档之盒模型阅读笔记

前段时间抽空仔细阅读了w3c的css文档关于盒模型方面的一些基础知识.边读边记录了一些要点,在此做些整理,与大家分享,如有理解有误之处,请不吝指教. 1.综述 文档中的每个元素被描绘为矩形盒子.渲染引擎的目的就是判定大小,属性--比如它的颜色.背景.边框方面--及这些盒子的位置. 在CSS中,这些矩形盒子用 标准盒模型 来描述.这个模型描述了一个元素所占用的空间.每一个盒子有四条边界:外边距边界margin edge, 边框边界border edge, 内边距边界padding edge 与 内

CSS_添加CSS文件方法,盒模型和定位

学习笔记整理,非原创. 添加css的方法 链接外部样式表 <link rel=stylesheet type=text/css href=style.css> Rel表示在页面中使用外部的样式表.type指文件的类型是样式表文件,href指文件的位置. 内部样式表 <style type=”text/css”> <!— //定义style --> </style> 导入外部 样式表 <style type=”text/css”> <!— @

css display属性值

一.css中display可以取的值 值 描述 none 此元素不会被显示. block 此元素将显示为块级元素,此元素前后会带有换行符. inline 默认.此元素会被显示为内联元素,元素前后没有换行符. inline-block 行内块元素.(CSS2.1 新增的值) list-item 此元素会作为列表显示. run-in 此元素会根据上下文作为块级元素或内联元素显示. compact CSS 中有值 compact,不过由于缺乏广泛支持,已经从 CSS2.1 中删除. marker CS

【从0到1学CSS】定位问题一(盒模型,浮动)

引子: 在谈到css定位问题的时候先来看一个小问题: 已知宽度(假如:100px)div框,水平居中,左右两百年的分别使用div框填充.且左右div自适应. 效果如下图: 这个问题的难点主要是浏览器宽度未知,且两边div自适应宽度. 第一种实现方法,是借助css3的新属性calc,实现代码如下: body { margin: 0; padding: 0; font-size:0; } .left_div { background-color: #62FF09; /*calc是css3属性可以动态

CSS布局(弹性盒模型)

一.弹性盒模型介绍 1.弹性盒模型介绍 — 基础知识 弹性盒模型( Flexible Box 或 Flexbox)是一个CSS3新增布局模块,官方称为CSS Flexible Box Layout Module,用于实现容器里项目的对齐.方向.排序(即使在项目大小位置.动态生成的情况).弹性盒模型最大的特性在于,能够动态修改子元素的宽度和高度,以满足在不同尺寸屏幕下的恰当布局. *弹性容器(flex container) *弹性子元素(flex item) *轴分为主轴(main axis) 侧

被废了的display:box弹性盒模型

这几天在研究弹性布局,看书中写的是display:box,结果在chrome浏览器中是正常的,想着移动端大部分浏览器也是webkit内核的应该也没啥问题,结果确实没问题,但仔细一看,高度呢?好吧,严重的bug,高度不起作用了(特殊情况).再查查资料原来w3c已经废了display:box;换成display:flex了,只好重新学过了,以后还是看这个吧http://www.w3schools.com/国外站请自备神器. UC啥的浏览器用的还是display:box最新的是display:flex

CSS布局定位基础-盒模型和定位机制

1. 盒模型 2. 外边距合并 3. 定位机制 4. Float 5. Position:属性有哪些取值,它们的行为是什么? 无依赖绝对定位? 6. Display:常见属性值有哪些取值? 7. 对BFC规范的理解?        1. 盒模型 盒模型从内向外包括content,padding,border和margin. 从前往后分别是:border,content+padding,background-image,background-color,margin 盒模型有两种模式:W3C标准模

HTML和CSS前端教程05-CSS盒模型

目录 1. CSS盒模型 1.1 元素的尺寸 1.2. 元素内边距 padding 1.3. 元素外边距 margin 1.4. 处理溢出overflow 1.5. 元素的可见性Visibility 2. CSS元素的盒类型 2.1. 块级元素(区块) 2.2. 行内元素 2.3. 行内-块元素 2.4. 盒类型元素转换dispaly 3. CSS盒元素的浮动float 1. CSS盒模型 元素的尺寸 1.1 元素的尺寸 属性 值 说明 width auto.长度值或百分比 元素的宽度 heig