2016-09-22 5 views
2

私はimgを持っています。上記から分かるようにトランスフォームのセンタリング:スケーリングされたイメージ

transform: scale(0.5); 

example

、結果は目に見えないマージン/パディング(半分のサイズを元の画像に等しい)画像の上部&左側に明らかであるようなものです。結果のimgをchrome開発ツールで調べると、マージンやパディングが明白でないことがわかります。私は前の画像のサイズがわかっている場合

、Iはposition: absoluteを設定し、コンテナDIVの中心にそれを配置するtop & right値をオフセットすることができます。ただし、これは動的な画像サイズでは機能しません。

画像サイズを事前に知る必要なしに、親div内でスケールされた画像の中心を合わせるにはどうすればよいですか?

codepenとはスニペット:

#container { 
 
    position: absolute; 
 
    top: 0; 
 
    bottom: 0; 
 
    left: 0; 
 
    right: 0; 
 
    margin: auto; 
 
    width: 300px; 
 
    height: 100px; 
 
    background: #AAA; 
 
} 
 
#image { 
 
    transform: scale(.5); 
 
}
<div id="page"> 
 
    <div id="container"> 
 
    <img id="image" src="//unsplash.it/500/160?image=10" /> 
 
    </div> 
 
</div>

期待される結果を、 #imageからmax-width: 100%追加

enter image description here

+0

変換し、 –

+0

をチェックを外し、 '常にスケール.5'ですか? –

+0

@NenadVracarはい –

答えて

2

規模が一定0.5ある場合は、50%左/右とtranslate(-100%, -100%)、幅使用することができますし、画像やコンテナの高さを動的にすることができ、これは動作します。

#container { 
 
    position: absolute; 
 
    top: 0; 
 
    bottom: 0; 
 
    left: 0; 
 
    right: 0; 
 
    margin: auto; 
 
    width: 300px; 
 
    height: 100px; 
 
    background: #AAA; 
 
} 
 
#image { 
 
    transform: scale(.5) translate(-100%, -100%); 
 
    position: absolute; 
 
    left: 50%; 
 
    top: 50%; 
 
}
<div id="page"> 
 
    <div id="container"> 
 
    <img id="image" src="//unsplash.it/500/160?image=10" /> 
 
    </div> 
 
</div>

0

は、容器内の画像を中心と思われます。

#container { 
 
    position:absolute; 
 
    top: 0; 
 
    bottom:0; 
 
    left: 0; 
 
    right:0; 
 
    margin: auto; 
 
    width: 300px; 
 
    height: 100px; 
 
    background: #AAA; 
 
} 
 

 
#image { 
 
    transform: scale(.5); 
 
    max-width: 100%; 
 
}
<div id="page"> 
 
    <div id="container"> 
 
    <img id="image" src="//unsplash.it/500/160?image=10" /> 
 
    </div> 
 
</div>

それをチェックアウトし、私はあなたのフィードバックを知ってみましょう。ありがとう!

+0

スニペットの編集に感謝します。何らかの理由でエディタがブラウザに表示されませんでした。予想される結果を含めるように質問を更新しました。あなたの答えはイメージを再び縮めるようです。 –

+0

'max-width:100%'を使うときは、コンテナの幅(それに対して固定の高さと幅を指定しています)に対して半分に縮小します。おそらく倍率を調整する必要があります。 .. – kukkuz

+1

スケーリングはコンテナではなく画像に対して行われます。元の画像の幅が500ピクセルの場合、結果の画像は250ピクセルになります。 –

0

あなたのimg要素はあなたのコンテナよりも大きいです。

使用;

max-width: 100%; 

;

transform-origin: 50% 50%; 
+0

これを試しましたが、 'max-width:100%'はイメージを縮小/縮小して表示します。 'transform-origin'がどのような効果を持っているのか不明です。予想される結果のスクリーンショットを質問に追加しました。 –

+0

コンテナの幅は300pxですか?あなたのイメージは同じです。その後、あなたは親コンテナの半分のスケール(.5)を使っています。したがって、画像は150ピクセル幅になります。 transform-originは、変換がどこで始まるべきかの効果を持ちます。 y-x値。左上または右下または中央中央など。ここをクリックしてください:https://css-tricks.com/almanac/properties/t/transform-origin/ –

+0

提供される画像は500幅です。変換:縮尺(0.5)にする250ピクセル - 150ピクセルではありません。 –

関連する問題