Androidでborder-radiusが効かなくなる現象に遭遇したので、原因と対応方法をメモしておきます。
サンプルコード
不具合の発生したコードです。
.boxにoverflow: hidden;とborder-radiusを指定してマスクを行い、中のimgをposition: absoluteで位置を動かしています。
HTML
<div class="box"> <img src="image.jpg" width="240" height="180" alt="" /> </div>
CSS
.box {
position: relative;
width: 100px;
height: 100px;
overflow: hidden;
margin: 50px auto;
border-radius: 50px;
}
.box img {
position: absolute;
top: -40px;
left: -70px;
}
これをAndroid2.3で確認すると、overflow: hidden;は効いているのですが、角丸が取れていました。
対応前のデモページ
imgのposition: absolute;が原因かと思い、一旦外してみました。
CSS
.box {
position: relative;
width: 100px;
height: 100px;
overflow: hidden;
margin: 50px auto;
border-radius: 50px;
}
.box img {
/* position: absolute;
top: -40px;
left: -70px;*/
}
これで確認してみましたが、最初と状態は変わりませんでした。
position: absolute;を外したデモページ
次に.boxのposition: relative;を外してみました。
CSS
.box {
/* position: relative;*/
width: 100px;
height: 100px;
overflow: hidden;
margin: 50px auto;
border-radius: 50px;
}
これで確認してみると、角丸が適用された状態になっていました。
position: relative;を外したデモページ
overflow: hidden; + border-radius + position: relative; で角丸が取れてしまうようです。
今回は中のimgの位置をずらしたかったので、positionの代わりにtransform: translate();を使用してみます。
CSS
.box {
width: 100px;
height: 100px;
overflow: hidden;
margin: 50px auto;
border-radius: 50px;
}
.box img {
-webkit-transform: translate(-70px, -40px);
transform: translate(-70px, -40px);
}
これで問題ないかと思ったのですが、確認してみると角丸が取れてしまっていました。
transform: translate();で位置をずらすデモページ
overflow: hidden; + border-radius と中の要素にtransform: translate()を指定した場合にも、角丸が取れてしまうようです。
最終的に、marginで位置をずらして対応しました。
CSS
.box {
width: 100px;
height: 100px;
overflow: hidden;
margin: 50px auto;
border-radius: 50px;
}
.box img {
margin: -40px 0 0 -70px;
}
【参考サイト】
コメントが承認されるまで時間がかかります。