希望得到大家的帮助~
需要实现一个这样的效果:
中间的内容可以是 React
组件,可以是文字等任意的东西,提前不知道它的宽度值。
两边的线等长,随着中间的内容增加或者减少进行改变,但是和中间的文字总是保持一定的间隔。
总结起来就是三列布局,中间内容不定宽,两边内容等宽,且可以自适应中间内容宽度的变化。
目前自己可以实现中间内容定宽的情况,但是不定宽的情况却做不出来,希望大家提供一些思路,感谢大家。
<p class="horizontalLineWithContent">
<span class="horizontalFirstAdditionalLayer"></p>
"AND"
<span class="horizontalFirstAdditionalLayer"></p>
<p>
html
部分考虑到 React
无法操作伪元素,所以将伪元素换成了 span
标签
.horizontalLineWithContent {
position: relative;
margin: 1em auto;
text-align: center;
color: #eee;
.horizontalFirstAdditionalLayer, .horizontalSecondAdditionalLayer{
position: absolute;
border-top: 1px solid #eee;
top: 50%;
}
.horizontalFirstAdditionalLayer {
left: 0;
}
.horizontalSecondAdditionalLayer {
right: 0;
}
}
希望大家多多提供思路,多谢各位啦~~
有考虑
and
背景因素吗?如果不考虑背景的话可以这样做:
当然这只是方法之一,其它方法还有的,我再想想再来
仔细看了遍问题...再答;po一个自己项目里面的:
想到了一个完全能满足要求的方案,但是我相信一般人都不会这么做。就是把左边横线,中间文字,右边横线三个做成三个独立的无状态component,全部display:inline-block, vertical-alignment:top。然后设定中间文字的字号,比如1rem。之后render的时候计算文字长度length,那么就设定中间文字p(或者label)的宽度(考虑到中文比英文宽,我们优先满足中文宽度,如果怕不够,也可以设为每个文字1.1rem之类)为length x 1rem + (marginWidth x 2),然后左右两个横线的宽度就是 calc( 50% - (length x 0.5rem + marginWidth) ),并且使左右高度为中间高度的一半,再加上border-bottom就OK了
如果不考虑背景可以这样
不知有没有考虑过table table-cell的做法
http://codepen.io/dolymood/pen/JKKorq
之前一个移动端页面做过类似需求
html:
css:
效果:
不知道能不能满足需求,自己写了一个两列不定宽,中间自适应的,欢迎拍砖