`
wandejun1012
  • 浏览: 2736787 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

块元素变成内联元素,不用浮动

阅读更多

很多时候我们必须使一些块元素并排显示,一般想到的是必须使用浮动,但是块元素浮动给边距(margin)的时候在IE下会出现加倍的BUG,所以很多时候不得不把这个块元素套在一个内联元素里面,然后给内联元素浮动和边距。今天看到了怿飞、秦歌和乌龙茶关于display:inline-block的文章,很不错,综合一下,记录下来。

display:inline-block
简单来说就是将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内,允许空格。但是这个属性目前不是所有的浏览器都支持,只有Opera和Safari支持,FireFox3和IE8据说将会支持,Firefox2和IE使用特殊办法可以实现这种效果,下面就来探讨一下

在Firefox2中有-moz-inline-stack和-moz-inline-box实现,但是这两个私有属性在某些情况下都会有异常,具体如下:
1、display:-moz-inline-stack
“当它所应用的外包装器(wrapper)的display为inline的时候,它所包含的a或button将无法点击或无法选取,需要通过position:relative还hack掉这个bug”--乌龙茶
2、display:-moz-inline-box
使用这一属性后,text-align就会出问题,必须使用Firefox的私有属性 -moz-box-align来解决
所以,建议不要使用-moz-inline-box,还是使用-moz-inline-stack

在IE(以下IE8除外)下,如果对内联元素,比如a或span元素,使用inline-block属性是有效的,似乎IE是支持的,其实是触发了IE的layout,从而拥有了inline-block属性的表症。这样我们就有了一种在IE下实现display:inline-block效果的两种方法:

1、先用display:inline-block属性触发块元素,然后再定义display:inline,让块元素呈递为内联对象(原理:这是IE的一个经典bug,如果先定义了display:inline-block,然后再设置display回inline或block,layout不会消失),代码如下:
div {display:inline-block;}
div {display:inline;}

2、直接让块元素设置为内联对象(display:inline),然后通过zoom:1触发块元素的layout,代码如下:
div {display:inline; zoom:1;}

那么为了能够让所有浏览器支持display:inline-block,综合一下,最终的实现代码如下(参考怿飞:模拟兼容性的 inline-block 属性):

display:inline-block; /*一方面Firefox3 beta、IE8 beta、Opera、Safari 支持,另一方面下触发IE下inline 元素的 hasLayout*/

display:-moz-inline-stack; /* Firefox 的私有属性,需要时还必须用到position:relative解决上面提到的bug */

zoom:1; /*同样是IE 下触发 hasLayout*/
*display:inline; /*一旦IE 下触发了 hasLayout,设置 block 元素为 inline 会使 display:inline 效果与 display:inline-block 相似*/

/*扩展一下一些其他可能用到的属性*/
text-indent:-9999px;
*text-indent:0;
font-size:0;
line-height:0; /* 如需隐藏文字,可用这四个属性 */
/*另外上面隐藏文字,还可以用更简化的方法:line-height:超级大值;font-size:0; */

overflow:hidden; /* 隐藏溢出的内容 */

vertical-align:middle; /* 行内垂直居中,针对 Opera 比较大的偏离 */

width:?px; /*?为任意非auto值*/
height:?px; /*?为任意非auto值*/

分享到:
评论

相关推荐

    网页中不同元素类型之间可以相互转换吗?.docx

    例如,前两个`<div>`被转换为内联元素并排显示,而一个`<span>`变成了行内块元素,可以设置宽度和高度但不独占一行,另一个`<span>`则变为块级元素,独占一行。 了解和掌握`display`属性的使用,可以帮助我们更好地...

    Basic Visual Formatting in CSS

    `将块级元素变为内联元素。 - 使用`display: block;`将内联元素变为块级元素。 - 使用`display: inline-block;`创建内联块元素。 #### 四、水平和垂直的块级盒子格式化 对于块级盒子来说,正确的水平和垂直对齐是...

    最最最全的清除浮动方法

    3. **父元素浮动**:让父元素也浮动,可以解决高度塌陷问题,但这种方法会把父元素的行为变为浮动,可能会影响其他非预期的布局。 4. **overflow: hidden**:设置父元素的`overflow`属性为`hidden`,创建了一个新的...

    显示块

    例如,将一个原本是内联元素(如`<span>`或`<a>`)的显示类型设置为`block`,那么它就会变成一个显示块元素,具备占据整行的特性。这样可以实现元素布局的灵活性,帮助开发者创建复杂的网页结构。 显示块元素的特性...

    CSS display:inline和float:left两者区别探讨

    而当同时设置 `float:left` 时,宽度设置就生效了,元素变成了浮动块级元素。 总结来说,`display:inline` 和 `float:left` 都是CSS布局中的关键工具,它们在不同的场景下发挥着各自的作用。理解它们的差异和应用...

    CSS元素的层叠与z-index设置

    每个层叠上下文包含不同的元素类型,如块级元素、内联元素、浮动元素和定位元素等。根据W3C的规范,这些元素的`stack level`顺序如下: 1. 父级层叠上下文的背景和边框。 2. `z-index`值为负的定位元素。 3. 文本流...

    Span元素的width属性无效果原因及解决方案

    4. 将 Span 元素浮动,使得 width 属性生效。Float 属性可以使得元素脱离普通的文档流,并且可以产生非凡的布局特性。需要注意的是,Float 属性只能应用于块级元素,所以在应用 Float 之前,需要将 Span 元素设置为...

    韩顺平 DIV+CSS 超级详细笔记

    块元素默认占据一行,而行内元素则与文本内容一起显示。 **区别** - **块元素**:默认独占一行,宽度默认为容器宽度。 - **行内元素**:和其他元素在同一行显示,不会独占一行。 **CSS核心内容——流** CSS流是...

    Web程序开发:第12章 定位及布局.pdf

    通过CSS的`display`属性,我们可以改变元素的显示方式,使其从行内元素变为块级元素,或者反之。此外,`display:none`可以使元素完全不可见,不占用任何空间。 接着,`display`属性还允许我们设置其他类型的框,如`...

    css参考手册

    - `inline-block`:内联块元素,像内联元素一样排列,但可以设置宽度和高度。 - `flex`:弹性容器,用于创建灵活的布局。 - `grid`:网格容器,用于创建复杂的二维布局。 ##### 基本视觉布局 CSS提供了一系列布局...

    CSS知识汇总.docx

    1. `display`属性控制元素的显示方式,如`none`(隐藏)、`block`(块级元素)、`inline-block`(行内块元素)和`inline`(行内元素)。 2. `overflow`属性处理内容溢出,可以设置为`scroll`(显示滚动条)、`hidden...

    html+css基础知识.pdf

    `display:inline`将元素转换为内联元素,允许它们与其他内联元素并排显示,而`display:block`则将元素变为块级元素,它们会在新的一行开始,并占据整行宽度。 2. `body`的默认外边距:在CSS中,`body`元素通常会有...

    前端笔试题(二十四)答案版.docx

    - 浮动后效果:按照文本流排列,与其他内联元素并排显示。 - **Inline-block** - 描述:作为内联块级元素处理,占据所需宽度,并允许设置宽高和内外边距。 - 浮动后效果:按照文本流排列,可以设置宽高和内外...

    CSS重要属性之float学习心得(分享)

    浮动元素会变成块级元素,即使它们原本是内联元素。这意味着它们会占用一整行,且可以设置宽度、高度、外边距和内边距。 7. **float流体布局** `float`属性在创建流体布局中发挥着作用,尤其是单侧固定的布局。...

    div布局轻松搞定,轻松调用这布局你的网页

    使用`float`属性(如`float: left`或`float: right`),可以让`div`元素浮动,常用于创建多列布局。但需要注意清除浮动以避免父元素高度塌陷。 6. **Flex布局** CSS3引入的Flexbox(弹性盒模型)允许更灵活的单...

    3.4CSS 内容总结(四)定位.md

    - `inline`:元素作为内联元素显示。 - **visibility**: - `hidden`:元素不可见,但仍然占据空间。 - `visible`:元素可见。 - **overflow**: - `hidden`:隐藏溢出的内容。 - `visible`:显示所有内容,...

    尚硅谷_前端_面试题

    - 使用`zoom: 1`可以使元素变成一个新的BFC,从而解决浮动元素导致的高度塌陷问题。 27. **使用CSS预处理器吗?喜欢那个?** - CSS预处理器(如Sass、Less等)能够提高CSS的可维护性和扩展性,提供变量、嵌套规则...

    bootstrap响应式工具使用详解

    例如,在提供的代码中,我们可以看到`<div class="col-lg-6 visible-lg-inline-block">`,这是一个只在大屏幕(lg分辨率以上)上显示的6列宽的元素,并且设置为内联块元素。`hidden-sm hidden-xs`类则用于隐藏在小...

    最新web前端面试题及答案.docx

    - `inline-block`:将元素转换为内联块元素。 - `flex`:启用Flex布局。 #### CSS选择器类型 - **ID选择器**:通过`#id`选择特定元素。 - **类选择器**:通过`.class`选择具有特定类的所有元素。 - **标签选择器**...

    IE6 float:left margin-left出现两倍像素

    内联元素不会受到浮动的影响,也就不会出现边距翻倍的问题。 在CSS中添加display:inline的方法有几种,其中一种方式是使用一个只有IE6能识别的CSS hack,即通过下划线来指定display属性,如下所示: ```css #d1 { ...

Global site tag (gtag.js) - Google Analytics