デザインコーディングテンプレ①

動きを実現する仕組み

デザインコーディングテンプレの1案です。


STEP1 HTMLコード


① head終了タグ直前に自作のCSSを読み込みます。*wordpressでfunctionにて設定の場合は省略

<head>

<link rel="stylesheet" type="text/css" href="css/5-1-14.css">

</head>

② body内にリンク元のHTMLとリンク先のHTMLを記載します。

<body>

  <header class="header">
    
      <div class="header_inner">
        
        <div class="bland_logo">
          <a href="#"
            >LOGO</a>
        </div>

        <div class="openbtn">
          <span></span>
          <span></span>
          <span></span>
        </div>

        <nav id="g-nav">
          <div id="g-nav-list">
            <!--ナビの数が増えた場合縦スクロールするためのdiv※不要なら削除-->
            <ul>
              <li><a href="#">Top</a></li>
              <li><a href="#">About</a></li>
              <li><a href="#">Service</a></li>
              <li><a href="#">Contact</a></li>
            </ul>
          </div>
        </nav>
        
      </div>
    
    </header>

 <main>
<section class="test-clinic">
        <div class="clinic-section">
          <div class="clinic-info">
            <div class="clinic-title">
              <h2>DEMO Clinic</h2>
              <p>美容皮膚科「ルサンネクリニック」</p>
            </div>
            <div class="sub-title">
              <p>
                VISIAを用いた肌診断から始まる、<br />
                あなたに最適なスキンケアをご提案します
              </p>
            </div>
            <div class="explain-text">
              <p>
                オーダーメイド治療を通いやすい価格で。<br />
                ドクターズコスメの専門家があなたの肌をサポートします。
              </p>
            </div>
            <ul class="clinic-advantages">
              <li>
                <a href="#">
                  <p>VISIA肌診断</p>
                </a>
              </li>
              <li>
                <a href="#">
                  <p>オーダーメイド治療</p>
                </a>
              </li>
              <li>
                <a href="#">
                  <p>料金表</p>
                </a>
              </li>
            </ul>
            <!-- クリニックページへのボタン -->
            <div class="clinic-page-btn-wrapper">
              <a href="#" class="clinic-btn-pc">クリニック詳細ページへ</a>
            </div>
          </div>
          <div class="clinic-list">
            <ul class="clinic-pic-wrapper">
              <li>
                <a href="#">
                  <img src="https://dl.dropbox.com/scl/fi/xm54gvp81a3ezxbsb4vvl/test.pic.png?rlkey=x3hyrjdrosg18yz8ueysvtrag&st=xh4cfw86&dl=0" alt="クリニック1" />
                  <div class="clinic-place">
                    <p>DEMOクリニック</p>
                    <span>東京都銀座5丁目</span>
                  </div>
                </a>
              </li>
              <li>
                <a href="#">
                  <img src="https://dl.dropbox.com/scl/fi/o48rmw823ywqywcnr3bl9/test.pic2.png?rlkey=mt9eu9mcxpxacsq3ixvxpel5z&st=2ijr21aa&dl=0" alt="クリニック2" />
                  <div class="clinic-place">
                    <p>DEMOクリニック恵比寿</p>
                    <span>東京都恵比寿4丁目</span>
                  </div>
                </a>
              </li>
            </ul>
          </div>
          <!-- クリニックページへのボタン -->
          <div class="clinic-page-btn-wrapper-sp">
            <a href="#" class="clinic-btn-sp">クリニック詳細ページへ</a>
          </div>
        </div>
      </section>
   

 <!--/main--></main>

 <footer id="footer">
   <!-- ページトップアイコン -->
    <div id="pageTopIcon">
      <button id="scrollToTopBtn">
        <span>▲</span><span class="scroll-text">トップ</span>
      </button>
    </div>
  <small>© copyright.</small> 
 </footer>

</body>

③ body 終了タグ直前に JS、動きを制御する自作のJS の2 つを読み込みます。*wordpressでfunctionにて設定の場合は省略


  <!--自作のJS-->
  <script src="js/5-1-14.js"></script>
</body>

④ WordpressでのfunctionでのCDNとファイルの読み込みは下記より。

