中級課題でやってきたことを、忘れないようにするためにブログに残しておきます。
書きたい内容が長すぎて前編、中編、後編に分けています!
しょーごさんの中級の課題に新しい課題「農園」が1つ増えました。(2023年4月)
かっこいいデザインで難易度もちょうど良く、コーディングしていてとても楽しかったです!
以下の要領で課題を進めることが可能です。
- 料金を支払うと、しょーごさんからパスワード付きURLが送られます。
- リンク内には2つのデザインカンプが記載されています。
- その中のどちらか1つはご自身で選んで、WEBフリーランスであるしょーごさんに添削してもらうことが可能です。
- もう1つに関しては無料でご自身でコーディング可能です。
※もう1つの分も添削してもらう場合には、別途料金が発生します。
独学者にとって、プロの添削をこの値段(2023年現在2000円ちょい)で受けれるのは貴重ですね!
しょーごさん中級課題をチェック
私のコーディングした中級のサイトはこちらです。
ユーザー名 user-111
パスワード user-111
ご意見・ご質問等ございましたら、お気軽にお問い合わせください。
また、おかしな点などございましたら、教えていただけると幸いです。
制作時間と前提条件
制作時間
およそ40時間ほどかかってしまいました。わからない→ググる→Terateilに質問→やり直すがうまくいかない→ググるの連続でした。
Terateilは無料でコーディングの質問ができるサイトで、独学者にとって強い味方なのでおすすめです。
効率化できるよう頑張ります!
前提条件
-
- BEMを参考にクラス名をつけました。(間違っていたらすみません!)
- レスポンシブ対応はモバイルファーストです。モバイルファーストとは、モバイル向け(携帯サイズ画面など)のスタイルをベースとして、大きな画面向け(PCなど)のスタイルをmin-widthで上書きしていく方法です。
- スライダーのSwiperを使用しました。
- DartSassを環境構築しました。
node.jsインストール→npm初期化設定→DartSassのインストール
Youtube ひろコードさんの動画
(DartSassの環境構築と@use @forwardの使い方 / ダートサス)
https://youtu.be/VWDjpTGWW60を参考にしました。
この課題でできること
- ハンバーガーメニュー作成
- Swiperによるスライド
- フォームの送信
- ローディングアニメーション
- アコーディオン(質問を押すと回答が出てくる)
- ナビの真ん中にロゴが配置されるデザイン(レスポンシブが厄介)
- Google mapの埋め込み
- フォームのカスタマイズ、入力チェック
- ページ内リンクスムーススクロール
いよいよコーディング
全体構造
<div id="loadingWrap"></div>
<header class="header"></header>
<div class="down-header__inner"></div>
<nav></nav>
<main class="main">
<section id="about" class="about _cream-bg ">
</section><!-- /.about -->
<section id="product" class="product _cream-bg">
</section><!-- /.product -->
<section id="news" class="news element">
</section><!-- /.news -->
<div class="middle-pic"></div><!-- /.middle-pic -->
<section id="faq" class="faq _cream-bg ">
</section><!-- /.faq -->
<div class="middle-pic"></div><!-- /.middle-pic -->
<section id="access" class="access ">
</section><!-- /.acces -->
<div class="middle-pic"></div><!-- /.middle-pic -->
<section id="contact" class="contact _cream-bg ">
</section><!-- /.contact -->
</main><!-- /.main -->
<footer id="footer" class="footer "></footer><!-- /.footer -->
- ローディング
- ヘッダー(メインの牛のキャッチコピー部分)
- ダウンヘッダー(牛のイラストで丸く飛び出ている部分)
- ナビ
- メイン
項目ごとにsectionで囲みました。
sectionとsectionの間に写真が入るので.middle-picを入れています。 - フッター
headerの実装方法
メイン画像の部分となります!ブレイクポイント768px以下はキャッチコピー部分をposition: absolute;で浮かして絶対配置しました。ブレイクポイント769px以上はposition: static;の初期値に戻し、paddingで簡単に組みました。
ブレイクポイント769px以上
@media screen and (min-width: 768px),print{
.header__inner {
padding: 120px 10% 170px;
}
.header__ttl { //キャッチコピー部分
position: static;
}
失敗例 縦書きが右から左に並ばない
右から『喜びを<改行>蓼科を丸ごと味わう<改行>あなたは知ってる?』と並んでしまいました。デザインとは逆に配置されてしまい困りました。HTMLを並び直すと一瞬ですが、アクセサビリティの関係でそれは避けたいと思いました。
<div class="header__inner">
<div class="header__ttl">
<span>あなたは知ってる?</span><br class="blank">
<span>蓼科を丸ごと味わう</span><br class="blank">
<span>喜びを</span>
</div><!-- /.header__ttl -->
</div><!-- /.header-inner -->
原因はvertical-rl; を<span>に記載していたせいでした。 vertical-rl;を設定するのは行<span>ではなくその親要素(.header__ttl)です。 これで親要素のテキストが右から左へ縦書きになります。
半円で飛び出た牛の実装方法
ダウンヘッダー部分です。牛の周りの背景を丸くなるように設定し、position: relative;で相対位置で浮かせて真ん中へ配置します。z-indexで重ならないように前に表示させましょう。
<div class="down-header__inner">
<h1 class="header__logo"><img></h1>
</div>
.down-header__inner {
background: $c_bg;
border-radius: 50%;
width: 154px;
height: 154px;
padding: 30px;
position: relative;
top: -75px;
left: 50%;
transform: translateX(-50%);
z-index: 1000;
}
ナビの実装方法
ナビメニューの真ん中にロゴがあるデザインは初めてだったのでなかなか時間がかかりました。
簡単な実装方法
<nav>
<div class="gnav__inner">
<ul class="gnav__list__container">
<li><a>この農園について</a></li>
<li><a>製品一覧</a></li>
<li><a>お知らせ</a></li>
<li><a><img class="logo"></a></li>
<li><a>FAQ</a></li> <li><a>アクセス</a></li>
<li><a>お問い合わせ</a></li>
</ul>
</div>
</nav>
.gnav__list__container {
display: flex;
justify-content: space-around;
}
HTMLでリストの中の1つにロゴを埋め込み、SCSS(CSS)でflexboxで横並びします。
しかしロゴが真ん中にならないのでおすすめはしません•••。
このまま1つの flex box でやるなら、各<li>の幅を同じにする必要があると思います。その場合、テキスト同士の間隔を自動的に均等にすることはできません。
デザインに近い実装方法
<nav>
<div class="gnav__inner">
<ul class="gnav__list__container">
<li ><a>この農園について</a></li>
<li ><a>製品一覧</a></li>
<li class=".gnav__item3"><a>お知らせ</a></li>
</ul>
<div><a><img class="logo"></a></div>
<ul class="gnav__list__container">
<li class=".gnav__item4"><a>FAQ</a></li>
<li ><a>アクセス</a></li>
<li ><a>お問い合わせ</a></li>
</ul>
</div>
</nav>
HTMLを上記のように書き換えました。
- ナビの<ul>を2つにして、その中に<li>を3つずつ配置する。
- 2つの<ul>の間に<div>でロゴを配置する。
続いてSCSS。ロゴはposition: absolute;で中央へ絶対配置します。これで無事にロゴは真ん中へ。
2つの<ul>はflexboxで横並びにします。
.gnav__inner {
display: flex;
}
.gnav__list__container {
position: relative;
flex: 1 33%;
display: flex;
justify-content: space-between;
}
img {
position: absolute;
left: 50%;
transform: translateX(-50%);
}
ナビのレスポンシブ対応
特にナビメニューはレスポンシブ対応すると、ブレイクポイント1020pxくらいで改行してしまい、見栄えが悪いです。
しかしブレイクポイント1020pxくらいからハンバーガーメニューを表示させるのは個人的に違和感があったため、以下のデザインを採用しました。
ブレイクポイント ~768pxまで
ハンバーガーメニューを表示させてナビメニューを隠します。
ブレイクポイント 1020px〜768px
ロゴとメニューを改行して表示させます。
@media screen and (min-width: 768px),print{
//ロゴとナビメニューを2行にするため高さを出す
nav { height: 300px;
}
//2つある<ul>のクラス名
.gnav__list__container {
flex: 1 33%;
//ナビ、ロゴ、ナビの3等分に表示
display: flex;
justify-content: space-around;
//余白の関係でspace-betweenから変更
}
//3つ目の<li>でロゴとの間を余白調整
.gnav__item3 {
margin-right: 4%;
}
//4つ目の<li>でロゴとの間を余白調整
.gnav__item4 {
margin-left: 4%;
}
この農園について
写真が右側に飛び出ているデザインだったので、写真をabsoluteで浮かし、ブレイクポイント1400px以上でネガティブマージンをつけてinnerから外れるようにしました。
タイトルの文字は、
font-size: clamp(30px, 2.8vw, 40px);
で対応するとブレイクポイントごとで指定せずに1回書くのみでいい感じに大きさ調整してくれるので重宝しました。
画面幅に応じて動的に変化する値に対してあらかじめ最小、最大値ともに指定できる。
width: clamp(600px, 74%, 786px);
width: 74%;
min-width: 600px;
max-width: 786px;
失敗例 テキストの下に画像を配置したいがz-indexが効かない
自分でも初歩的で恥ずかしい失敗例なので 載せるか迷ったのですが、少しでも参考になる方が いればと思って記載しておきます。
z-indexの使い方がいまいち頭に入っていなかったので今回勉強になりました。
<section>
<div class="about-inner">
<div class="about_body_catchphrase">
<h2 class="about__catchphrase">蓼科の生きた豊かな恵みを、そのままに</h2>
</div>
<div class="about_body_txt">
<p class="about__txt">
「蓼科ごとう農園」は、蓼科の新鮮な農産物を提供するだけでなく、<br class="blank">
蓼科の自然環境を大切に守り、後世に残すことを使命としています。<br class="blank">
私たちは、***</p>
</div>
<figure><img></figure>
<figure><img></figure>
</div>
</section>
最初に<img>にposition: absolute;を、<img>を囲った<figure>にposition: relateve;を記載しました。そしてz-indexを説明文(.about__text)の方に記載してしまっていました。
z-index単体では効きません。z-indexを記載していないと、HTMLで後から記載されたものの重なりが上に来るため、画像が上になります。(.about__text)のz-indexは無効となっていたので、画像がうまく配置できていませんでした。
原因解決としては、
続きは中級編で!
私自身、このブログを初めて書いてみてどれだけ考えずにコードを書いているかとか、このCSSはもっとこう書けばよかったとかたくさん反省点がありました。これを活かして次の課題のコーディングをより良いものにできるよう精進していきます!
しょーごさん中級課題をチェック
私はしょーごさんのロードマップをもとに、中級以上の全部盛りセットを購入して学習を進めています。こちらのセットは単品購入よりも15%お得になります。プロの添削をこの値段で受けれる教材は他にはないです!独学者にとって今の学習が合っているのか不安になることが多いと思いますが、私はこの教材で安心が確認できたと感じました。ビシバシ鍛えられ、将来の自分のポートフォリオとしても利用可能ですのでぜひご覧ください!
\単体より15%もお得です/
中級以上セットをチェック
(.about__text)のz-indexを消去。