CSS如何实现自适应分隔线?下面CSS栏目就来给大家介绍一下CSS实现自适应分隔线的N种方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
(推荐教程:CSS栏目)
分割线是网页中比较常见的一类设计了,比如说知乎的更多回答
立即学习“前端免费学习笔记(深入)”;
这里的自适应是指两边的横线会随着文字的个数和父级的宽度自适应
偷偷的看了一下知乎的实现,很显然是用一块白色背景覆盖的,加一点背景就露馅了
心想:知乎的前端也不怎么样?可能别人的重点不在这些上面吧
下面列举几种更好的实现方式,不会露馅的那种
1.伪元素+transform:translateX(-100%);
主要原理是设置文本居中text-align: center;,然后给定两个伪元素,分别绝对定位,那么此时伪元素也是跟随着水平居中的,设置足够的宽度,然后把左边的往左位移100%就可以了,父级记得超出隐藏。
具体实现如下
html结构为
我是分割线
登录后复制登录后复制登录后复制
css样式为
.title{ position: relative; text-align: center; overflow: hidden; font-size: 14px; color: #999;}.title::before,.title::after{ content: ''; display: inline-block; width: 100%; height: 1px; position: absolute; background: #ccc; top: 50%;}.title::before{ margin-left: -10px; transform: translateX(-100%);}.title::after{ margin-left: 10px;}
登录后复制
CSS栏目
2.伪元素+flex
这个比较好理解了,设置display:flex,然后两个伪元素分别铺满剩余空间。
具体实现如下
html结构为
我是分割线
登录后复制登录后复制登录后复制
css样式为
.title{ display: flex; align-items: center; font-size: 14px; color: #999;}.title::before,.title::after{ content: ''; flex: 1; height: 1px; background: #ccc;}.title::before{ margin-right: 10px;}.title::after{ margin-left: 10px;}
登录后复制
CSS栏目
3.伪元素+box-shadow/outline+clip-path
同样利用text-align: center使文本和伪元素居中,然后生成足够大的box-shadow或者outline,由于不支持单个方向,所以用clip-path或者clip裁剪掉
具体实现如下
html结构为
我是分割线
登录后复制登录后复制登录后复制
css样式为
.title{ text-align: center; font-size: 14px; color: #999; overflow: hidden;}.title::before,.title::after{ content: ''; display: inline-block; width: 0; height: 1px; box-shadow: 0 0 0 9999px #ccc; vertical-align: middle;}.title::before{ margin-right: 10px; clip-path: polygon(0 0, -9999px 0, -9999px 100%, 0 100%);}.title::after{ margin-left: 10px; clip-path: polygon(0 0, 9999px 0, 9999px 100%, 0 100%);}
登录后复制
CSS栏目
4.伪元素+right:100%
这个实现需要多一层标签,外部仍然是text-align: center,内部文本里添加两个伪元素绝对定位,其中左边的设置距离右边100%(相对于文本标签)即可
具体实现如下
html结构为
我是分割线
登录后复制
css样式为
.title{ text-align: center; font-size: 14px; color: #999; overflow: hidden;}.inner{ position: relative;}.inner::before,.inner::after{ position: absolute; content: ''; width: 9999px; height: 1px; background: #ccc; top: 50%;}.inner::before{ right: 100%; margin-right: 10px;}.inner::after{ margin-left: 10px;}
登录后复制
CSS栏目
5. border+transform
这个思路可以不用到伪元素,不过需要额外的标签,给内部文本左右足够大的1px边框,此时需要设置line-height:1px,由于内部整体以及足够大了(超过父级),可以使用绝对定位和transform: translateX(-50%)居中
具体实现如下
html结构为
我是分割线
登录后复制登录后复制登录后复制
css样式为
.title{ position: relative; text-align: center; font-size: 14px; color: #999; overflow: hidden; padding: .6em 0;/**把高度撑起来**/}.inner{ position: absolute; left: 50%; transform: translateX(-50%); white-space: nowrap; line-height: 1px; border-left: 9999px solid #ccc; border-right: 9999px solid #ccc; padding: 0 10px;}
登录后复制
CSS栏目
6.伪元素+border+left/right
这个思路只需要一个伪元素,在文本内部生成一个伪元素,利用足够大的border和相同的负值(绝对定位+left/right)还原位置
具体实现如下
html结构为
我是分割线
登录后复制登录后复制登录后复制
css样式为
.title{ text-align: center; font-size: 14px; color: #999; overflow: hidden;}.inner{ position: relative; padding: 0 10px;}.inner::before{ content: ''; position: absolute; height: 1px; top: 50%; border-left: 9999px solid #ccc; border-right: 9999px solid #ccc; right: -9999px; left: -9999px;}
登录后复制
CSS栏目
7.伪元素+table-cell
主要思路为父级设置display:table,伪元素设置display:table-cell,并设置足够大的宽度即可
具体实现如下
html结构为
我是分割线
登录后复制登录后复制登录后复制
css样式为
.title{ display: table; font-size: 14px; color: #999;}.inner{ display: table-cell; white-space: nowrap; padding: 0 10px;}.title::before,.title::after{ content: ''; display: table-cell; width: 9999px; overflow: hidden; background: linear-gradient(#ccc 0,#ccc) center no-repeat;/**这里用线性渐变生成的,也可以用其他方式**/ background-size: 100% 1px;}
登录后复制
CSS栏目
8.fieldset+legend
利用fieldset和legend标签组合,可以天然实现分隔线效果,参考至张鑫旭的CSS栏目
具体实现如下
html结构为
登录后复制
css样式为
.title{ font-size: 14px; color: #999; border: 0; border-top: 1px solid #ccc; padding: 0;}.inner{ margin: 0 auto;; padding: 0 10px;}
登录后复制
CSS栏目
小结
上面一共列举了8中方式来实现分隔线的效果,每种方法思路各不相同,重要的是可以发散自己的想象力,可能这才是CSS与其他语言所不同的吧~
这里整理了一下,整体效果如下,可访问CSS栏目查看,大家在实际项目中可自行选取所需要的方式
可能还有其他方式没有想到,欢迎大家集思广益,在下方留言讨论
更多编程相关知识,请访问:CSS栏目!!
以上就是CSS如何实现自适应分隔线?方法介绍的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2884661.html