搜索
首页web前端css教程css inline-block属性各浏览器兼容以及水平间隙问题解决方案

本章给大家介绍css inline-block属性各浏览器兼容以及水平间隙问题解决方案。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

inline-block属性 说明:

设置这个值之后对象自己呈递为内联对象,但是对象内的内容作为 block boxes 呈递。也就是说设置了这个值的元素就等于可以在一个可以包含 block boxes的 inline box元素。而话说IE6、7虽然是能支持 inline-block 的,但是在他们眼里display:inline-block只是触发layout 的一个条件,而非W3C规定的东西。不过我们正好可以利用IE的layout来模拟实现display:inline-block的效果。

inline-block各个浏览器的兼容方案

有两种方法,都是先触发IE的layout,然后再定义 display:inline,让块元素自身呈递为内联对象,如下:

1. 其中在所有能触发layout的属性中,排除position:absolute 和浮动以及width,height之后,能用的就只有display:inline-block了,如下:

fn-ib{display:inline-block;}fn-i{*display:inline;}

注意 两个display 要先后放在两个 CSS 声明中才有效果,如果先定义了 display:inline-block,然后再将 display 设回 inline 或 block,layout 不会消失。

2. 第一种方法要放在两个CSS声明中,有时稍不注意就可能搞错了,出发IE的layout还有 zoom:value,代码如下:

fn-ibz{display:inline-block;*display:inline;*zoom:1}

从上我们看出IE6、7是支持属性 inline-block的,只是没有实现W3C的效果,所以我们利用layout再display:inline来模拟inline-block属性的效果。

好了,现在有解决各个浏览器 inline-block 的方案了,接下来要解决是:在不同浏览器下看下面的例子:

1.jpg

inline-block元素在不同浏览器下有间隙是inline自身的性质,不是bug

然后我们发现在支持display:inline-block属性的浏览器中 inline 和 block 元素 display:inline-block 后均会产生水平空隙;而在IE67以及IE(Q)模拟 display:inline-block 后分两种情况:模拟之后的块元素没有间距,而内联元素有间隙。为什么?这里再补充一个知识点:inline元素在默认状态下排列都是有间隙的。所以以上现象就又如下解释了:

支持display:inline-block属性的浏览器,其元素本身就相当于inline元素,所以现代浏览器中都有间隙;而模拟的方案中,因为虽然将块元素设置 display:inline 能使其想行内元素一样水平排列,但是block 元素还是block 元素,不会真的变成inline 元素,所以就没有空隙。

而产生空隙的根本原因是 HTML 中的换行符、空格符、制表符等字符产生了空白符。

inline-block之间的水平间隙问题解决方案

以上我们知道产生间隙的根本原因是HTML 中的换行符、空格符、制表符等字符,俺么我们把标签与标签之间的空格去掉,就不会有问题了么?所以代码如下:

HTML代码如下:

<div class="parent">
    <strong class="fn-ibz">内联元素</strong><strong class="fn-ibz">
    内联元素</strong><strong class="fn-ibz">
    内联元素</strong><strong class="fn-ibz">
    内联元素</strong>
</div>
<div class="parent">
    <div class="fn-ibz">块元素</div><div class="fn-ibz">
    块元素</div><div class="fn-ibz">
    块元素</div><div class="fn-ibz">
    块元素</div>
</div>

效果图:

1.jpg

改变DOM结构来解决inline-block之间的间隙问题

以上DEMO代码我是做了处理的,所以我们就看不到间隙。但是问题由来了:

如果是静态的话我们这么做确实没多大问题,假如是后台直接生成的呢?或者以后维护同事看到这代码怎么这么写的,改回来了呢。所以用CSS解决还是最好的途径。我第一次看到这个情况第一反应就是用margin负值来解决,后来知道产生空隙的根本原因之后,觉得margin负值方法虽然能够解决,但是没有对症下药,间隙产生原因的是HTMl间的换行符、空格符、制表符等字符,而间隙会随着字体大小等属性变化而变化。所以就可以用CSS控制字符大小来找出一个。所以参考YUI3中解决的方案,我得到如下代码:

.f-w-p-parent{
    font-size:0;
    letter-spacing:-4px;
    *letter-spacing:normal;
    *word-spacing:-1px;
}
.f-w-p-inner{
    font-size:12px;
    letter-spacing:normal;
    *word-spacing:normal;
    vertical-align: top;
}

效果图:

3.jpg

CSSinline-block的间隙的方案

