当前位置: 首页 > 科技观察

CSS实现自适应分屏的N种方法

时间:2023-03-12 10:35:54 科技观察

分屏是网页中比较常见的一种设计。父级的数量和宽度是自适应的。偷偷看了看知乎的实现。它显然被白色背景覆盖。添加一点背景将揭示真相。我心想:知乎的前端不好吗?也许其他人的关注点不在这些。下面列举几个比较好的实现方法,先不露馅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:'';显示:内联块;宽度:100%;高度:1px;位置:绝对;背景:#ccc;顶部:50%;}.title::before{margin-left:-10px;transform:translateX(-100%);}.title::after{margin-left:10px;}CSSdivider(伪元素+transform)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;}CSSdivider(伪元素+flex)3.伪元素+box-shadow/outline+clip-path也是使用text-align:center将文字和伪元素居中,然后生成一个足够大的box-阴影或轮廓,因为它不支持单一方向,所以使用clip-path或clip将其裁剪掉。具体实现如下。html结构是我是分界线
。css样式为.title{text-align:center;font-size:14px;color:#999;overflow:hidden;}.title::before,.title::after{content:'';display:inline-块;宽度:0;高度:1px;框-阴影:0009999px#ccc;垂直对齐:中间;}.title::before{margin-right:10px;剪辑路径:多边形(00,-9999px0,-9999px100%,0100%);}.title::after{margin-left:10px;clip-path:polygon(00,9999px0,9999px100%,0100%);}CSSdivider(伪元素+box-shadow/outline+clip-path)4.伪元素+right:100%这个实现需要多加一层标签,外面还是text-align:center,里面的文字加两个伪元素做绝对定位,其中左边side的设置是从右边开始100%(相对于文字标签),具体实现如下。html结构是我是分割线
css样式是.title{text-align:center;font-size:14px;颜色:#999;溢出:隐藏;}.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;}CSSdivider(伪元素+right:100%)5.不用伪元素也可以使用border+transform的思路,但是需要额外的标签,给内部文本左右足够大的1px边框。这时候line需要设置-height:1px,因为内部整体足够大(超出父级),可以使用绝对定位,transform:translateX(-50%)居中具体实现如下html结构为我是分界线css样式为.title{position:relative;text-align:center;font-size:14px;颜色:#999;溢出:隐藏;填充:.6em0;/**竖起高度**/}.inner{position:absolute;left:50%;transform:translateX(-50%);white-space:nowrap;line-height:1px;border-left:9999pxsolid#ccc;右边框:9999pxsolid#ccc;padding:010px;}CSS分隔线(border+transform)6.伪元素+border+left/right这种思路只需要一个伪元素,在文本内部生成一个伪元素,使用足够大的边框而同一个负值(绝对定位+左/右)还原位置具体实现如下。html结构是我是分界线css样式是.title{text-align:center;font-size:14px;颜色:#999;溢出:隐藏;}.inner{position:relative;padding:010px;}.inner::before{content:'';position:absolute;height:1px;top:50%;border-left:9999pxsolid#ccc;border-right:9999pxsolid#ccc;right:-9999px;left:-9999px;}CSSdivider(伪元素+border+left/right)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:010px;}.title::before,.title::after{content:'';display:table-cell;width:9999px;overflow:hidden;background:linear-gradient(#ccc0,#ccc)centerno-repeat;/**这个是用线性渐变生成的,也可以用其他方法**/background-size:100%1px;}CSSdivider(伪元素+table-cell)8.fieldset+legend使用fieldset结合legend标签自然可以达到分割线的效果。具体实现参考张新旭的这篇文章如下。html结构是我是分割线css样式是.title{font-size:14px;color:#999;border:0;border-top:1pxsolid#ccc;padding:0;}.inner{margin:0auto;;padding:010px;}CSS分隔线(fieldset+legend)总结上面一共列举了8种实现效果的方法分界线。每种方法都有不同的想法。重要的是你可以发挥你的想象力。也许这就是CSS和其他语言的区别。这里整理一下,整体效果如下,不是实际项目中可以选择的方式