1px解决方案

1px解决方案
  1. 移动端中,如果给元素设置一个像素的边框的话,那么在手机上看起来是会比一个像素粗的。

解决方法:使用伪类元素模拟边框,使用transform缩放

.button{    height: 36px;    line-height: 36px;    font-size: 14px;    padding: 0px;    margin: 0px;    padding-left: 16px;    padding-right: 16px;    background-color: white;    border: none;    outline: none;    box-sizing: border-box;    border-radius: 5px;    position: relative;    -webkit-user-select: none;    -ms-user-select: none;    -moz-user-select: none;    text-decoration: none;    display: block;}.button:after{    content: '';    z-index: 1;    position: absolute;    border: 1px solid rgba(0,0,0,0.23);    pointer-events: none;    box-sizing: border-box;    transform-origin: 0 0;    transform: scale(calc(1/1));    top: 0px;    left: 0px;    width: calc(100% * 1);    height: calc(100% * 1);    border-radius: calc(5px * 1);    transition: all ease-in-out 150ms;    background-color: rgba(0,0,0,0);}.button:active:after{    background-color: rgba(0,0,0,0.1);}.button.button-blue{    background-color: #3F51B5;    color: white;}.button.button-blue:active:after{    background-color: rgba(0,0,0,0.15);}@media screen and (-webkit-min-device-pixel-ratio: 2){    .button:after    {        border-radius: calc(5px * 2);        width: calc(100% * 2);        height: calc(100% * 2);        transform: scale(calc(1/2));    }}@media screen and (-webkit-min-device-pixel-ratio: 3){    .button:after    {        border-radius: calc(5px * 3);        width: calc(100% * 3);        height: calc(100% * 3);        transform: scale(calc(1/3));    }}@media screen and (-webkit-min-device-pixel-ratio: 4){    .button:after    {        border-radius: calc(5px * 4);        width: calc(100% * 4);        height: calc(100% * 4);        transform: scale(calc(1/4));    }}
  1. 对于老项目伪类+transform

原理是把原先元素的 border 去掉,然后利用 :before 或者 :after 重做 border ,并 transform 的 scale 缩小一半,原先的元素相对定位,新做的 border 绝对定位。单条border样式设置:优点:所有场景都能满足,支持圆角(伪类和本体类都需要加border-radius)缺点:对于已经使用伪类的元素(例如clearfix),可能需要多层嵌套

.scale-1px{ position: relative; border:none; }    .scale-1px:after{    content: '';    position: absolute; bottom: 0;    background: #000;    width: 100%; height: 1px;    -webkit-transform: scaleY(0.5);    transform: scaleY(0.5);     -webkit-transform-origin: 0 0;    transform-origin: 0 0;}
  1. viewport + rem 实现

这种兼容方案相对比较完美,适合新的项目,老的项目修改成本过大。

HTML:<div class="border-1px"></div>CSS:.border-1px {    position: relative;}.border-1px:after {    position: absolute;    content: "";    top: -50%;    bottom: -50%;    left: -50%;    right: -50%;    -webkit-transform: scale(0.5);    transform: scale(0.5);    border-top: 1px solid #666;}@media (-webkit-min-device-pixel-radio: 3), (min-device-pixel-radio: 3) {    border-1px::after {        -webkit-transform: scaleY(0.33333333);        transform: scaleY(0.33333333);    }}@media (-webkit-min-device-pixel-radio: 2), (min-device-pixel-radio: 2) {    border-1px::after {        -webkit-transform: scaleY(0.5);        transform: scaleY(0.5);    }}

优点:所有场景都能满足,一套代码,可以兼容基本所有布局缺点:老项目修改代价过大,只适用于新项目

  1. 使用box-shadow模拟边框,利用css 对阴影处理的方式实现0.5px的效果

样式设置:

.box-shadow-1px {    box-shadow: inset 0px -1px 1px -1px #c8c7cc;}

优点:代码量少,可以满足所有场景缺点:边框有阴影,颜色变浅

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部