缘起
其实看到这个问题,心里已经默默把代码已经码好了~,不就想下面这样嘛:
JSBIN代码示例
嗯,是的,我们日常确实基本上就是用的这种方式,也没啥问题呀~,来个背景色定下位就欧拉欧拉的了。
不过,因为一次问题需要,发现还是有需要多了解下的。
来,请看下图,这个需求是这样子的,实现这样子的效果(可以先构思下实现代码,看下思路是不是差不多的呢?)
可以看到,这个线后面有背景图,随着屏幕尺寸渐宽时,会盖到背景图上,缩小时,则不会盖在背景图上,这就不能使用我们平常的填充背景色的写法了,只能另寻他路(想到有什么好的方法实现了么?)
所以这个问题是:因屏幕的伸展收缩会导致内容区所能容纳的内容不一,从而导致高度不一,各个元素也是随着屏幕时高时底,背景色的用法无法生效,有何好的解决办法?
当然,你有可能会说这是特例,可以直接上图,固然这种方式可以,但是,有很多这样的区块,难道就全部都直接上图么?肯定不行啦~,能懒就懒,如能找到一劳永逸的办法肯定比直接上图,结果发现弄完发现文案有问题,要改字就蛋疼了。
方法
好了,开始想办法解决上面的问题了。
先从float
下手,两条线各浮动在两侧,其实我们可以理解为常见的网页三栏布局,可是问题是,不能定宽度呀,定了还怎么去自适应呢?所以这条pass
既然float
不行了,那想想别的,这回就用position
吧~开头的用法也是这种,不过是有背景色的而已,这回我们不许用背景色,看如何处理这个问题。
首先,基本结构:
-
<div class="title">
-
<span class="caption">Headling</span>
-
</div>
我们可以用伪类:before
、:after
来生成一些无关紧要的东西,不过为了能让大家看的清楚些,直接用标签了,
这是改进后的结构:
-
<div class="title">
-
<span class="caption"><span class="line line-l"></span>Headling<span class="line line-r"></span></span>
-
</div>
接着给样式(答案就在里面噢):
-
.title { position: relative; z-index: 2; font-size: 16px; line-height: 24px; text-align: center; color: #999; overflow: hidden; }
-
.title .caption { position: relative; display: inline-block; }
-
.title .caption .line { position: absolute; top: 11px; 600px; height: 1px; background-color: #ddd; }
-
.title .caption .line-l { right: 100%; margin-right: 15px; }
-
.title .caption .line-r { left: 100%; margin-left: 15px; }
看了上面的样式有没看出些端倪呢?解释下这个实现细节:
-
首先,将
.caption
设为行内框,相对定位 -
接着,两根线的定位是被
.caption
所包含的,接着将它们推向它们各自的地方(left: 100%
、right: 100%
),应该知道这100%是基于谁算的吧?(没错,就是第一步里的.caption
,结果你应该猜到了?) -
最后再用
margin-left/right
隔出间隙,就满足了我们的需求啦
我们可以将.line
的宽度设的超长,overflow
掉即可,这样就可以做到自适应了,下面提个小问题:
用以上的方法,解决这个线的问题~
最后
这个问题还有别的解决方式,比如line-gradient
这些~