iPhone浏览器 border-radius 失效
起因:想实现下面这样的效果的。
思路:
父div圆角,超出隐藏。
子div文字变色,箭头变色延迟 0.25s 。
父元素添加伪类,优化背景过度效果。
代码:
html
<div class="index-button"> <a href="javascript:;"> <h2>REQUEST A QUOTE!</h2> <span> <i class="fas fa-angle-right" aria-hidden="true"></i> </span> </a> </div>
css
.index-button{ border-radius: 30px; border: solid 2px #555559; font-size: 18px; font-weight: bold; font-stretch: normal; width: 100%; max-width: 300px; overflow: hidden; position: relative; padding: 15px 0 17px; /*-webkit-backface-visibility: hidden; -moz-backface-visibility: hidden; -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); 改进*/ } .index-button h2{ background-color: inherit; color: #545559; letter-spacing: .7px; font-size: 18px; margin: 0; padding: 0; padding-left: 27px; } .index-button:hover{ border: solid 2px #fea400; } .index-button:hover h2{ color: #fff; } .index-button span{ position: absolute; height: 100%; width: 59px; top:0; right: -3px; border-radius: 50%; background-color: #555559; color: #fff; text-align: center; line-height: 53px; transition: all .5s .25s; } .index-button:hover span{ color:#fea400; background-color: #fff; } .index-button:before, .index-button:after { content: ''; position: absolute; z-index: -1; left: 100%; top: 0; width: 100%; height: 100%; background: #fea400; transition: all .5s; -webkit-transform: skew(30deg) translate3d(0, 0, 0); -moz-transform: skew(30deg) translate3d(0, 0, 0); -ms-transform: skew(30deg) translate3d(0, 0, 0); -o-transform: skew(30deg) translate3d(0, 0, 0); -webkit-transform-origin: 0 0; -ms-transform-origin: 0 0; transform-origin: 0 0; opacity: 0; -moz-opacity: 0; filter: alpha(opacity=0); } .index-button:before { left: auto; right: 100%; -webkit-transform: skew(-30deg) translate3d(0, 0, 0); -moz-transform: skew(-30deg) translate3d(0, 0, 0); -ms-transform: skew(-30deg) translate3d(0, 0, 0); -o-transform: skew(-30deg) translate3d(0, 0, 0); } .index-button:hover:before { -webkit-transform: skew(-30deg) translate3d(70%, 0, 0); -moz-transform: skew(-30deg) translate3d(70%, 0, 0); -ms-transform: skew(-30deg) translate3d(70%, 0, 0); -o-transform: skew(-30deg) translate3d(70%, 0, 0); opacity: 1; -moz-opacity: 1; filter: alpha(opacity=100); } .index-button:hover:after { -webkit-transform: skew(30deg) translate3d(-70%, 0, 0); -moz-transform: skew(30deg) translate3d(-70%, 0, 0); -ms-transform: skew(30deg) translate3d(-70%, 0, 0); -o-transform: skew(30deg) translate3d(-70%, 0, 0); opacity: 1; -moz-opacity: 1; filter: alpha(opacity=100); }
问题:
在谷歌,360等浏览器上面测试都没问题。但是在iphone上面测试,发现父元素本身的圆角属性是在的,但是鼠标hover上去后发现,如下效果:
虽然设置了 overflow: hidden属性,但是伪元素只把div之外的隐藏掉了,圆角属性并没有得到。
解决:
搜了问题之后,发现是因为transform动画,导致的safari显示出问题,给到的解决办法是:
给父元素(伪类遮罩父级)加上一些属性
.index-button{
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
}
backface-visibility:hidden; 表示元素翻转后消失,我也不知道为什么要写这样 ,不过只要解决了就OK。 :)