動きを実現する仕組み
デザインコーディングテンプレの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.
