当前位置: 首页 > Web前端 > HTML5

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

时间:2023-04-05 18:15:23 HTML5

分屏是网页中比较常见的一种设计。父级的数量和宽度是自适应的。偷偷看了看知乎的实现。它显然被白色背景覆盖。添加一点背景将揭示真相。我心想:知乎的前端不好吗?也许其他人的关注点不在这些。下面列举几个比较好的实现方法,先不露馅1.伪元素+transform:translateX(-100%);主要原理是设置文本居中text-align:center;,然后给定两个伪元素,分别是绝对定位的,那么伪元素这时候也是水平居中,设置足够的宽度,然后把左边的向左移动100%。请记住,父级是隐藏的。具体实现如下。html结构为我是分割线

,css样式为.title{position:relative;文本对齐:居中;溢出:隐藏;字体大小:14px;颜色:#999;}.title::before,.title::after{内容:'';显示:内联块;宽度: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;对齐项目:居中;字体大小:14px;颜色:#999;}.title::before,.title::after{内容:'';弹性:1;高度: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-shadow或outline,由于不支持单一方向,所以使用clip-path或clip来剪掉它。具体实现如下。html结构为我是分界线
,css样式为.title{text-align:center;字体大小:14px;颜色:#999;溢出:隐藏;}.title::before,.title::after{内容:'';显示:内联块;宽度:0;高度:1px;框阴影:0009999px#ccc;vertical-align:middle;}.title::before{margin-right:10px;剪辑路径:多边形(00,-9999px0,-9999px100%,0100%);}.title::after{margin-left:10px;剪辑路径:多边形(00,9999px0,9999px100%,0100%);}CSSdivider(伪元素+box-shadow/outline+clip-path)4.伪元素+right:100%这个实现需要多一层标签,外面还是text-align:center,andtheinside在文本中添加两个伪元素进行绝对定位,其中左边设置为距离右边100%(相对于文本标签),实现如下html结构:我是分割线
css样式是.title{text-align:center;字体大小:14px;颜色:#999;溢出:隐藏;}.inner{位置:相对;}.inner::之前,.inner::after{位置:绝对;内容:'';宽度:9999px;高度:1px;背景:#ccc;上:50%;}.inner::before{右:100%;:10px;}.inner::after{margin-left:10px;}CSSdivider(伪元素+right:100%)5.border+transform的思路可以不用伪元素,但是要附加标签要求内文的左右1px边框足够大。这时候需要设置line-height:1px。由于内部整体足够大(超过父层级),可以使用绝对定位和transform:translateX(-50%)居中具体实现如下html结构为我是分界线css样式是.title{position:relative;文本对齐:居中;字体大小:14px;颜色:#999;overflow:隐藏;padding:.6em0;/**放高**/}.inner{position:absolute;左:50%;转换:translateX(-50%);空白:nowrap;行高:1px;border-left:9999pxsolid#ccc;border-right:9999pxsolid#ccc;padding:010px;}CSSdivider(border+transform)6.伪元素+border+left/right这种思路只需要一个伪元素,在文本内部生成一个伪元素,使用足够大的边框和同样的负值(绝对定位+左/右)恢复位置。具体实现如下。html结构为我是分割线css样式为.title{text-align:center;字体大小:14px;颜色:#999;溢出:隐藏;}.inner{位置:相对;填充:010px;}.inner::before{内容:'';位置:绝对;高度:1px;顶部:50%;border-left:9999pxsolid#ccc;:-9999px;left:-9999px;}CSSdivider(伪元素+border+left/right)7.伪元素+table-cell的主要思路是给parent设置display:table,给parent设置display:table-cell伪元素。并设置足够大的宽度,实现如下html结构为我是分界线css样式是.title{display:table;字体大小:14px;颜色:#999;}.inner{显示:表格单元格;空白:nowrap;padding:010px;}.title::before,.title::after{content:'';显示:表格单元格;宽度:9999px;溢出:隐藏;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;颜色:#999;边界:0;border-top:1pxsolid#ccc;填充:0;}.inner{边距:0自动;;padding:010px;}CSSdivider(fieldset+legend)总结上面一共列举了8种实现分隔线效果的方法,也许这就是CSS和其他语言的区别吧~我这里整理了一下,整体效果如下,大家可以访问这里查看,实际项目中可以选择自己需要的方法,可能还有其他的方法你有没有想到,欢迎大家脑洞大开,下方留言讨论原文链接