`

CSS中display:inline | block |inline-block的详解区别(转)

css 
阅读更多

display:block就是将元素显示为块级元素.

block元素的特点是:
总是在新行上开始;
高度,行高以及顶和底边距都可控制;
宽度缺省是它的容器的100%,除非设定一个宽度
<div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子。

display:inline就是将元素显示为行内元素.

inline元素的特点是:
和其他元素都在一行上;
高,行高及顶和底边距不可改变;
宽度就是它的文字或图片的宽度,不可改变。
<span>, <a>, <label>, <input>, <img>, <strong> 和<em>是inline元素的例子。

inline和block可以控制一个元素的行宽高等特性,需要切换的情况如下:

让一个inline元素从新行开始;
让块元素和其他元素保持在一行上;
控制inline元素的宽度(对导航条特别有用);
控制inline元素的高度;
无须设定宽度即可为一个块元素设定与文字同宽的背景色。

display:inline-block将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内,允许空格。

inline-block的元素特点:

将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内,允许空格。(准确地说,应用此特性的元素呈现为内联对象,周围元素保持在同一行,但可以设置宽度和高度地块元素的属性)

但对于这个属性不是所有浏览器都识别。

支持的浏览器有:Opera、Safari。

但很遗憾,最流行的 IE 和 Firefox 却不支持这个属性(在 Firefox3 版本中将会支持 display:inline-block)。不过 Firefox 下却有私有属性 -moz-inline-box 和inline-block 形似,为什么是“形似”而不是“神似”呢?这是因为使用 -moz-inline-box 会带来很多意想不到的后遗症,比如使用这一属性后,text-align 有时候就会有问题,还得改用 Firefox 的私有属性 -moz-box-align 来解决(谢谢 aoao 提供案例)。

建议:最好不要使用 Firefox 私有属性 -moz-inline-box。

或许有朋友会对上面所说的 IE 也不支持 display:inline-block 属性,表示疑问或者反对。说:“我在 IE 中对 a 或者 span 等内联元素使用 display:inline-block 一直是有效的”。

其实不然,在IE中对内联元素使用 display:inline-block,IE 是不识别的,但使用 display:inline-block 在 IE 下会触发 layout(如果你对 layout 感觉到陌生,可以参看 old9 翻译的《On having layout》), 从而使内联元素拥有了display:inline-block 属性的表症。从上面的这个分析,也不难理解为什么 IE 下,对块元素设置 display:inline-block 属性无法实现 inline-block 的效果。这时块元素仅仅是被 display:inline-block 触发了 layout,而它本就是行布局,所以触发后,块元素依然还是行布局,而不会如 Opera 中块元素呈递为内联对象。

延伸一个问题:IE下块元素如何实现 display:inline-block 的效果?

有两种方法:

1、先使用 display:inline-block 属性触发块元素,然后再定义 display:inline,让块元素呈递为内联对象(两个display 要先后放在两个 CSS 声明中才有效果,这是 IE 的一个经典 bug ,如果先定义了 display:inline-block,然后再将 display 设回 inline 或 block,layout 不会消失)。代码如下(…为省略的其他属性内容):

div {display:inline-block;...}
div {display:inline;}

2、直接让块元素设置为内联对象呈递(设置属性 display:inline),然后触发块元素的 layout(如:zoom:1 等)。代码如下:

div {display:inline; zoom:1;...}

PS:css中关于display的引申

值 描述
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 属性的值。
分享到:
评论

相关推荐

    CSS之display引用运用

    #### 二、display:inline-block详解 `display:inline-block`是一个非常有用的值,它结合了`inline`和`block`两种元素的特点: - **像块级元素一样**:元素会独占一行空间,可以设置宽度和高度。 - **像内联元素一样...

    css之display属性之inline-block布局实现详解

    在这个详解中,我们将深入讨论`display`属性中的`inline`、`block`以及`inline-block`值,以及它们在实际布局中的应用。 1. **`display: inline`** `inline`值使得元素作为行内元素显示,这意味着元素会与其他...

    css中display:block;的用法及适用标签详解

    在CSS(层叠样式表)中,`display` 属性是一个至关重要的属性,它控制着元素如何在页面上布局和显示。`display: block;` 是 `display` 属性的一个值,它对元素的行为有着显著的影响。理解这个属性的用法和适用场景是...

    display inline怎么用

    ### Display Inline 的应用详解 在前端开发中,我们经常需要对网页布局进行调整,而`display`属性就是其中非常重要的一项工具。本篇文章将详细介绍如何利用`display inline`这一特性来改变元素的显示方式,使原本...

    详解css中的display属性

    首先,所有主流浏览器都支持 display 属性。...那么,display:inline、display:block和display:inline-block有什么区别呢? 复制代码代码如下:&lt;style&gt;.inline{display:inline; width:100px; height:100px;

    CSS属性大全-基础属性

    ### CSS属性大全—基础属性详解 #### 一、字体属性 **1. 字体族科 (Font Family)** - **语法**: `font-family: [ &lt;族科名称&gt; | &lt;种类族科&gt; ],...[ &lt;族科名称&gt; | &lt;种类族科&gt; ];` - **允许值**: - `&lt;族科名称&gt;`: ...

    完美居中1

    子元素`.box1`通过`display: inline-block`变为行内块元素,然后结合`text-align: center`使其在父元素中水平居中。 最后,我们讨论一种特殊情况:让导航中的文字靠底部对齐。这可以通过使用`vertical-align: ...

    详解CSS 去掉inline-block元素间隙的几种方法

    inline-block 即内联块,在CSS的元素分类中可以分成三种:行内元素或者内联元素、块级元素、以及内联块元素。 内联块元素具有了内联元素以及块级元素的特性:(1)元素之间可以水平排列 (2)可以当做一个块级元素来...

    详解css中inline-block的最小宽度值

    在标题“详解css中inline-block的最小宽度值”中,主要探讨的是当设置`width`为0时,行内块元素仍然会有一定的最小宽度,这个宽度是由元素内的内容决定的。 在描述中提到,《css世界》这本书提到了这样一个现象:...

    一文掌握CSS 属性display:flow-root声明

    【CSS属性`display:flow-root`详解】 在CSS布局中,`display:flow-root`是一个相对新的属性声明,它的引入为网页设计者提供了更精细的布局控制能力。这个属性最初可能由于兼容性问题而不被广泛使用,但随着浏览器对...

    display属性.doc

    ### Display属性详解 #### 一、概述 `display` 属性是CSS中非常重要的一个属性,用于控制元素的呈现方式,决定了元素如何显示以及与其他元素的关系。它影响着页面布局和元素之间的相互作用。 #### 二、兼容性与...

    CSS完美兼容通用方法

    display: inline-block; } /* Hide from IE Mac */ .clearfix { display: block; } /* End hide from IE Mac */ ``` 使用时,在需要闭合浮动的父容器上添加类`clearfix`即可。 #### 三、其他兼容技巧 ##### **...

    最全前端面试题-2.2(浏览器兼容问题篇-上百篇题集整理1个月).doc

    - **行内元素`display:block`后的`float`布局间隙**:在IE6中,设置`display:block`并使用`float`的行内元素间会有间距,可使用`float:left`和`display:inline`配合消除。 - **最小高度`min-height`不兼容**:IE6-...

    详解css display:box 新属性

     在元素上设置该属性,可使其子代排列在同一水平上,类似display:inline-block;。 二、可在其子代设置如下属性  前提:使用如下属性,必须在父代设置display:box;  1.box-flex:number;  1)占父级元素宽度的...

    CSS中flex和inline-flex的区别详解

    在CSS布局中,`flex`和`inline-flex`都是弹性布局(Flexbox)的一部分,它们主要的区别在于如何处理容器的定位和布局。本篇文章将详细解释这两种布局模式,并通过实例来展示它们之间的差异。 首先,`flex`是将一个...

    css部分bug解决

    display: inline-block; vertical-align: middle; } ``` - **Flex布局**:现代浏览器支持的Flex布局可以更简单地实现垂直居中。 ```css .container { display: flex; justify-content: center; align-items...

    使用CSS的table-cell属性实现左图右文的排版方法详解

    对要素进行横向排列的时候,一般都会使用float, display:inline-block等方法。我们使用table-cell也可以简单的实现,利用table-cell来制作横向排列的好处我觉得有三点(呵呵呵,有些牵强) 1.float以及 clear:both都...

Global site tag (gtag.js) - Google Analytics