移动端与border-radius有关的bug

简介:

1. Andriod 4.2.x下明明设置了border-radius,但是背景色会溢出

  • 代码和效果如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
        .demo {
            width: 200px;
            height: 40px;
            border: 1px solid #000;
            background: pink;
            border-radius: 20px;
            overflow: hidden;
           color: #36e;
        }
        </style>
    </head>
    <body>
        <div class="demo">test</div>
    </body>
    </html>
    
  • 想要实现的效果:

border-radius没有bug的效果

  • 但是,在部分的机型下,如图:

border-radius有bug的效果

  • 说明: 
    背景颜色就溢出了,但是border还是正常实现的。用了overflow: hidden;都不行。

  • 解决办法:

     -webkit-background-clip: padding-box;
             background-clip: padding-box;
    
  • 原理

    background-clip是指背景的显示区域。

  • 可能的值:

    border-box(默认):背景延伸到边框外沿。 
    padding-box:背景延伸到内边距外沿。 
    content-box:背景裁剪到内容区外沿。 
    inherit

    在这个例子中,溢出部分属于边框以外,需要显示的部分则是边框以内,所以用的是background-clip: padding-box;这个属性。

  • background-clip兼容性

    具体请看:http://caniuse.com/#search=background-clip

2. transform子元素在overflow: hidden;父元素下依旧会溢出

  • 情景:

    这个问题不再是兼容性问题,正常的浏览器都能看见。 
    最近在做一个弹幕,container是用border-radius的,里面的文字元素是通过transform来实现平移。 
    但是问题来了:通过transform来平移的文字元素会显示在border-radius以外的地方,设置了overflow: hidden;也不行,背景颜色和其它都是正常的。

  • 可以明显看出来,transform的元素的父元素使用了overflow: hidden;依旧还是无效,字体依旧溢出。

  • 解决办法:

    很简单,只要在父元素加一段css即可:

    -webkit-mask-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAACklEQVQI12NgAAAAAgAB4iG8MwAAAABJRU5ErkJggg==');
    

    这是一张1px的纯黑色图,具体请看下面的原理。

  • 代码和效果:

  • 原理

    -webkit-mask-image: url('')会在图片中读取透明信息。(透明:没有,黑色:透明,白色:不透明,其它:介于两者之间)

    -webkit-mask-image: url('')作用于当前元素的background。transform作用的是子元素,和父元素没有关系,自然就被遮盖了。

  • mask兼容性

    它不是标准,需要加-webkit-前缀。如果有更多的发现,欢迎补充。 
    具体请看:http://caniuse.com/#search=mask

目录
相关文章
|
6月前
|
前端开发
解决适配375像素宽度667像素高度移动端方法:推荐一款非常好用的px转rem单位的VSCode插件px to rem & rpx (cssrem)
解决适配375像素宽度667像素高度移动端方法:推荐一款非常好用的px转rem单位的VSCode插件px to rem & rpx (cssrem)
|
3月前
|
前端开发 JavaScript Serverless
揭秘CSS布局神器:vw/vh、rem、%与px大PK,掌握它们,让你的网页设计秒变高大上,面试难题迎刃而解!
【8月更文挑战第4天】在Web开发中,合理选择CSS单位对响应式布局至关重要。本文探索viewport单位(vw/vh)、rem、百分比(%)及像素(px)的基础知识与应用场景。通过代码示例,展示如何运用这些单位实现全屏布局、尺寸比例调整、灵活的元素大小及固定尺寸。最后,模拟面试题,介绍如何仅用CSS实现一个元素的高度为其宽度两倍且响应视口变化的方法。
258 8
|
前端开发 JavaScript
6种解决移动端1px的方案
6种解决移动端1px的方案
177 0
|
前端开发
border-radius 兼容 IE8浏览器
border-radius 兼容 IE8浏览器
88 1
|
6月前
|
前端开发
移动端1px的解决方案
移动端1px的解决方案
198 0
|
前端开发
css:移动端实现1px、0.5px的细线
css:移动端实现1px、0.5px的细线
129 0
css:移动端实现1px、0.5px的细线
|
Web App开发 移动开发 前端开发
关于 Safari 100vh 的问题与解决方案
关于 Safari 100vh 的问题与解决方案
1579 0
关于 Safari 100vh 的问题与解决方案
|
前端开发
前端项目实战133-前端box-sizing的border-sizing模式案例
前端项目实战133-前端box-sizing的border-sizing模式案例
80 0
|
前端开发 iOS开发 Android开发
移动端 Retina屏border实现0.5px
首先来看一下造成Retina边框变粗的原因 其实这个原因很简单,因为css中的1px并不等于移动设备的1px,这些由于不同的手机有不同的像素密度。在window对象中有一个devicePixelRatio属性,他可以反应css中的像素与设备的像素比。
1593 0