產生緣由
由於Retine屏的分辨率始終是普通屏幕的2倍,1px的邊框在devicePixelRatio=2的retina屏下會顯示成2px,因此在高清瓶下看着1px老是感受變胖了ios
解決之道
1.在ios8+中當devicePixelRatio=2的時候使用0.5px
div{ border:1px solid #000; } @media (-webkit-min-device-pixel-ratio: 2) { div{ border:0.5px solid #000; } }
2. transform: scale(0.5)
//下面是經過僞類實現的1px線條 .onePxHei(@borColor:#efefef,@borPx:1px){ &:after{ position: absolute; bottom: -1px; left: 0; width: 100%; height: 2px; -webkit-transform: scale(1,.5); transform: scale(1,.5); -webkit-transform-origin: 0 0; transform-origin: 0 0; content: ''; background-color: @borColor; } }
本人用的是less,這是mixinweb
缺點:圓角沒法實現,實現4條邊框比較麻煩less
3.使用background-image
//經過background實現的1px,設置到dom自己,不會繪製padding和margin區域 .onePxBottomByBg(@borColor:#efefef,@borPx:1px){ background-image: -webkit-linear-gradient(top, @borColor, @borColor 50%, transparent 50%); background-image: linear-gradient(180deg, @borColor, @borColor 50%, transparent 50%); background-size: 120% @borPx; background-repeat: no-repeat; background-position: bottom left; background-origin: content-box; }
優勢:基本全部場景都能知足,包含圓角的button,單條,多條線 dom
缺點:大量使用漸變可能致使性能瓶頸性能
總結:建議background-image+transform: scale(0.5)配合使用,優先使用縮放spa