探究CSS单行文本居中和多行文本左对齐的实现你能这样判断文本吗?当文本少于一行时,让它显示在中间,当文本超过一行时,让它显示在左边。不然居中显示很奇怪,因为最后一行挂了。管理器的逻辑是通过js判断文字的高度。如果超过一行,就加一个类名,这样的文字很多地方都有,所以遍历了,最重要的一点是关于方法执行的时机。有可能刚加载时获取不到高度(当时好像用了定时器,也造成了先居中后左跳的现象)...//伪代码$('.text').each(function(){if($(this).height()>30){$(this).addClass('mul');}})那么这些文本可能仍然是动态生成的,所以你还得在生成文本的地方加上调用一次这个方法,功能就搞定了,不过别说多罗嗦,体验不好(虽然外人看不出来)当时,我在想,如果是用CSS来实现,那这些问题就根本不用考虑了!关于css的实现思路,其实只要你的逻辑清晰,js就可以实现,按照正常的思路一步步来就可以了。CSS不是这样的,她需要你有更多的想象力。比如上面的需求,从表面上看,需要判断文本的行数。这根本不是CSS能做到的,但我们可以换个方向思考。文本默认留空(默认文本流),只有第一行居中。第一行可以关联::first-line伪元素,所以可以尝试这样实现。
能不能这样判断这段文字,当文字少于一行时,让它显示在居中,当文字超过一行时,让它显示在左边
p::first-line{text-align:center;}很好理解吧?仅在第一行执行居中操作。这并不明显,但它只是有点缺陷。第一行的居中效果和后面的文字看起来有点凌乱(因为当一行的剩余空间小于一个字符时,它会倒下)。解决这个问题也很简单。上面的问题是,既然第一行总是居中,那有没有办法在只有一行的时候才居中呢?这里可以使用text-align-last,意思是指定多行文本最后一行的居中方式。如果和::first-line一起使用,则必须同时满足首行和末行。判断了吗?目前只有一排吗?p::first-line{/*匹配第一行*/text-align-last:center;/*最后一行居中*/}这个是正常的,有点捏~看笔不好意思,由于::first-line支持非常有限的样式(MDN)。上面的实现方式只在chrome下有效,但是这个逻辑和js还是有很大区别的。上面虽然没有text-align相关的属性,但是chrome已经支持了~更好的实现1.Parenttext-align:center,childinline-block+text-align:left首先来看一下兼容性最好的实现结构如下