今回はレスポンシブ対応を行いました。
デザインカンプを確認します。bodyのwidthを変更して、mainをガイド線に合わせたwidthとすればまとめやすいかなと思いました。
メインビジュアルの画像を差し替える必要が生じてどうやったっけと考えましたが、
両方並べて切り替えるんでした。
@media screen and (max-width: 375px) {
body{
width: 375px;
}
.header-container{
width: 345px;
}
.big-bg {
width: 375px;
height: 590px;
margin: auto;
}
.pc{
display: none;
}
.sp{
display: block;
}
.title-box {
width: 300px;
height: 100px;
}
.title {
font-size: 30px;
letter-spacing: 0.05em;
}
h3 {
font-size: 20px;
margin-bottom: 30px;
}
.main {
color: #141414;
width: 345px;
height: 3682px;
}
.about-wrapper {
height: 452px;
}
.service-wrapper {
height: 908px;
}
.service-container {
height: 790px;
justify-content: flex-start;
align-content: stretch;
}
.service-item-text1 {
order: 1;
height: 180px;
margin-bottom: 40px;
}
.service-item-img1 {
order: 2;
height: 150px;
margin-bottom: 50px;
}
.service-item-img1 img {
width: 100%;
}
.service-item-text2 {
order: 3;
height: 180px;
margin-bottom: 70px;
}
.service-item-img2 {
order: 4;
height: 150px;
}
.service-item-img2 img {
width: 100%;
}
.news-wrapper {
height: 1187px;
}
.news-container {
width: 321px;
height: 1069px;
margin: auto;
flex-wrap: wrap;
justify-content: flex-start;
align-content: space-between;
}
.contact-wrapper {
width: 100%;
}
input[type='text'],
input[type='tel'],
input[type='email'] {
width: 100%;
}
textarea {
width: 100%;
}
.footer {
height: 60px;
white-space: nowrap;
}
}
元のCSSをメディアクエリにコピペして一つ一つ改変する流れでした。
やっぱりブロックずつやるべきですねこれは、、(後悔)
PCサイズをmainと同じ幅のdiv達までpxで打ってしまっていたのですが、width:100%でやるべきだったので直しました。レスポンシブの負担が全然違いますね。
flexboxは縦も簡単に変更出来て、順番も変えられて本当便利ですね。grid rayoutと使い分けることで配置は大体何でも出来そうです。
そしてハンバーガーメニューですね。jQueryの知識がまだ薄いので、今回は株式会社アーティスさんの記事を参考にCSSのみでやってみます。
ちなみにサルワカさんの記事で別の動きを紹介しているものもありました。
記事を参考に、カンプに合わせたものにアレンジしていきます。
<div class="header-hamburger">
<input type="checkbox" id="btn-check">
<label for="btn-check" class="btn"><span></span></label>
<div class="hamburger-menu">
<ul>
<li><a href="#">About</a></li>
<li><a href="#">Service</a></li>
<li><a href="#">News</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div>
</div>
/*ハンバーガーメニュー*/
/* 見えるようにする */
.header-hamburger{
display: block;
}
/* ナビを消す */
.header-nav {
display: none;
}
/* 開くボタン */
#btn-check {
display: none;
}
.btn {
position: absolute;
top: 30px;
right: 0px;
display: flex;
width: 25px;
height: 16px;
z-index: 9999;
}
.btn span,
.btn span:before,
.btn span:after {
position: absolute;
content: '';
height: 2px;
width: 100%;
background-color: #ffffff;
}
.btn span{
transition: 0.9s;
}
.btn span:before {
transition: rotate(0);
transition: .5s;
bottom: 8px;
}
.btn span:after {
transition: rotate(0);
transition: .5s;
top: 8px;
}
/* 閉じるボタン */
#btn-check:checked ~ .btn span {
background-color: rgba(255, 255, 255, 0);
transition: .2s;
}
#btn-check:checked ~ .btn span::before {
bottom: 0;
transform: rotate(135deg);
transition: .5s;
}
#btn-check:checked ~ .btn span::after {
top: 0;
transform: rotate(-135deg);
transition: .5s;
}
/* メニュー */
.hamburger-menu{
position: relative;
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 100%;/*画面外に置いておく*/
z-index: 1000;
background-color: #1b1310;
transition: all .5s;
}
.hamburger-menu ul {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 64px;
height: 242px;
display: flex;
flex-wrap: wrap;
align-content: space-between;
justify-content: center;
}
.hamburger-menu ul li a {
font-size: 16px;
color:#ffffff;
text-decoration: none;
}
/*メニューを画面内へ*/
#btn-check:checked ~ .hamburger-menu {
left: 0;
}
/* ハンバーガーメニューおわり */
jQueryだともっとシンプルにかけるんでしょうか。そろそろ勉強しないとな。
ハンバーガー→×ボタンに唐突に切り替わるのがちょっと微妙だったので、transformをつけてみました。
知識が中途半端だったのでここでやっと諸々の動きを把握。
About上の余白が消えていたのでこれを見た後に直しました。
ハンバーガーの真ん中の棒もscaleで伸縮させたかったんですが、何故か疑似要素まで伸縮されてしまい、原因が分からないので透明化までにしました。う~ん悔しい!
ページ内ジャンプを付けていなかったので、最後に追加しようとしたのですが、checkboxで組んだ場合はそこまでは組めないみたいです。
buttonならいけるみたいです。疑似クラスもっと勉強せねば、、
せっかくなので残りはjQueryでやってみます。
<!-- ハンバーガーメニューのページ内ジャンプ適用 -->
<script>
$(function () {
$('.hamburger-menu li a').on('click', function (event) {
$('#btn-check').prop('checked', false);
});
});
</script>
ちょっと速度を調整しなおしましたが、これで出来ました。
ちなみにscroll-behavior: smooth初めて使いました。便利ですね。
ハンバーガーメニューからのジャンプがちょっと微妙な動きかな、、
でも、とりあえず形になりました~!
調べながら考えながらでえらい時間がかかってしまいましたが、なんとか辿り着きました!
疲れた~!笑
明日は回答を見てみます!
コメント