CSS3 のプロパティtransform: scale
を操作していると、興味深い問題が見つかりました。写真に少しズーム効果を加えたかったのです。しかし、親 divoverflow: hidden
とを使用するとborder-radius
、子 div が親 div を超えて拡張されました。
アップデート:
問題は解決していません。を追加transition
しても、まだ機能しません。この問題を解決しようとしましたが、成功しませんでした。
ここにデモがあります
CSS3 のプロパティtransform: scale
を操作していると、興味深い問題が見つかりました。写真に少しズーム効果を加えたかったのです。しかし、親 divoverflow: hidden
とを使用するとborder-radius
、子 div が親 div を超えて拡張されました。
アップデート:
問題は解決していません。を追加transition
しても、まだ機能しません。この問題を解決しようとしましたが、成功しませんでした。
ここにデモがあります
透明な境界線は機能しませんでしたが、.wrap div と画像の z-index を変更すると機能しました (私の場合、画像は実際にはビデオです)。
CSSは次のとおりです。
.videoContainer{
overflow: hidden;
z-index: 10;
}
video{
margin-left: -55%;
transform: scale(-1,1);
-webkit-transform: scale(-1,1);
-moz-transform: scale(-1,1);
z-index: 0;
}
注: z-index を適切に機能させるために要素を配置する必要性については、以下の Jake Blues のコメントを参照してください。
この発行者を解決する両方の方法がうまくいきました。
次の行を親ラッパーに追加します (z-index: 0
イメージ自体には必要ありません)。position: relative; z-index: 10
または、親ラッパーに追加transform: translateZ(0);
します (ブラウザーのサポートを向上させるための対応するプレフィックスを使用)
これは、合成されたレイヤーが親レイヤーによってクリッピングされていないために発生します。そのため、正しく適用できるように、親をoverflow:hidden
独自の合成レイヤーに移動する必要がある場合があります。overflow:hidden
transform: translateZ(0)
したがって、変換された要素の親要素にCSS プロパティを追加する必要があります。
/* add to parent so it is composited on its own layer before rendering */
.parent-of-transformed-element {
-webkit-transform:translateZ(0);
transform:translateZ(0);
}
次にoverflow:hidden
、変換された要素を、変換された子のように独自のレンダリング レイヤーに合成することで機能します。
iOS および非 iOS デバイスの最新の Safari および Chrome でテスト済み
下手な英語でごめんなさい。
ページに要素が配置されていない場合、コンテナー要素と子要素の z-index 属性の両方を設定する必要はありません。
z-index: 0(またはその他) 属性をコンテナ要素に追加するだけです。
.container {
border-radius: .14rem;
overflow: hidden;
z-index: 0;
}
.child {
}
マスクがスケーリングされている場合、バグは Webkit ブラウザー (iOS の Safari および Chrome) にまだ存在します。そして、上記の回避策はすべて機能しません。ただし、非標準の css プロパティ-webkit-mask-box-imageを使用すると、スケーリングされたマスクにも役立ちます。
Chrome ビルド 78.0.3904.87 で、親要素will-change: transform
でborder: 1px solid transparent
,を試した後、transform: translateZ(0)
成功しなかったため、border-radius
を 50% から 49% に減らすことで問題を解決できました。border-radius: 50%
特殊なケースのようです。
だから私の実用的な解決策は次のとおりです。
.parent {
z-index: 1;
position: absolute;
overflow: hidden;
border-radius: 49%;
}
.child {
z-index: 0;
position: absolute;
}
私は長い間これを求めてきましたが、私のために働いたのはこれだけrotate(0.1deg) translateZ(0)
です。したがって、要素をスケーリングしている場合
.something:hover img{
-webkit-transform: scale(1.1) rotate(0.1deg) translateZ(0);
-moz-transform: scale(1.1) rotate(0.1deg) translateZ(0);
-o-transform: scale(1.1) rotate(0.1deg) translateZ(0);
transform: scale(1.1) rotate(0.1deg) translateZ(0);
}
回転しないと、私の側では修正が機能しません。
任意のimg親に変換を追加する場合(画像があるコンテナーを回転させるなど)、たとえば要素に同じ修正を追加する必要があります。
.something_parent{
transform: translate(-9%,9%) rotate(0.1deg) translateZ(0);
-webkit-transform: translate(-9%,9%) rotate(0.1deg) translateZ(0);
-mos-transform: translate(-9%,9%) rotate(0.1deg) translateZ(0);
-o-transform: translate(-9%,9%) rotate(0.1deg) translateZ(0);
}