這篇文章主要介紹了如何解決移動端1px邊框,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
專注于為中小企業(yè)提供成都做網(wǎng)站、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)武鄉(xiāng)免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
在移動端開發(fā)時(shí),經(jīng)常會遇到在視網(wǎng)膜屏幕中元素邊框變粗的問題。
1px 邊框問題的由來
蘋果 iPhone4 首次提出了 Retina Display(視網(wǎng)膜屏幕)的概念,在 iPhone4 使用的視網(wǎng)膜屏幕中,把 2x2 個(gè)像素當(dāng) 1 個(gè)物理像素使用,即使用 2x2 個(gè)像素顯示原來 1 個(gè)物理像素顯示的內(nèi)容,從而讓 UI 顯示更精致清晰,這 2x2 個(gè)像素叫做邏輯像素。像這種像素比(像素比(即dpr)= 物理像素 / 邏輯像素)為 2 的視網(wǎng)膜屏幕也被稱為二倍屏,目前市面上還有像素比更高的三倍屏、四倍屏。而 CSS 中 1px 指的是物理像素,因此,設(shè)置為 1px 的邊框在 dpr = 2 的視網(wǎng)膜屏幕中實(shí)際占用了 2 個(gè)邏輯像素的寬度,這就導(dǎo)致了界面邊框變粗的視覺體驗(yàn)。
使用 transform 解決
通過設(shè)置元素的 box-sizing 為 border-box,然后構(gòu)建偽元素,再使用 CSS3 的 transform 縮放,這是目前市面上最受推崇的解決方法。這種方法可以滿足所有的場景,而且修改靈活,唯一的缺陷是,對于已使用偽元素的元素要多嵌套一個(gè)無用元素。具體的實(shí)現(xiàn)如下:
.one-pixel-border { position: relative; box-sizing: border-box; } .one-pixel-border::before { display: block; content: ""; position: absolute; top: 50%; left: 50%; width: 200%; height: 200%; border: 1px solid red; transform: translate(-50%, -50%) scale(0.5, 0.5); }
這樣就可以得到 0.5px 的邊框。
還可以結(jié)合媒體查詢(@media)解決不同 dpr 值屏幕的邊框問題,如下:
@media screen and (-webkit-min-device-pixel-ratio: 2), (min-resolution: 2dppx) { ... } @media screen and (-webkit-min-device-pixel-ratio: 3), (min-resolution: 3dppx) { ... }
注意:IOS 系統(tǒng)的 safari 瀏覽器不支持標(biāo)準(zhǔn)的 min-resolution,使用非標(biāo)準(zhǔn)的 min-device-pixel-ratio。
使用 pixel-border.css 解決
pixel-border.css是一個(gè)解決移動端 1px 邊框的通用 CSS 工具。使用 transform 的解決方法,僅有幾行的源碼,使用起來非常方便,是目前發(fā)現(xiàn)最好的解決方法。
安裝
npm安裝:
npm install pixel-border --save
yarn安裝:
yarn add pixel-border
瀏覽器安裝,建議安裝壓縮后的版本:
使用
pixel-border 通過元素的 ::before 偽元素使用 transform 縮放為元素設(shè)置邊框。因此,你可以使用原生的 CSS 邊框?qū)傩詾樵卦O(shè)置邊框,只需要在元素上添加一個(gè) pixel-border 或 pixel-border="true" 的屬性,并設(shè)置元素的 border-style 值即可。如下會創(chuàng)建一個(gè)單像素邊框:
單像素邊框
注意:pixel-border已為元素的邊框設(shè)置為固定值 1px,因此不要為元素再設(shè)置 border-width,并且元素的 box-sizing 值被設(shè)置為 border-box,請不要重置為其他類型的值。
設(shè)置任意邊框:
設(shè)置元素某一邊的邊框時(shí),只需為元素設(shè)置 border-top-style、border-bottom-style、border-left-style、border-right-style 其中一項(xiàng)的值,并設(shè)置元素 border-color 的值即可。如下設(shè)置上邊邊框:
上邊框
設(shè)置圓角邊框:
當(dāng)需要圓角邊框時(shí),始終為 border-radius 設(shè)置百分比值。如下:
圓角邊框
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何解決移動端1px邊框”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!