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

在一个应用了 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;
}

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

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

transform 圆角溢出

解决方法

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


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

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

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索应用
border radius 子元素、border radius、border radius兼容、css border radius、border radius 圆形,以便于您获取更多的相关知识。

时间: 2024-10-23 09:03:02

border-radius 应用了 transform 的子元素 overflow:hidden 失败如何解决的相关文章

子元素div高度不确定时父div高度如何自适应

每当进行页面布局时,我们都有这样的需求,就是当子元素div高度不确定时父div自适应高度,本文整理的多种方法可以解决此问题,感兴趣的朋友可以参考下   在最外层div加以下样式 height:100%; overflow:hidden; 其它方法: Div即父容器不根据内容自适应高度,我们看下面的代码:   复制代码 代码如下: <div id="main"> <div id="content"></div> </div&g

Transform 属性会导致子元素的 fixed 属性失效

在项目中,需要为顶部导航条增加滚动跟随效果.很显然,只需要为 #header 加上 position:fixed; 属性即可,但是加上之后却无效.只能用监测浏览器滚动距离然后实时的赋值到 top 属性来模拟跟随. 但是这种方法由于浏览器之间滚动的距离不同等缘故,会导致闪烁等问题,只在 Firefox 效果完美.同时会影响性能,在中低端安卓设备中效果很差.这种影响用户体验的事情,是肯定要避免的.还是得回来使用 fixed,但是从未发现过 fixed 失效的情况啊,只能挨个测试一下. 问题发现 先写

使用jquery选择器如何获取父级元素、同级元素、子元素_jquery

一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 复制代码 代码如下: <div id="par_div"><a id="href_fir" href="#">href_fir</a> <a id="href_sec" href="#">href_sec</a> <a id="href_thr&qu

IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素_javascript技巧

如下 1,两个div,d1中包含d2 2,d1,d2都设置了absolute或relative 3,隐藏d1 4,隐藏子元素d2 5,显示d1 这时IE6/7 and IE8/9/10(IE7模式)中会发现,子元素d2也能显示出了(别忘了,d2被display:none 了哦).但IE8/9/10/Firefox5/Safari4/Chrome12中子元素d2仍然是被隐藏的. 重现代码 复制代码 代码如下: <!DOCTYPE HTML> <HTML> <HEAD> &

jQuery搜索子元素的方法_jquery

本文实例讲述了jQuery搜索子元素的方法.分享给大家供大家参考.具体分析如下: 1. children()方法 用于获取一个包含匹配的元素集合中每一个元素的所有子元素的元素集合,语法格式如下: 复制代码 代码如下: children([selector]) $("#menu_ul").children().css("color", "blue"); 2. find()方法 用于从每个匹配元素中查找符合指定选择器表达式的后代元素,格式如下: 复制

css父元素与子元素之间的margin-top问题

父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化.   html代码: <div class="box1"> <div class="box2"></div> </div> css样式: .box1{height:200px;width:200px;background:gray;} .box2{heigh

子元素scroll父元素容器不跟随滚动JS实现

一.开场暖身 网上常见蹲来蹲去的小段子,比方说:"李代沫蹲,李代沫蹲,李代沫蹲完黄海波蹲:黄海波蹲,黄海波蹲,黄海波蹲完宁财神蹲:宁财神蹲,宁财神蹲,宁财神蹲完张耀扬蹲;张耀扬蹲,张耀扬蹲,张耀扬蹲完郭美美蹲;郭美美蹲,郭美美蹲,郭美美蹲完--".应该源自"萝卜蹲,萝卜蹲,萝卜蹲完苹果蹲--". 在网页中,滚动条的滚动行为也是类似的调调,如果页面出现多个内嵌滚动条,则行为表现是:子元素滚,子元素滚,子元素滚完父元素滚:父元素滚,父元素滚,父元素滚完容器滚-- 比方说

CSS技巧知识:子元素浮动后父容器的闭合

css|浮动|技巧 最近两个月断断续续做了好几个网站的美工,做的过程中对DIV+CSS的标准开发有了进一步的了解.有两点收获最大,一是彻底弄懂了CSS的盒子模式(Box Model),再一个就是搞定了困扰我很久的"闭合浮动元素"的问题: 一般说来如果某个子元素使用了浮动(float),那父元素总是不能确切地知道子元素是在什么位置结束的,所以父元素的下边框总是从子元素的中间甚至是顶部穿过,看起来很不舒服. 最早时我都是在子元素结束后单独加个<br />或<div>

WPF中如何查找数据模板中的子元素

前两天在写一个WPF程序时,突然发现DataGrid控件没有筛选功能,但我不急,因为我知道,WPF的好处在于UI与逻辑的分离,要给数据网格控件加上输入筛选功能并不复杂,也不用去找第六方控件了,直接从DataGrid类派生一个类,并重定义它的控件模板,在DataGrid原有的控件模板上加一个StackPanel就可以了,方向为水平排列,放在列标头的下方.然后在代码中根据各个列的情况,向那个StackPanel添加N个文本框就可以输入筛选信息了.呵呵,虽不算完美,解决燃眉之急还是可以的. 这样我就想