然后我们分析每一行代码的作用:

  1. font-size的作用:既然是字符引起的,当然是把他们的font-size设置为0,然后再元素内font-size大小设回原来的大小。除了IE6、7以及低版本的chrome和 Safari的其他浏览器inline-block间隙到这一步就没了(低版本的chrome因为设置font-size:0之后,不能让文字自由伸缩,所以不推荐)

  2. word-spacing的作用:在IE6、7以及IE(q)模式下,始终有1px的间距,然后我们就利用word-spacing:-1px来解决(单词之间的距离,只对英文有用,中文没有单词这概念),然后再元素内设回normal。当然使用margin:0 0 0 -1px;也是可以的(貌似代码还少了…)

  3. letter-spacing的作用:剩下就只有低版本的chrome和 Safari了,letter-spacing是调整文字之间的间距,因为letter-spacing跟font-size和font-family甚至不同浏览器都是有差别的,所以按照 《letter-spacing与字体大小/字体关系的数据表》上面的数据来设置,就能将间隙取消。然后因为letter-spacing和word-spaacing在一起容易出事,所以加了 *letter-spacing:normal; 这句代码。

  4. vertical-align:top的作用:最后讲的这个跟间隙无关,设置vertical-align:top是为了让 inline-block 元素以top基线对齐。vertical-align 属性只在 inline、inline-block 元素有效 。

inline-block的优点

这里不说inline-block布局比浮动布局节省浏览器资源,我们就得抛弃浮动布局,投向inline-block布局的怀抱(而且官网也没这个说法),毕竟一个事物的出现毕竟有它存在的意义的,而且浮动布局也是认识度最高的布局方法。所以还是那句话,具体情况具体分析,明明使用浮动布局结构更清晰的,你非得用 inline-block而增加了大量亢余代码,就算 inline-block布局 真的像传说中的那样最不耗资源,但是你html代码增加了不也是耗资源了么。

就算有,我也觉得不大。所以改用绝对定位就用绝对定位,改用浮动就用浮动,如果碰到一个情况使用 inline-block 能更好的解决问题,那就大胆的用吧。毕竟inline-block相较与浮动和绝对定位还是有一些有点的。

  1. 能使用vertical-align和text-align实现垂直、水平、两边、基线等等对齐,而且还是自适应的哦。

  2. 因为自身原因,所以特别适合流体布局。高度和宽度不用定死。

以上是css inline-block属性各浏览器兼容以及水平间隙问题解决方案的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
滑动页脚滑动页脚Apr 09, 2025 am 11:50 AM

刚刚推出了一个引人入胜的新网站。标语:Big Tech正在看着您。我们正在看大型技术。上升的出色工作。这

喜欢的页面喜欢的页面Apr 09, 2025 am 11:47 AM

前几天,我发布了有关在JavaScript中解析RSS提要的内容。我还发布了有关RSS设置的信息,讨论了Feedbin的核心。

重新创建Codepen Gutenberg嵌入块以进行理智。重新创建Codepen Gutenberg嵌入块以进行理智。Apr 09, 2025 am 11:43 AM

学习如何通过Chris Coyier实施WordPress的Gutenberg编辑器来创建一个自定义Codepen块,并为Sanity Studio提供预览。

如何使用CSS制作线路图如何使用CSS制作线路图Apr 09, 2025 am 11:36 AM

线,条和饼图是仪表板的面包和黄油,是任何数据可视化工具包的基本组成部分。当然,您可以使用SVG

编程SASS创建可访问的颜色组合编程SASS创建可访问的颜色组合Apr 09, 2025 am 11:30 AM

我们一直在寻求使网络更容易访问。颜色对比只是数学,因此Sass可以帮助涵盖设计师可能错过的边缘案例。

我们如何创建一个在SVG中生成格子呢模式的静态站点我们如何创建一个在SVG中生成格子呢模式的静态站点Apr 09, 2025 am 11:29 AM

格子呢是一块图案布,通常与苏格兰有关,尤其是他们时尚的苏格兰语。在Tar​​tanify.com上,我们收集了5,000多个格子呢

PHP模板的后续行动PHP模板的后续行动Apr 09, 2025 am 11:14 AM

不久前,我仅以PHP(基本上是Heredoc语法)发布了有关PHP模板的信息。我从字面上使用该技术来进行某种超级基础

使用Bootstrap组件创建模态图像库使用Bootstrap组件创建模态图像库Apr 09, 2025 am 11:10 AM

您是否曾经在网页上单击图像,该图像通过导航打开图像的较大版本以查看其他照片?

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中