ボタンをメインビジュアル下部中央に安定配置する方法
*注意
.main_visual の高さが常に一定(例:height: 100vh; や aspect-ratio で統一)なら、
従来の position: relative;(親)+position: absolute; bottom: XXpx; left: 50%; transform: translateX(-50%);(子)
の手法でも、ボタンを下部中央に安定して配置できます。
ポイント
1 親要素にflexboxとposition:relativeを使う
.main_visual に
display: flex;
justify-content: flex-end; /* 下寄せ */
flex-direction: column;
align-items: center; /* 中央寄せ */
→ 子要素(ボタン)が下部中央に配置される
2 ボタンの余白は%指定
.detail_btn {
position: absolute;
max-width: 240px;
width: auto;
bottom: 3%; /* 下からの余白を調整 */ }
→ 画面高さに応じて余白が自然に変化し、端末ごとのバランスが良くなる
3 レスポンシブ対応はメディアクエリで微調整も可能
→ 画面幅ごとに bottom: 3%; /* 下からの余白を調整。さらに細かく調整できる
■ メリット
画面サイズが変わってもボタン位置が安定
コードがシンプルで管理しやすい
余白の調整が容易
■ サンプルCSS
.main_visual {
position: relative;
width: 100%;
display: flex;
justify-content: flex-end; /* 下寄せ */
flex-direction: column;
align-items: center; /* 中央寄せ */
}
/*ボタン設定*/
.detail_btn {
position: absolute; /* absoluteを外す */
max-width: 240px;
width: auto;
bottom: 3%; /* 下からの余白を調整 */
z-index: 2;
}
.detail_btn_link {
display: flex;
justify-content: center;
align-items: center;
padding-block: min(2.27vw, 10px);
padding-inline: min(11.36vw, 50px);
font-size: min(5.45vw, 24px);
font-style: normal;
font-weight: bold;
letter-spacing: 10%;
border-radius: min(0.78vw, 6px);
transition: all 0.3s ease;
background-color: var(--btn-color);
color: var(--white--);
}
全体図
<div class="main_visual">
<picture>
<source media="(max-width: 1023px)" srcset="images/MV_sp.png" />
<source media="(max-width: 1440px)" srcset="images/MV_pc.png" />
<img src="images/MV_pc.png" alt="メインビジュアル" loading="lazy" />
</picture>
<div class="detail_btn">
<a href="#" class="detail_btn_link">詳細を見る</a>
</div>
</div>
css
.main_visual {
position: relative;
width: 100%;
display: flex;
justify-content: flex-end; /* 下寄せ */
flex-direction: column;
align-items: center; /* 中央寄せ */
}
/*ボタン設定*/
.detail_btn {
position: absolute;
max-width: 240px;
width: auto;
bottom: 3%; /* 下からの余白を調整 */
z-index: 2;
}
.detail_btn_link {
display: flex;
justify-content: center;
align-items: center;
padding-block: min(2.27vw, 10px);
padding-inline: min(11.36vw, 50px);
font-size: min(5.45vw, 24px);
font-style: normal;
font-weight: bold;
letter-spacing: 10%;
border-radius: min(0.78vw, 6px);
transition: all 0.3s ease;
background-color: var(--btn-color);
color: var(--white--);
}
@media screen and (min-width: 1023px) {
.main_visual {
width: 100%;
aspect-ratio: 2 / 1; /* 2:1の比率で1440pxなら720px */
max-height: 920px; /* 最大920pxに制限 */
overflow: hidden;
position: relative;
align-items: flex-start; /* 左寄せ */
}
.main_visual img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
display: block;
}
/*ボタン設定*/
.detail_btn {
position: static; /* absoluteを外す */
margin-top: -9%; /* bottomからの余白を調整 */
margin-left: 9%; /* 左右中央寄せ */
width: min(21.94vw, 316px) !important;
max-width: min(21.94vw, 316px) !important;
z-index: 2;
}
.detail_btn_link {
display: flex;
justify-content: center;
align-items: center;
padding-block: min(1.11vw, 16px);
padding-inline: min(3.47vw, 50px);
font-size: min(1.66vw, 24px);
font-style: normal;
font-weight: bold;
letter-spacing: 10%;
border-radius: min(0.78vw, 6px);
transition: all 0.3s ease;
background-color: var(--btn-color);
color: var(--white--);
}
.detail_btn:hover {
opacity: 0.8;
}
}
@media screen and (max-width: 300px) {
.main_visual {
height: 200px; /* 高さを縮小 */
}
.detail_btn {
min-width: 80px;
max-width: 90%;
bottom: -5%; /* 下からの余白を調整 */
}
.detail_btn_link {
font-size: clamp(8px, 4vw, 24px);
padding: 6px 8px;
}
/* 画像も縮小対応 */
.main_visual img {
height: 100%;
object-fit: cover;
}
}