CSS全兼容的多列均匀布局问题解决方法

解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 css 属性,赶紧去补习一下吧。

不断更新,不断更新,不断更新,重要的事情说三遍。

6、全兼容的多列均匀布局问题

如何实现下列这种多列均匀布局(图中直线为了展示容器宽度,不算在内):

CSS全兼容的多列均匀布局问题解决方法

法一:display:flex

CSS3 弹性盒子(Flexible Box 或 Flexbox),是一种布局方式,当页面需要适应不同的屏幕大小以及设备类型时,它依然能确保元素拥有更恰当的排布行为。

立即学习“前端免费学习笔记(深入)”;

当然 flex 布局应用于移动端不错,PC 端需要全兼容的话,兼容性不够,此处略过不谈。

 

法二:借助伪元素及 text-align:justify

定义如下 HTML 样式:

1 2 3 4 5

我们知道,有个 text-align:justify 可以实现两端对齐文本效果。

text-align CSS属性定义行内内容(例如文字)如何相对它的块父元素对齐。text-align 并不控制块元素自己的对齐,只控制它的行内内容的对齐。text-align:justify 表示文字向两侧对齐。

一开始我猜测使用它可以实现,采用如下 CSS :

.justify{  text-align: justify;}.justify i{  width:24px;  line-height:24px;  display:inline-block;  text-align:center;  border-radius:50%;}

结果如下:

CSS全兼容的多列均匀布局问题解决方法

Demo戳我

没有得到意料之中的结果,并没有实现所谓的两端对齐,查找原因,在 W3C 找到这样一段解释:

最后一个水平对齐属性是 justify,它会带来自己的一些问题。CSS 中没有说明如何处理连字符,因为不同的语言有不同的连字符规则。规范没有尝试去调和这样一些很可能不完备的规则,而是干脆不提这个问题。

额,我看完上面一大段解释还是没明白上面意思,再继续查证,才找到原因:

虽然 text-align:justify 属性是全兼容的,但是要使用它实现两端对齐,需要注意在模块之间添加[空格/换行符/制表符]才能起作用。

也就是说每一个 1 间隙,至少需要有一个空格或者换行或者制表符才行。

好的,我们尝试一下更新一下 HTML 结构,采用同样的 CSS:

1 2 3 4 5

尝试给每一块中间添加一个换行符,结果如下:

CSS全兼容的多列均匀布局问题解决方法

啊哦,还是不行啊。

再寻找原因,原来是出在最后一个元素上面,然后我找到了 text-align-last 这个属性,text-align-last属性规定如何对齐文本的最后一行,并且 text-align-last 属性只有在 text-align 属性设置为 justify 时才起作用。

尝试给容器添加 text-align-last:justify

