CSS3プロパティの操作transform: scale
、興味深い問題が見つかりました。写真に少しズーム効果を加えたかった。しかし、親divに使用したときはoverflow: 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のコメントを参照してください。
ラップ要素のtransform: translateZ(0);
が私にとってはうまくいきました。
この手法の詳細については、 translateZ(0)に対するCSSのパフォーマンス を参照してください。
この発行者を解決する両方の方法がうまくいきました:
次の行を親ラッパーに追加します(_z-index: 0
_はイメージ自体には必要ありません):_position: relative; z-index: 10
_
または、transform: translateZ(0);
を親ラッパーに追加します(ブラウザのサポートを改善するために対応するプレフィックスを付けます)
これは、合成レイヤーが親レイヤーによってクリップされないために発生します。そのため、時々_overflow:hidden
_を持つ親を独自の合成レイヤーに持ってくる必要があるので、_overflow:hidden
_を正しく適用できます。
そのため、変換された要素の親要素にCSSプロパティtransform: translateZ(0)
を追加する必要があります。
_/* 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
_が機能します。
最新のSafariおよびChrome iOSおよびiOS以外のデバイスでテスト済み
奇妙なことに、Chrome 65にアップグレードし、will-change: transform;
IFRAMEスタイルにトリックを行いました。
ソリューション です。
HTML:
<div class="wrap">
<div class="image"></div>
</div>
CSS:
.wrap{
width: 400px;
height: 260px;
overflow: hidden;
border-radius: 15px;
border:1px solid transparent;
}
div.image{
background: url(http://blog.dothegreenthing.com/wp-content/uploads/2012/10/take-a-smile.jpg) no-repeat;
width: 400px;
height: 260px;
}
div.image:hover{
-webkit-transform: scale(1.2, 1.2);
transform: scale(1.2, 1.2);
cursor: pointer;
border:1px solid transparent;
}
Chromeでは、ボックスを囲む透明なborder
が必要です。お役に立てれば。
私の英語が下手でごめんなさい。
ページに配置された要素がない場合、コンテナ要素と子要素の両方のz-index属性を設定する必要はありません。
z-index:0(または他の)属性をコンテナ要素に追加するだけです。
.container {
border-radius: .14rem;
overflow: hidden;
z-index: 0;
}
.child {
}
Chrome 65の最新バージョンでも同様の問題が発生しました。div内のtransform:scale()および最新のChromeバージョンでは、オーバーフローが発生した場合でも、側面がマスクされなくなり、親コンテナから飛び出していました。
TranslateZはある程度役に立ちましたが、親でtranslateXを使用したときのみ、代わりに幅を適切にマスクしました:
transform:translateX(0);
私はこれを長い間続けてきましたが、私のために働いたのはこの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);
}
回転なしでは、修正は私の側では機能しません。
[〜#〜] any [〜#〜] img parent(画像がある場所でコンテナを回転させるなど)に変換を追加する場合、たとえば、要素に同じ修正を追加する必要があります
.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);
}
このバグは、マスクがスケーリングされたときにWebkitブラウザー(SafariおよびChrome)に存在します。その後、上記のすべての回避策は機能しません。ただし、非標準のcssプロパティを使用して -webkit-mask-box-image は、スケーリングされたマスクにも役立ちます。