《前編》しょーごさんの中級課題(蓼科ごとう農園) の備忘録 

しょーごさんの課題

中級課題でやってきたことを、忘れないようにするためにブログに残しておきます。

書きたい内容が長すぎて前編、中編、後編に分けています!

しょーごさんの中級の課題に新しい課題「農園」が1つ増えました。(2023年4月)
かっこいいデザインで難易度もちょうど良く、コーディングしていてとても楽しかったです!

 

以下の要領で課題を進めることが可能です。

  1. 料金を支払うと、しょーごさんからパスワード付きURLが送られます。
  2. リンク内には2つのデザインカンプが記載されています。
  3. その中のどちらか1つはご自身で選んで、WEBフリーランスであるしょーごさんに添削してもらうことが可能です。
  4. もう1つに関しては無料でご自身でコーディング可能です。
     ※もう1つの分も添削してもらう場合には、別途料金が発生します。

さやまる
さやまる
私は2つともレビューしていただきました!
とてもお得だね!
ひろきち
ひろきち

独学者にとって、プロの添削をこの値段(2023年現在2000円ちょい)で受けれるのは貴重ですね!

全体のデザインが見れます!/
しょーごさん中級課題をチェック

私のコーディングした中級のサイトはこちらです。

ユーザー名 user-111
パスワード user-111

 

ご意見・ご質問等ございましたら、お気軽にお問い合わせください。

また、おかしな点などございましたら、教えていただけると幸いです。

さやまる
さやまる
この記事を書いたのは
さやまる(@web83740439)

このブログ【さやまる|WEBデザイナーてどうよ?】の運営者。
WEB制作で食べていくことを決意し、独学勉強中の1児のママ。
 
この記事は10分程度で読めます。ぜひ最後までお付き合いください! 

制作時間と前提条件

制作時間

およそ40時間ほどかかってしまいました。わからない→ググる→Terateilに質問→やり直すがうまくいかない→ググるの連続でした。
Terateil無料でコーディングの質問ができるサイトで、独学者にとって強い味方なのでおすすめです。

目標の24時間の倍以上の時間がかかっているので、

効率化できるよう頑張ります!


前提条件

    • 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 -->
POINT
  • ローディング
  • ヘッダー(メインの牛のキャッチコピー部分)
  • ダウンヘッダー(牛のイラストで丸く飛び出ている部分)
  • ナビ
  • メイン
    項目ごとにsectionで囲みました。
    sectionとsectionの間に写真が入るので.middle-picを入れています。
  • フッター
余白のサイズ、背景、幅などのレイアウトはsectionごとに統一ではなかったので
まとめて管理することは避け、sectionの中のinnerで個別対応しました。

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を上記のように書き換えました。

  1. ナビの<ul>を2つにして、その中に<li>を3つずつ配置する。
  2. 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%); }
flexプロパティは、flex-basis、flex-grow、flex-shrinkのショートハンド(省略形)です。
指定には親要素にdisplay: flex;を使うのが必要条件となります。
さやまる
さやまる
ここでは親要素の.gnav__innerに
display: flex;を使用しています。
「flex-basis」はflexアイテムのベースになるサイズを指定、
「flex-grow」はflexアイテムをどれくらい拡大させるか、
「flex-shrink」はflexアイテムをどれくらい縮小させるかの意味となります。
今回の例で言うと、flex-grow と flex-basis を同時に指定している記述のため、flexアイテムは33%(ナビ、ロゴ、ナビの3等分を指示)を基準に 1 : 1 : 1 の比率で表示されています。
ひろきち
ひろきち
詳しくはこちらのZeroPlus Mediaさんの記事がわかりやすかったです!
関連情報
【CSS】flexアイテムの大きさと伸縮を一括指定する方法を解説
https://zero-plus.io/media/css-flex-shorthand/

ナビのレスポンシブ対応

特にナビメニューはレスポンシブ対応すると、ブレイクポイント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回書くのみでいい感じに大きさ調整してくれるので重宝しました。

clamp()関数:
画面幅に応じて動的に変化する値に対してあらかじめ最小、最大値ともに指定できる。
この場合、最小30px、最大40pxで画面幅に応じてよしなにサイズを調整してくれるようになります。clamp()関数はwidthにも利用できます。
width: clamp(600px, 74%, 786px);
これは
width: 74%;
min-width: 600px;
max-width: 786px;
と同じ意味です。
さやまる
さやまる
「この農園について」では画像とタイトルにclamp()を使用しました!


失敗例 テキストの下に画像を配置したいが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)の方に記載してしまっていました。

要素にposition(static初期以外)を設定していないとz-indexは効きません。

z-index単体では効きません。z-indexを記載していないと、HTMLで後から記載されたものの重なりが上に来るため、画像が上になります。(.about__text)のz-indexは無効となっていたので、画像がうまく配置できていませんでした。

原因解決としては、

①<img>にz-indexの小さい数値を入れるなどをして画像の重なりの一番下に設定して、
(.about__text)のz-indexを消去。
②<figure>のposition: relateve;を消し、
(.about__text)と(.about__chtchphrase)の両方にposition: relateve;、z-indexを記載。(タイトルと説明文の両方の重なりを上にしたいため)

 

続きは中級編で!

中編では製品一覧、FAQ、アクセスについての解説を、後編では内容はお問い合わせ、フッター、sectionとsectionの間にあるimgの配置方法、スクロール時ふわっと表示させる、ローディングについての解説をしています。
さやまる
さやまる
続きもご覧頂ければ嬉しいです。
さやまる
さやまる
またこの記事についての感想、評価、悩み、質問なども気軽にいただけると嬉しいです。

私自身、このブログを初めて書いてみてどれだけ考えずにコードを書いているかとか、このCSSはもっとこう書けばよかったとかたくさん反省点がありました。これを活かして次の課題のコーディングをより良いものにできるよう精進していきます!
全体のデザインが見れます!/
しょーごさん中級課題をチェック

私はしょーごさんのロードマップをもとに、中級以上の全部盛りセットを購入して学習を進めています。こちらのセットは単品購入よりも15%お得になります。プロの添削をこの値段で受けれる教材は他にはないです!独学者にとって今の学習が合っているのか不安になることが多いと思いますが、私はこの教材で安心が確認できたと感じました。ビシバシ鍛えられ、将来の自分のポートフォリオとしても利用可能ですのでぜひご覧ください!

\単体より15%もお得です/
中級以上セットをチェック

    タイトルとURLをコピーしました