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

超细边框(1px边框)实现方法

时间:2023-03-30 17:05:31 CSS

移动网页开发遇到的问题:UI稿要求设置边框为1px,css设置边框:1pxsolid#eee;之后,UI说边框太粗了。这是由于devicePixelRatio功能。css设置的1px是css像素,UI稿是指device像素,它们之间存在一个比例关系,即devicePixelRatio。iPhone的devicePixelRatio==2,而border-width:1px描述的是CSS像素,所以border放大到2px的物理像素显示,在iPhone上显得更粗。像素基本概念(术语)设备像素/物理像素(settingpixel、physicalpixel、hardwarepixel):显示器中最小的物理单位。当移动设备出厂时,不同的设备带有不同的像素,每个像素根据操作系统的指令设置自己的颜色和亮度。density-independentpixel(DIP)(device-independentpixel或density-independentpixel):可以认为是计算机坐标系中的一个点,代表一个可以被程序使用的虚拟像素,然后转换成一个相关系统的物理像素。CSS像素(csspixel):浏览器用来在网页上精确一致地绘制内容的抽象单位。通常,CSS像素称为设备无关像素(DIP)。devicePixelRatio(设备像素比):物理像素和逻辑像素的比例关系,通常可以通过js的window.devicePixelRatio获取。devicePixelRatio可用于区分视网膜设备和非视网膜设备。devicePixelRatio值为1的屏幕称为标准屏幕(也称为非视网膜屏幕);目前大部分移动设备都是高清屏(也叫视网膜屏),即devicePixelRatio值大于1的屏幕。对于苹果设备来说,我们经常听到Retina屏幕(retinascreen),其中iPhone6/6s/7的devicePixelRatio值为2;而iPhone6plus/6splus/7plus的devicePixelRatio值为3。设置0.5px的边框优点:实现简单缺点:retina屏幕的浏览器可能无法识别0.5px的边框,会解释为0px,无边界。这包括iOS7及更早版本、OSXMavericks及更早版本以及Android设备。//判断手机是否支持0.5pxif(window.devicePixelRatio&&devicePixelRatio>=2){vardivElem=document.createElement('div')divElem.style.border='.5pxsolidtransparent'document.body.appendChild(divElem)if(divElem.offsetHeight==1){document.querySelector('html').classList.add('hairlines');}document.body.removeChild(divElem);}//在html中,添加这个样式。细线{*:not(tabletrtd),*:not(.noHairlines){border-width:0.5px!important;}}box-shadow(阴影)优点:可以设置圆角缺点:颜色不好控制。border-1px{box-shadow:01px1px-1pxrgba(0,0,0,0.5);}border-image(边框背景图)使用的图片是2px高,上面1px颜色透明,lower1px使用视觉指定边框的颜色。优点:缺点:修改颜色比较麻烦,需要更换图片;圆角需要特殊处理,边缘会模糊。.border-image-1px{border-width:1px0px;border-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAECAYAAABP2FU6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7ACTzLYwaC5EAEGc0AMMnn3AEC2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73Vwn??UCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAcSURBVHjaBMEBDQAADMMgckv1r20H1WxzoNoPAER9BjAKc4kUAAAAAElFTkSuQmCC")20stretch;}background-imagegradient的缺点:无法实现圆角.border-1px{背景图像:线性渐变(180度,红色,红色50%,透明50%),线性渐变(270度,红色,红色50%,透明50%),线性渐变(0度,红色,red50%,transparent50%),linear-gradient(90deg,red,red50%,transparent50%);背景大小:100%1px,1px100%,100%1px,1px100%;背景重复:不重复;background-position:top,righttop,bottom,lefttop;padding:10px;}transform:scale(0.5)(推荐,相当灵活)/*height:1px,然后根据媒体查询设置transform:scaleY(0.5)*/.border-1px{height:1px;背景:#000;变换:scaleY(0.5);变换原点:00;overflow:hidden;}/*pseudo-classes::afterand::befor,设置border-bottom:1pxsolid#000,然后缩放变换:scaleY(0.5),可以满足两条边框的需要*/.border-1px:after,.border-1px::after{内容:'';宽度:100%;border-bottom:1pxsolid#000;transform:scaleY(0.5);}/*伪类::设置边框后:1pxsolid#000;宽度:200%;height:200%,然后缩放scale(0.5);优点是可以实现圆角,缺点是按钮加了一个ctive比较麻烦*/.border-1px:after,.border-1px::after{content:'';宽度:200%;高度:200%;位置:绝对;顶部:0;左:0;边框:1px实心#bfbfbf;边界半径:4px;变换:比例(0.5,0.5);transform-origin:topleft;}viewport+rem优点:可以适配各种已知的手机屏幕,没有其他方法变色困难和圆角阴影失败。缺点:样式必须以rem为单位varviewport=document.querySelector("meta[name=viewport]");//下面是根据设备像素设置viewportif(window.devicePixelRatio==1){viewport.setAttribute('content','width=device-width,initial-scale=1,maximum-scale=1,最小规模=1,用户可扩展=no');}if(window.devicePixelRatio==2){viewport.setAttribute('content','width=device-width,initial-scale=0.5,maximum-scale=0.5,minimum-scale=0.5,user-scalable=no');}如果(window.devicePixelRatio==3){视口。setAttribute('content','width=device-width,initial-scale=0.333333333333333,maximum-scale=0.3333333333333333,minimum-scale=0.3333333333333333,user-scalable=no');10*(docEl.clientWidth/320)+'px';docEl.style.fontSize=字体大小;常见问题细边框未完全显示原因:未确定。可能跟元素的高度,线的高度,像素的小点有关。解决方法:上边框被覆盖:如果样式中有position:absolute;尽量不要使用display:inline-block,改用display:block。将0.5px更改为0.7px。指定高度,行高(例如:line-height:normal)。参考链接手机网页1像素边框看看大公司是怎么做的