//CSSとJSの読み込み
function my_enqueue_scripts()
{
  $version = wp_get_theme()->get( 'Version' );
  wp_enqueue_style('index-style', get_template_directory_uri() . '/css/index.css', array(), $version);
  wp_enqueue_style('singular-style', get_template_directory_uri() . '/css/singular.css', array(), $version);
  wp_enqueue_style('content-style', get_template_directory_uri() . '/css/content.css', array(), $version);
  wp_enqueue_style('archive-style', get_template_directory_uri() . '/css/archive.css', array(), $version);
  wp_enqueue_style('comments-style', get_template_directory_uri() . '/css/comments.css', array(), $version);
  wp_enqueue_style('404-style', get_template_directory_uri() . '/css/404.css', array(), $version);
  wp_enqueue_style('search-form-style', get_template_directory_uri() . '/css/searchform.css', array(), $version);
  wp_enqueue_style('search-style', get_template_directory_uri() . '/css/search.css', array(), $version);
  wp_enqueue_style('sidebar-style', get_template_directory_uri() . '/css/sidebar.css', array(), $version);
  wp_enqueue_style('header-style', get_template_directory_uri() . '/css/header.css', array(), $version);
  wp_enqueue_style('footer-style', get_template_directory_uri() . '/css/footer.css', array(), $version);
  wp_enqueue_style('navi-style', get_template_directory_uri() . '/css/navi.css', array(), $version);
  wp_enqueue_style('navi-accordion-style', get_template_directory_uri() . '/css/navi-accordion.css', array(), $version);
  wp_enqueue_style('catego-navi-style', get_template_directory_uri() . '/css/catego-navi.css', array(), $version);
  wp_enqueue_style('button-style', get_template_directory_uri() . '/css/button.css', array(), $version);
  wp_enqueue_script('navi-script', get_template_directory_uri() . '/js/navi.js', array('jquery'), $version, true);
  wp_enqueue_script('catego-navi-script', get_template_directory_uri() . '/js/catego-navi.js', array('jquery'), $version, true);
  wp_enqueue_script('page-top-script', get_template_directory_uri() . '/js/page-top.js', array('jquery'), $version, true);
}
add_action('wp_enqueue_scripts', 'my_enqueue_scripts');

⑤ header.phpの>head>内で下記を使って読み込み。

<link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>"><!--スタイルシートの呼び出し-->
<?php wp_head(); ?><!--システム・プラグイン用-->


CSSでコーディング


STEP2 cssコード


/*test-clinicセクション*/
.test-clinic {
  width: 100%;
  background-color: #f8f5f2;
  padding: 80px 0;
}
.clinic-section {
  max-width: 1080px;
  margin: 0 auto;
  display: flex;
  gap: 40px;
  align-items: flex-start;
}
@media (max-width: 1080px) {
  .clinic-section {
    width: calc(100vw - 40px); /* 画面幅から左右20pxずつ引く */
    max-width: 100%; /* はみ出し防止 */
    margin: 0 auto; /* 中央寄せ */
    padding: 0 20px;
    box-sizing: border-box; /* padding込みで幅計算 */
  }
}
@media (max-width: 730px) {
  .clinic-section {
    display: flex;
    flex-direction: column;
    padding: 0px;
  }
}

/*左側のクリニック情報部分*/
.clinic-info {
  flex: 1;
  width: calc(100% - 50px);
  min-width: 320px;
  /* 左側のテキスト部分 */
}
@media (max-width: 730px) {
  .clinic-info {
    width: 100%;
  }
}
.clinic-title {
  padding-left: 30px;
  margin-bottom: 40px;
  border-left: 4px solid #1a1a1a;
}

.clinic-title h2 {
  font-size: 48px;
  font-weight: bold;
  margin: 6px 0;
}

@media (max-width: 1080px) {
  .clinic-title h2 {
    font-size: 28px;
  }
}

.clinic-title p {
  font-size: 20px;
  margin: 0px 0;
}
@media (max-width: 730px) {
  .clinic-title p {
    font-size: 15px;
  }
}

.sub-title {
  font-size: 18px;
  line-height: 200%;
  letter-spacing: 5px;
  margin-bottom: 40px;
}
@media (max-width: 768px) {
  .sub-title {
    font-size: 15px;
  }
}

