1. 程式人生 > >border-radius 移動之傷

border-radius 移動之傷

border-radius我相信對於老一輩的前端們有著特殊的感情,在經歷了沒有圓角的蠻荒時代,到如今 CSS3 遍地開花,我們還是很幸福的。然而即使到了三星大臉流行時代,border-radius在移動端的表現依舊差強人意,主要有兩點問題:

Android 2.3 自帶瀏覽器不支援 %

通常我們實現一個正圓只需要border-radius: 50%即可,大致程式碼如下:

.foo {
    width: 100px;
    height: 100px;
    border-radius: 50%;
    border: 1px solid blue;
}

然而 Android 2.3 是不支援百分比的,要相容我們只能使用一個較大值,比如border-radius: 999px;

Android 及 Safari 低版本 img 圓角問題

當 img 元素有border 時設定border-radius 會導致圓角變形,需要在img 外面巢狀一個元素並設定border 和border-radius。Demo

Android 4.2.x 背景色溢位及不支援 border-radius 縮寫

測試發現,在 Android 4.2.x 系統自帶瀏覽器中,同時設定border-radius和背景色的時候,背景色會溢位到圓角以外部分,需要是使用background-clip: padding-box;來修復,但是如果border-color為半透明時,背景直角部分依然會露出來

Android 4.2.x 不支援border-radius縮寫

這個 BUG 在小米上測試並未發現,國外有人反映三星 Galaxy S4 中自帶瀏覽器不支援。解決方案就是使用border-radius的四個擴寫屬性,縮寫屬性放到最後。以上兩個問題影響到 Android 4.2.x 核心的系統以及在其基礎上定製的系統的自帶瀏覽器,比如:紅米,小米3,阿里雲OS 等,安卓版 Chrome 不受影響。
完整程式碼應該是這樣的:

.foo {
    width: 100px;
    height: 100px;
    border: 5px solid blue;
    border-top-left-radius: 999px; /* 左上角 */
    border-top-right-radius: 999px; /* 右上角 */
    border-bottom-right-radius: 999px; /* 右下角 */
    border-bottom-left-radius: 999px; /* 左下角 */
    border-radius: 999px;
    background-color: #ccc;
    background-clip: padding-box;
}

其他問題

  • IE9 中fieldset元素不支援border-radius。
  • IE9 中帶有背景漸變(gradient)的時候背景溢位。

感謝幽默的一絲分享:

原文連結:https://github.com/yisibl/blog/issues/2