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);
}
View Code

问题:

在谷歌,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。 :)

posted @ 2020-11-06 09:48  以深  阅读(1154)  评论(0编辑  收藏  举报
TOP