转载

CSS标题线(删除线贯穿线效果)实现之一二

缘起

其实看到这个问题,心里已经默默把代码已经码好了~,不就想下面这样嘛:

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; width: 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 这些~

参考

Line-On-Sides Headers

原文  https://segmentfault.com/a/1190000004692817
正文到此结束
Loading...