.explain-text {
  font-size: 16px;
  line-height: 200%;
  margin-bottom: 40px;
}
@media (max-width: 768px) {
  .explain-text {
    font-size: 14px;
  }
}

.clinic-advantages {
  display: flex;
  flex-wrap: wrap;
  gap: 24px; /* 項目間の余白 */
  margin: 60px 0;
  padding: 0;
  list-style: none;
}
@media (max-width: 730px) {
  .clinic-advantages {
    margin-bottom: 30px;
  }
}

.clinic-advantages li {
  width: calc((50% - 20px));
  position: relative;
  background: #fff;
  border-radius: 24px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
  transition: box-shadow 0.2s;
  padding: 0;
}

.clinic-advantages li a {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px;
  text-decoration: none;
  color: #222;
  font-weight: bold;
  font-size: 14px;
}
@media (max-width: 768px) {
  .clinic-advantages li a {
    font-size: 12px;
  }
}
@media (max-width: 400px) {
  .clinic-advantages li a {
    font-size: 10px;
  }
}

.clinic-advantages li a::after {
  content: "";
  display: inline-block;
  width: 0;
  height: 0;
  border-top: 6px solid transparent;
  border-bottom: 6px solid transparent;
  border-left: 10px solid #888;
  margin-left: 12px;
  flex-shrink: 0;
}

.clinic-advantages li a:hover::after {
  animation-name: sidemoveAnimeBt;
  animation-duration: 0.6s;
  animation-iteration-count: infinite;
  animation-fill-mode: forwards !important;
}

/* 右に動いて元の位置に戻るアニメーション */
@keyframes sidemoveAnimeBt {
  0% {
    transform: translateX(0);
  }
  50% {
    transform: translateX(5px);
  }
  100% {
    transform: translateX(0);
  }
}

/* clinic-advantages li a::after 右向き三角形(デフォルト) */
.clinic-advantages li a.triangle-right::after {
  content: "";
  display: inline-block;
  width: 0;
  height: 0;
  border-top: 6px solid transparent;
  border-bottom: 6px solid transparent;
  border-left: 10px solid #888;
  margin-left: 12px;
  flex-shrink: 0;
}

/* 下向き三角形 */
/*.clinic-advantages li a.triangle-down::after {
  content: "";
  display: inline-block;
  width: 0;
  height: 0;
  border-left: 6px solid transparent;
  border-right: 6px solid transparent;
  border-top: 10px solid #888;
  margin-left: 12px;
  flex-shrink: 0;
}*/

/* 左向き三角形 */
/*.clinic-advantages li a.triangle-left::after {
  content: "";
  display: inline-block;
  width: 0;
  height: 0;
  border-top: 6px solid transparent;
  border-bottom: 6px solid transparent;
  border-right: 10px solid #888;
  margin-left: 12px;
  flex-shrink: 0;
}*/

/* 上向き三角形 */
/*.clinic-advantages li a.triangle-up::after {
  content: "";
  display: inline-block;
  width: 0;
  height: 0;
  border-left: 6px solid transparent;
  border-right: 6px solid transparent;
  border-bottom: 10px solid #888;
  margin-left: 12px;
  flex-shrink: 0;
}*/

/*左向き三角形*/
/*.clinic-advantages li a::after {
  content: "";
  display: inline-block;
  width: 8px;
  height: 8px;
  border-bottom: 2px solid #888;
  border-left: 2px solid #888;
  transform: rotate(45deg);
  margin-left: 12px;
  flex-shrink: 0;
}*/

/*上向き三角形*/
/*.clinic-advantages li a::after {
  content: "";
  display: inline-block;
  width: 8px;
  height: 8px;
  border-left: 2px solid #888;
  border-top: 2px solid #888;
  transform: rotate(-45deg);
  margin-left: 12px;
  flex-shrink: 0;
}*/

/* クリニックボタン */
.clinic-btn-pc {
  display: inline-block;
  background: #333;
  color: #fff;
  border-radius: 24px;
  padding: 16px 48px;
  font-weight: bold;
  font-size: 12px;
  letter-spacing: 5px;
  text-align: center;
  margin-top: 32px;
  text-decoration: none;
  transition: background 0.2s;
}
.clinic-btn:hover {
  background: #1976d2;
}
@media (max-width: 730px) {
  .clinic-btn-pc {
    display: none;
  }
}

