百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>CSS教程> border-radius 应用了 transform 的子元素 overflow:hidden 失败
分享文章到:

border-radius 应用了 transform 的子元素 overflow:hidden 失败

发布时间:01/15 来源: 浏览: 关键词:
最近在一个 Webkit 浏览器下对于应用了 transform 的子元素 overflow:hidden 失效的bug,使用了 css3 的 border-radius,本文就这个bug来分析一下。

在一个应用了 border-radius 的圆角元素上,加上 overflow:hidden。子元素铺满。对于子元素超出圆角的部分可以被隐藏掉。形成一个圆角头像容器的结构。代码如下:

HTML

<div id="wrapper">
    <div id="box"></div>
</div>


CSS

#wrapper {
    position: absolute;
    width: 200px;
    height: 200px;
    overflow: hidden;
    border-radius: 50%;
    background-color: #ccc;
    background-clip: padding-box;
}
#box {
    position :relative;
    width: 100%;
    height: 100%;
    background-color: #cde;
    -webkit-transition:all 0.5s ease;
    transition:all 0.5s ease;
}


enter image description here

此时想在 #wrapper 容器内做一个画廊轮播的效果。对 #box 应用一个 transform 变化,使用 translate3d 对其进行横向偏移。会发现 #box 溢出了 #wrapper 的圆角范围。overfow:hidden; 失效。

#box.has-translate {
    -webkit-transform:translate3d(100px,0,0);
    transform:translate3d(100px,0,0);
}


transform 圆角溢出

transform 圆角溢出



解决方法


上 Stackoverflow 搜索一番。确实有这个 BUG 存在。找到的解决方案是可以使用 -weibkit-mask-image 覆盖掉圆角部分。-webkit-mask-image 可以使用图片、Gradient 渐变或者 SVG mask 作为元素的 mask 遮罩。在 WebKit 的兼容性还算可以。

mask-image
mask-image(图片来源于 CSS遮罩 ? w3cplus )

回到刚才的例子。这里使用了一个纯黑色的 1px png 图像。应用 mask 遮罩后,就留下了#wrapper的实际内容区,没有受BUG影响。

#wrapper.has-mask-image{
    -webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);
}

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有9人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板