jQueryでスムーズスクロールを実装!ページ内リンクに動きを付け加える
お知らせに新着情報を表示する
次からはメインコンテンツの「お知らせ」「メニュー」「お店情報」を制作していきます。このページではまず「お知らせ」項目のコードを見ていきましょう。
ワードプレスなら管理が楽なんですが、今回のデモサイトはhtmlファイルで作る静的なサイトなのでお知らせを更新していくには1回1回ファイルを変更してアップロードする必要があります。
こちらの「デモサイト」から実際のページを確認して頂けます。
お知らせをHTMLで構築する
お知らせとは店舗や会社がお客さんに対してお伝えする情報ですね。デモサイトでは端的な文言を一覧で表示する形をとっています。
index.html
- <main>
- ~スライダーの記述省略~
- <section id="news">
- <div class="inner">
- <div class="title">
- <h2>お知らせ</h2>
- </div>
- <div class="newsWrap">
- <dl>
- <dt>2021.09.01</dt>
- <dd>こちらは<a href="https://chepirare.com/">チェピレア</a>が制作したデモサイトです。実際の店舗は存在しませんのでホームページ作りの参考にお使いください。</dd>
- </dl>
- <dl>
- <dt>2021.08.27</dt>
- <dd>すべてのメニューが「テイクアウト可能」となりましたので、店頭・お電話にてお申し付けください。</dd>
- </dl>
- <dl>
- <dt>2021.08.02</dt>
- <dd>新型コロナウィルス感染症による緊急事態宣言の発令に伴い、営業時間を20時までの時短営業とさせて頂いております。</dd>
- </dl>
- </div>
- </div>
- </section>
- </main>
やってる事は簡単です。お知らせ情報は「dl」タグを使っていて、その中の「dt」タグに公開した日付を記入し、「dd」タグにお知らせ内容を記述しています。
ただ、冒頭でも言いましたが今回のように静的なサイトでは更新のたびにhtmlファイルを書き直して再アップロードする必要があるので、HTMLに慣れていないと少し手間かも知れません。
SNSなら更新は簡単なので、お知らせ項目は付けずに新着情報はSNSで発信するという方法もアリかなとも思います。実際、そういう事業者さんもおられます。
まぁ、個人的にはホームページ内にもお知らせ項目を作り、SNSを活用されているならそちらでも情報を発信するという方法がオススメです。ご自身のやりやすい運営方法でご利用ください。
あとは「section」タグに「news」というidを追加しています。デザインだけならidじゃなくて「class」でも良いんですが、ページ内リンクの設定のために「id」を指定しています。
お知らせをCSSで調整する
それではお知らせ項目のCSSを見ていきましょう。「news」のidに対してちょっと特殊な設定をおこなっています。
style.css
- /* ------ news ------ */
- #news {
- padding-top: 80px;
- margin-top: -80px
- }
- #news .inner {
- width: 1200px;
- text-align: center;
- padding: 80px 10px;
- margin: 0 auto
- }
- #news h2 {
- font-size: 2.4rem;
- letter-spacing: 0.09em
- }
- #news .newsWrap {
- text-align: left;
- margin-top: 20px
- }
- #news .newsWrap dl {
- width: 900px;
- font-size: 0;
- padding: 25px 20px;
- margin: 0 auto;
- border-bottom: 1px solid #c1c1c1
- }
- #news .newsWrap dt {
- width: 120px;
- font-size: 1.4rem;
- letter-spacing: 0.09em;
- vertical-align: top;
- display: inline-block
- }
- #news .newsWrap dd {
- width: 740px;
- font-size: 1.6rem;
- letter-spacing: 0.09em;
- vertical-align: top;
- display: inline-block
- }
- #news .newsWrap dd a {
- color: #e21412;
- text-decoration: underline
- }
- @media screen and (max-width: 768px) {
- #news {
- padding-top: 60px;
- margin-top: -60px
- }
- #news .inner {
- width: 100%;
- padding: 60px 4% 20px
- }
- #news h2 { font-size: 2rem }
- #news .newsWrap dl {
- width: 100%;
- padding: 20px 0
- }
- #news .newsWrap dt {
- width: 100%;
- display: block
- }
- #news .newsWrap dd {
- width: 100%;
- margin-top: 10px;
- display: block
- }
- }
全体としてはそんなに難しくないですね。今回は「お知らせ」「メニュー」「お店情報」にはページ内リンクを設定しているのでそこんトコを少し調整しています。
「news」のidに「padding-top:80px;」と「margin-top:-80px;」を付けました。「んっ?コレって意味あんの?」って思われるかも知れませんが、今回のサイトには必要な設定です。
この設定をおこなっていないとページ内リンクで移動した時に「お知らせ」のタイトル部分が上部にくっついた形になってしまいます。
「inner」のクラス名を付けたdivにpaddingの設定を付けているのでタイトルが消える事はないですが、このpaddingもなければ「お知らせ」のタイトルがheaderに隠れてしまいます。
今回はページを下にスクロールしてもheaderを上部に固定しているため、ページ内リンクで移動する際には余白の調整をおこなわなければいけなくなります。
なぜこのような記述になるかは置いといて(笑)、headerの高さが「80px」の場合は「padding-top:80px;」と「margin-top:-80px;」を設定すると覚えておいてください。
ちなみにスマホのデザインではheaderの高さが「60px」なので「padding-top:60px;」と「margin-top:-60px;」としています。あまり難しく考えないでくださいね。
ページ内リンクにスムーズスクロールを追加する
スムーズスクロールを追加する事によってページ内のリンク先までスルスル~っと滑らかに動いてくれます。
main.js
- // smooth scroll
- $(function(){
- $('a[href^=#]').click(function() {
- var speed = 600;
- var href= $(this).attr("href");
- var target = $(href == "#" || href == "" ? 'html' : href);
- var position = target.offset().top;
- $('body,html').animate({scrollTop:position}, speed, 'swing');
- return false;
- });
- });
スムーズスクロールの設定がないと瞬間的にリンク先に移動します。なのでせっかくなんで動きも追加しておきましょう。
個人的にもそうですけど、この動きが嫌という声を聞いた事がないので(笑)、ほぼほぼデフォルトで付けてしまっても良いかなと思います。
「jQueryでスムーズスクロールを実装!ページ内リンクに動きを付け加える」で詳しく解説しているので良かったら見てみてください。
こちらも見てください
記述したHTMLとCSSの確認
それでは「お知らせ」項目が完成しましたのでコードの確認をしていきましょう。
index.html
- <!DOCTYPE html>
- <html>
- <head>
- ~head内の記述省略~
- </head>
- <body>
- <header>
- ~headerの記述省略~
- </header>
- <main>
- ~スライダーの記述省略~
- <section id="news">
- <div class="inner">
- <div class="title">
- <h2>お知らせ</h2>
- </div>
- <div class="newsWrap">
- <dl>
- <dt>2021.09.01</dt>
- <dd>こちらは<a href="https://chepirare.com/">チェピレア</a>が制作したデモサイトです。実際の店舗は存在しませんのでホームページ作りの参考にお使いください。</dd>
- </dl>
- <dl>
- <dt>2021.08.27</dt>
- <dd>すべてのメニューが「テイクアウト可能」となりましたので、店頭・お電話にてお申し付けください。</dd>
- </dl>
- <dl>
- <dt>2021.08.02</dt>
- <dd>新型コロナウィルス感染症による緊急事態宣言の発令に伴い、営業時間を20時までの時短営業とさせて頂いております。</dd>
- </dl>
- </div>
- </div>
- </section>
- </main>
- ~JSファイルの読み込み省略~
- </body>
- </html>
style.css
- ~共通デザイン省略~
- ~headerデザイン省略~
- ~navデザイン省略~
- ~スライダーデザイン省略~
- /* ------ news ------ */
- #news {
- padding-top: 80px;
- margin-top: -80px
- }
- #news .inner {
- width: 1200px;
- text-align: center;
- padding: 80px 10px;
- margin: 0 auto
- }
- #news h2 {
- font-size: 2.4rem;
- letter-spacing: 0.09em
- }
- #news .newsWrap {
- text-align: left;
- margin-top: 20px
- }
- #news .newsWrap dl {
- width: 900px;
- font-size: 0;
- padding: 25px 20px;
- margin: 0 auto;
- border-bottom: 1px solid #c1c1c1
- }
- #news .newsWrap dt {
- width: 120px;
- font-size: 1.4rem;
- letter-spacing: 0.09em;
- vertical-align: top;
- display: inline-block
- }
- #news .newsWrap dd {
- width: 740px;
- font-size: 1.6rem;
- letter-spacing: 0.09em;
- vertical-align: top;
- display: inline-block
- }
- #news .newsWrap dd a {
- color: #e21412;
- text-decoration: underline
- }
- @media screen and (max-width: 768px) {
- #news {
- padding-top: 60px;
- margin-top: -60px
- }
- #news .inner {
- width: 100%;
- padding: 60px 4% 20px
- }
- #news h2 { font-size: 2rem }
- #news .newsWrap dl {
- width: 100%;
- padding: 20px 0
- }
- #news .newsWrap dt {
- width: 100%;
- display: block
- }
- #news .newsWrap dd {
- width: 100%;
- margin-top: 10px;
- display: block
- }
- }
main.js
- ~sp nav設定省略~
- ~slider設定省略~
- // smooth scroll
- $(function(){
- $('a[href^=#]').click(function() {
- var speed = 600;
- var href= $(this).attr("href");
- var target = $(href == "#" || href == "" ? 'html' : href);
- var position = target.offset().top;
- $('body,html').animate({scrollTop:position}, speed, 'swing');
- return false;
- });
- });
これで「main.js」も完成です。デモサイトでのJS設定は、スマホ時に三本線をタップしてクラスを追加、スライダーのカスタム設定、そしてスムーズスクロールの3点です。
この次は「メニュー」項目を作っていきます。メニューはコードが結構多いのと、表示を切り替えるタブメニューを使いますので、頑張っていきましょう。
よく読まれている記事
おすすめの記事
CSSだけで簡単にタブメニューを実装!コピペで作れるサンプルコードをご紹介
CSS
ヘッダー固定時にページ内リンクがズレる!解消の方法とズレる原因をご紹介
CSS
jQueryを使ってページのトップへ戻るボタンを設置!なめらかな動きを実装しよう
JavaScript/jQuery
簡単にドメインは取得できる!ドメインの種類と適切なドメイン名を決めるコツ
サーバー・ドメイン
HTMLのタグに記述する「id」と「class」は使い分けてる?使い方の違いに注意!
HTML
レンタルサーバー会社を一覧でご紹介!ホームページに合わせたサーバー選び
サーバー・ドメイン
英語表記できるHTMLカラーコード一覧!16進数とRGBの値も一緒にチェック
CSS
Twitterの投稿をホームページに埋め込む!表示の種類とコードの取得を解説
HTML
無料で使えるワードプレステーマ10選!サイトの用途によってテーマを選ぼう
WordPress