@media (hover: hover) {
  .clinic-advantages li a:hover::after {
    animation-name: sidemoveAnimeBt;
    animation-duration: 0.6s;
    animation-iteration-count: infinite;
    animation-fill-mode: forwards !important;
  }
  .clinic-btn:hover {
    background: #1976d2;
  }
}

/* 右側のクリニックリスト部分 */
.clinic-list {
  flex: 1.2;
  display: flex;
  flex-direction: column;
  gap: 32px;
}
@media (max-width: 1080px) {
  .clinic-list {
    max-width: 300px;
  }
}
@media (max-width: 730px) {
  .clinic-list {
    width: 100%;
    max-width: 100%;
    margin: 0 auto;
  }
}
.clinic-pic-wrapper li {
  position: relative;
}
.clinic-pic-wrapper li:nth-child(2) {
  margin-top: 50px;
}
.clinic-pic-wrapper li a {
  display: block;
  max-width: 500px;
  overflow: hidden;
  border-radius: 8px; /* 角丸は任意 */
}
.clinic-pic-wrapper li a img {
  width: 100%;
  transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
.clinic-pic-wrapper li a img:hover {
  transform: scale(1.08);
}
.clinic-place {
  position: absolute;
  bottom: -20px;
  max-width: 400px;
  width: 100%;
  padding: 10px;
  background-color: #fff;
  z-index: 10;
}
@media (max-width: 1080px) {
  .clinic-place {
    max-width: 250px;
  }
}
.clinic-place p {
  font-size: 18px;
  font-weight: bold;
  margin: 4px 0;
  line-height: 1.5;
  color: #578dc0;
}
.clinic-place span {
  font-size: 14px;
  margin: 4px 0;
  line-height: 1.5;
}
@media (hover: hover) {
  .clinic-pic-wrapper li a img:hover {
    transform: scale(1.08);
  }
}

/* SPクリニックボタン */
.clinic-page-btn-wrapper-sp {
  margin: 30px auto;
}
.clinic-btn-sp {
  display: inline-block;
  background: #333;
  color: #fff;
  border-radius: 24px;
  padding: 16px 48px;
  font-weight: bold;
  font-size: 12px;
  letter-spacing: 5px;
  text-align: center;
  margin-top: 32px;
  text-decoration: none;
  transition: background 0.2s;
}
.clinic-btn:hover {
  background: #1976d2;
}
@media (min-width: 730px) {
  .clinic-btn-sp {
    display: none;
  }
}


/*ヘッダー設定*/
.header {
  position: fixed;
  top: 0;
  width: 100%;
  height: 80px;
  transition: 0.5s;
  z-index: 9000;
  background-color: #ccc;
}
.header.hide {
  top: -80px;
}
.header .header_inner {
  display: flex;
  align-items: center;
  height: 40px;
  padding: 20px;
}
.header .header_inner .bland_logo {
  width: 100%;
}


/* -- ul -- */
ul {
  list-style: none;
}

li {
  list-style: none;
}


JSを使ってJSコード作成


STEP3 JSコード


// ページトップアイコンの表示・クリック処理(アニメーション付き)
document.addEventListener("DOMContentLoaded", function () {
  const icon = document.getElementById("pageTopIcon");
  const btn = document.getElementById("scrollToTopBtn");

  // 初期状態
  icon.style.opacity = 0;
  icon.style.pointerEvents = "none";
  icon.style.display = "block"; // CSSでdisplay:noneの場合も考慮

  let visible = false;

  window.addEventListener("scroll", function () {
    if (window.scrollY > 200) {
      if (!visible) {
        icon.style.transition = "opacity 0.4s";
        icon.style.opacity = 1;
        icon.style.pointerEvents = "auto";
        visible = true;
      }
    } else {
      if (visible) {
        icon.style.transition = "opacity 0.4s";
        icon.style.opacity = 0;
        icon.style.pointerEvents = "none";
        visible = false;
      }
    }
  });

  btn.addEventListener("click", function () {
    window.scrollTo({ top: 0, behavior: "smooth" });
  });
});

動作確認は下記から


See the Pen Untitled by K O (@K-O-the-builder) on CodePen.