画像の縦横比を維持する方法【CSS object-fitの使い方】
CSSでdivの縦横比を維持する方法
padding-top を使用する方法
概要
この方法は、親要素の幅に対して padding-top
を指定することで、子要素の縦横比を維持する方法です。
メリット
- シンプルで分かりやすい
- 多くのブラウザで対応している
- 子要素の高さが固定されるため、レイアウトが崩れる可能性がある
コード例
<div class="parent">
<div class="child"></div>
</div>
.parent {
width: 100%;
}
.child {
padding-top: 56.25%; /* 縦横比 16:9 の場合 */
background-color: #ccc;
}
object-fit を使用する方法
この方法は、object-fit
プロパティを使用して、画像や動画などのコンテンツをどのように表示するかを指定する方法です。
- 簡単に縦横比を維持できる
- レスポンシブデザインにも対応しやすい
<div class="parent">
<img src="image.jpg" class="child" />
</div>
.parent {
width: 100%;
}
.child {
object-fit: contain;
}
position: absolute を使用する方法
この方法は、子要素を絶対配置にして、親要素の幅に対して高さを調整する方法です。
- 複雑なレイアウトにも対応できる
- コードが複雑になる
<div class="parent">
<div class="child"></div>
</div>
.parent {
width: 100%;
}
.child {
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 100%;
padding-top: 56.25%; /* 縦横比 16:9 の場合 */
background-color: #ccc;
}
calc() を使用する方法
この方法は、calc()
関数を使用して、子要素の幅と高さを動的に計算する方法です。
<div class="parent">
<div class="child"></div>
</div>
.parent {
width: 100%;
}
.child {
width: 100%;
height: calc(100vw * 9 / 16); /* 縦横比 16:9 の場合 */
background-color: #ccc;
}
padding-top を使用する方法
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>サンプルコード</title>
</head>
<body>
<div class="parent">
<div class="child"></div>
</div>
</body>
</html>
.parent {
width: 100%;
}
.child {
padding-top: 56.25%; /* 縦横比 16:9 の場合 */
background-color: #ccc;
}
object-fit を使用する方法
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>サンプルコード</title>
</head>
<body>
<div class="parent">
<img src="image.jpg" class="child" />
</div>
</body>
</html>
.parent {
width: 100%;
}
.child {
object-fit: contain;
}
position: absolute を使用する方法
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>サンプルコード</title>
</head>
<body>
<div class="parent">
<div class="child"></div>
</div>
</body>
</html>
.parent {
width: 100%;
}
.child {
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 100%;
padding-top: 56.25%; /* 縦横比 16:9 の場合 */
background-color: #ccc;
}
calc() を使用する方法
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>サンプルコード</title>
</head>
<body>
<div class="parent">
<div class="child"></div>
</div>
</body>
</html>
.parent {
width: 100%;
}
.child {
width: 100%;
height: calc(100vw * 9 / 16); /* 縦横比 16:9 の場合 */
background-color: #ccc;
}
max-width と max-height を使用する方法
この方法は、max-width
と max-height
プロパティを使用して、要素の最大幅と最大高さを指定する方法です。
<div class="parent">
<div class="child"></div>
</div>
.parent {
width: 100%;
}
.child {
max-width: 100%;
max-height: 100%;
background-color: #ccc;
}
min-width と min-height を使用する方法
- 要素の幅と高さが一定に保たれる
<div class="parent">
<div class="child"></div>
</div>
.parent {
width: 100%;
}
.child {
min-width: 100px;
min-height: 100px;
background-color: #ccc;
}
aspect-ratio プロパティを使用する方法
この方法は、aspect-ratio
プロパティを使用して、要素の縦横比を指定する方法です。
<div class="parent">
<div class="child"></div>
</div>
.parent {
width: 100%;
}
.child {
aspect-ratio: 16 / 9;
background-color: #ccc;
}
CSS Grid レイアウトを使用する方法
この方法は、CSS Grid レイアウトを使用して、要素をレイアウトする方法です。
<div class="parent">
<div class="child"></div>
</div>
.parent {
display: grid;
width: 100%;
}
.child {
grid-area: 1 / 1;
background-color: #ccc;
}
<div class="parent">
<div class="child"></div>
</div>
.parent {
display: flex;
width: 100%;
}
.child {
flex: 1 1 auto;
background-color: #ccc;
}
補足
上記で紹介した方法は、いずれも一長一短があります。どの方法を選択するかは、目的に合わせて検討する必要があります。
また、CSSの最新情報については、MDN Web Docsなどの参考資料を
html css responsive-design