在移動端有時1px的邊框會顯得很粗不美觀,淘寶、京東的觸屏均是採用淺細的線條來顯示在移動設備上。具體實現方法以下:web
普通的1px黑色實線邊框:code
border: 1px solid #000;
半像素邊框固然不是簡單地把1px
改成0.5px
(會被解析成1px
),border-width
的值只能是天然數orm
相似的,outline
, box-shadow
等等也沒有辦法畫出0.5px的細線it
常規思路是不可行的,咱們能夠用僞元素 + 縮放巧妙地實現,具體步驟以下:io
設置目標元素做爲定位參照form
.thinner-border { position: relative; /* 只要不是默認值static便可 */ }
給目標元素添加一個僞元素before或者after,並設置絕對定位class
.thinner-border:before { content: ''; position: absolute; }
給僞元素添上1px的邊框transform
border: 1px solid red;
設置僞元素的寬高爲目標元素的2倍webkit
width: 200%; height: 200%;
縮小0.5倍(變回目標元素的大小)淘寶
transform-origin: 0 0; transform: scale(0.5, 0.5);
把border包進來
box-sizing: border-box;
簡言之就是先放大再縮回來,border-box是關鍵,不然邊框不會一塊兒縮放
二.具體實現
上面已經分步驟寫得很清楚了,拼在一塊兒就是完整實現:
.thinner-border { position: relative; } .thinner-border:before { content: ''; position: absolute; width: 200%; height: 200%; border: 1px solid #000; -webkit-transform-origin: 0 0; -moz-transform-origin: 0 0; -ms-transform-origin: 0 0; -o-transform-origin: 0 0; transform-origin: 0 0; -webkit-transform: scale(0.5, 0.5); -ms-transform: scale(0.5, 0.5); -o-transform: scale(0.5, 0.5); transform: scale(0.5, 0.5); -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
功能是給class
值指定了thinner-border
的block
和inline-block
元素添上半像素的邊框,由於inline
元素的width
和heigh
t有一些限制,僞元素獲取到的200%
要比實際值小,邊框的寬高也會比指望的小。