.justify{  text-align: justify;  text-align-last: justify; // 新增这一行}.justify i{  width:24px;  line-height:24px;  display:inline-block;  text-align:center;  border-radius:50%;}

发现终于可以了,实现了多列均匀布局:

CSS全兼容的多列均匀布局问题解决方法

结束了?没有,查看一下 text-align-last 的兼容性:

CSS全兼容的多列均匀布局问题解决方法

但是一看兼容性,惨不忍睹,只有 IE8+ 和 最新的 chrome 支持 text-align-last 属性,也就是说,如果你不是在使用 IE8+ 或者 最新版的 chrome 观看本文,上面 Demo 里的打开的 codePen 例子还是没有均匀分布。

上面说了要使用 text-align:justify 实现多列布局,要配合 text-align-last ,但是它的兼容性又不好,真的没办法了么,其实还是有的,使用伪元素配合,不需要 text-align-last 属性。

我们给 class="justify" 的 p 添加一个伪元素:

.justify{  text-align: justify;}.justify i{  width:24px;  line-height:24px;  display:inline-block;  text-align:center;  border-radius:50%;}.justify:after {  content: "";  display: inline-block;  position: relative;  width: 100%;}

去掉了 text-align-last: justify 了,增加一个伪元素,效果如下:

CSS全兼容的多列均匀布局问题解决方法

通过给伪元素 :after 设置 inline-block 设置宽度 100% ,配合容器的 text-align: justify 就可以轻松实现多列均匀布局了。再多配合几句 hack 代码,可以实现兼容到 IE6+ ,最重要的是代码不长,很好理解。

那么为什么使用了 :after 伪元素之后就可以实现对齐了呢?

原因在于 justify 只有在存在第二行的情况下,第一行才两端对齐,所以在这里,我们需要制造一个假的第二行,而 :after 伪元素正好再适合不过。

最终实现题目初始所示:

CSS全兼容的多列均匀布局问题解决方法

以上就是CSS全兼容的多列均匀布局问题解决方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1608235.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月23日 21:37:31
下一篇 2025年12月23日 21:37:43

相关推荐

  • 详解CSS中单行居中,两行居左,超过两行用省略号结尾

    解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 CSS 属性,赶紧去补习一下吧。 不断更新,不断更新,不断更新,重要的事情说三遍。 5、单行居中显示文字,多行居左显示,最多两行超过用省略号结尾 这题就厉害了我的哥。 题目就是如上要求,使用纯 CSS,完成单行文本居中显示文…

    2025年12月23日 好文分享
    000
  • 使用CSS巧妙地制作背景色渐变动画实例

    解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 CSS属性,赶紧去补习一下吧。 不断更新,不断更新,不断更新,重要的事情说三遍。 正文从这里开始。有的时候,嗯,应该说某些特定场合,我们可能需要下面这样的动画效果,渐变 + animation : 假设我们渐变的写法如下: …

    2025年12月23日 好文分享
    000
  • CSS巧妙的实现CSS斜线的方法

    解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 css 属性,赶紧去补习一下吧。 不断更新,不断更新,不断更新,重要的事情说三遍。   8、纯CSS的导航栏Tab切换方案 不用 Javascript,使用纯 CSS 方案,实现类似下图的导航栏切换: 立即学习“前端免费学习…

    2025年12月23日
    000
  • 解析CSS3 transition浏览器兼容性

    1、兼容性 根据canius,transition 兼容性如下图所示: p{width:100px;height:100px;background:blue;transition:width 2s;-moz-transition:width 2s; /* Firefox 4 */-webkit-tr…

    2025年12月23日 好文分享
    000
  • 利用CSS实现div水平垂直居中

    实现居中的方案有很多,这里介绍下纯css使用absolute配合margin的方案。 1. p宽高固定 width: 400px;height: 200px;position: absolute;top: 50%;left: 50%;margin-top: -100px;margin-left: -…

    好文分享 2025年12月23日
    000
  • css中background相关属性

    background-origin: 规定 background-position 属性相对于容器的哪一部分来定位。   padding-box 背景图像相对于内边距框来定位;(默认)   border-box背景图像相对于边框盒来定位;   content-box背景图像相对于内容框来定位。 ba…

    好文分享 2025年12月23日
    000
  • CSS中清除浮动的几种方法

    一、clear:both; 这种方法有一个问题:margin失效。 二、隔墙法 /*墙*/ cl{ clear: both; } .hl{ height: 16px; } 演化出的“内墙法” /*两个p都浮动,所以p不会被撑出高*/ /*在家里建一堵墙就能让儿子给p撑出高*/ 注意:一般不使用此方法…

    好文分享 2025年12月23日
    000
  • CSS常用的一些属性详解

    text-align: center”>CSS常用属性 ☛关于css属性个人建议查看手册更加详细方便,我这里就几种常用属性进行分类并简单取几个常用属性值,仅供跟我一样刚学习前端的人作为入门而用。  1.字体样式 字体的缩写,写法是font:font-style|| font-var…

    好文分享 2025年12月23日
    000
  • 关于CSS的优先级和继承问题

    text-align: center”>CSS的优先级和继承问题 ★css的冲突,即优先级  css本身的设置可以同时应用多个样式在同一个元素,此时样式之间可能出现冲突而达不到用户所想要的效果。★解决css冲突的优先级规则:  ● css层叠样式表引入方法的优先级:内联式>内…

    好文分享 2025年12月23日
    000
  • CSS如何实现两端对齐详解

    前面的话   两端对齐在导航nav的制作中非常常用。本文将详细介绍css两端对齐的3种实现方式 flex   弹性盒模型flex作为强大的弹性布局方式,可以hold住大部分的布局效果,当然也包括两端对齐。可以使用主轴对齐justify-content的两端对齐属性space-between just…

    好文分享 2025年12月23日
    000
  • css样式之border-radius详解

    border-radius 属性设置边框的园角     可能的值:像素,百分比 扩展延伸 html代码 css代码 p { height: 200px; width: 200px; border: 2px solid #a72525; border-radius: 10px;} 结果 立即学习“前端…

    好文分享 2025年12月23日
    000
  • 使用css新单位vw,vh在响应式设计中的应用方法

    考虑到未来响应式设计的开发,如果你需要,浏览器的高度也可以基于百分比值调整。但使用基于百分比值并不总是相对于浏览器窗口的大小定义的最佳方式,比如字体大小不会随着你窗口改变而改变,如今css3引入的新单位明确解决这一问题。 css3引入的”vw”和”vh”基于宽度/高度相对于窗口大小,”vw”=”vi…

    好文分享 2025年12月23日
    000
  • 使用css给未知宽高的元素添加背景图片方法

    给页面的某一元素添加背景图片,当没有指定具体的宽高时,是无法显示效果的 1、添加背景图 HTML代码: *{margin:0; padding:0;} #wrap{ width:100%; height:auto; background:url(‘images/page.jpg’) no-repea…

    2025年12月23日 好文分享
    000
  • CSS进阶之CSS的技巧分享

    如何设置水平居中? 分两种情况 行内元素与块级元素     1.行内元素(如图片 文字) div.textcenter{ text-align:center; } hello joe!     2.块级元素     块级元素的水平居中又分为两种 定宽块状元素 和 非定宽块状元素 立即学习“前端免费学…

    2025年12月23日
    000
  • CSS进阶之布局模型实例详解

    css中含有三种布局模型 流动模型flow 浮动模型float 层模型layer 流动模型 网页默认的布局模型 特点有两个   1.块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度都为100%。实际上,块状元素都会以行的形式占据位置。 h1,p,div{ b…

    2025年12月23日 好文分享
    000
  • box-shadow IE8兼容处理方法介绍

    根据canisue(http://caniuse.com/#search=box-shadow),box-shadow兼容性如下图所示: 测试代码: * { margin: 0; padding: 0; } #header { width: 400px; height: 400px; margin:…

    2025年12月23日 好文分享
    000
  • border-radius IE8兼容处理方法介绍

    根据canisue(http://caniuse.com/#search=border-radius),border-radius兼容性如下图所示: 测试代码: * { margin: 0; padding: 0; } #header { width: 400px; height: 400px; m…

    2025年12月23日 好文分享
    000
  • CSS左边竖条的实现方法代码

    解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 CSS 属性,赶紧去补习一下吧。 不断更新,不断更新,不断更新,重要的事情说三遍。 题目1、下面这个图形,只使用一个标签,可以有多少种实现方式: 假设我们的单标签是一个 p: Studio Global Studio Glo…

    2025年12月23日 好文分享
    000
  • 使用CSS完美实现垂直水平居中的6种方法介绍

    前言 由于HTML语言的定位问题,在网页中实现居中也不是如word中那么简单,尤其在内容样式多变,内容宽高不定的情况下,要实现合理的居中也是颇考验工程师经验的。网上讲居中的文章很多,但是都不太完整,所以小茄今天就来总结下纯CSS实现居中的各种方案。学疏才浅,文中如有不当之处,万望指出! 6种方案 1…

    2025年12月23日 好文分享
    000
  • 使用CSS创建各种不同的图形形状的方法

    介绍 我们学习如何使用简单的CSS来创建不同类型的平面图形。 使用代码 矩形 .rectangle { width: 250px; height: 150px; background-color: #6DC75F;} 三角形 .triangleUp { border-left: 75px solid…

    2025年12月23日 好文分享
    000

发表回复

登录后才能评论
关注微信