タイムラインをサイトに埋め込む

年表や沿革などで使うタイムラインを作ってみましょう。cssのみで作れるシンプルな物のありますが、今回は「CodyHouse Framework」というフレームワークを使ったアニメーションタイムラインを作成してみます。


Vertical Timeline

codyhouse.co



さらにCodyHouse Framework 本体のデータも必要なのでgithubからダウンロードしておきましょう。

github.com




 

<div class="cd-timeline js-cd-timeline">
<div class="container max-width-lg cd-timeline__container">


<div class="cd-timeline__block">
<div class="cd-timeline__img cd-timeline__img--picture">
<img src="img/cd-icon-picture.svg" alt="Picture">
</div> <!-- cd-timeline__img -->

<div class="cd-timeline__content text-component">
<h2>Title of section 1</h2>
<p class="color-contrast-medium"></p>
<div class="flex justify-between items-center">
<span class="cd-timeline__date">2019/10</span>
</div>
</div> <!-- cd-timeline__content -->
</div> <!-- cd-timeline__block -->




<div class="cd-timeline__block">
<div class="cd-timeline__img cd-timeline__img--picture">
<img src="img/cd-icon-picture.svg" alt="Picture">
</div> <!-- cd-timeline__img -->

<div class="cd-timeline__content text-component">
<h2>Title of section 2</h2>
<p class="color-contrast-medium"></p>
<div class="flex justify-between items-center">
<span class="cd-timeline__date">2020/03</span>
</div>
</div> <!-- cd-timeline__content -->
</div> <!-- cd-timeline__block -->


</div><!-- container -->
</div><!-- cd-timeline -->

プラグインを使ったwordpressのデプロイ

以前、バックアップを取って、sql文を使ってwordpressのデータを移動させましたが、今回はプラグインを使ってデプロイさせます。

ja.wordpress.org

 

このプラグインは検索 & 置換操作中に発生する、あらゆるシリアライゼーションの問題も解決します。
とても簡単にデプロイ出来てしまうので、本当におすすめです。

最新版は小規模なシングルサイトであれば無料で問題なく利用できますが、最大アップロードサイズが「512MB」を超える場合、容量制限を増やす有料エクステンション(拡張機能)があります。

wordpressのデプロイ作業

ステップ1
本サーバー(スターサーバー)に新しいwordpressを作る。

ステップ2
開発サーバー(xampp)と本サーバーの両方に上記の「all-in-one-wp-migration」プラグインをインストールする。

ステップ3
開発サーバーのwordpressのデータをエクスポート。
「エクスポート先」と書かれた箇所をクリックして内容を展開し、「ファイル」を選択。

しばらく待ち時間が発生しますが、その後、「DOWNLOAD XXX.COM」といった感じのボタンがぼよぉ〜んとアニメーション付きで表示されるので、クリックしてファイルをエクスポートします。


ステップ4
ステップ3でエクスポートしたファイルを本サーバーにインポートします。ダッシュボード → All-in-One WP Migration → インポート画面を開き、エクスポートしたファイルをドラッグ&ドロップでアップロードするかファイル選択でアップロードしてインポートします。
その後、「PROCEED >」ボタンをクリックすることでファイルの内容が反映され、ログイン画面に戻され流ので、再度ログインして表示を確認しましょう。




www.vektor-inc.co.jp

 

https://downloads.wordpress.org/plugin/all-in-one-wp-migration.6.74.zip

wordpressの作業データ

トップページ

front-page.php

<?php
/* Template Name:blogサイトのトップページ */
?>

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>wp-blogのトップページ</title>
<link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>">
<link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/jquery.bxslider.css">
</head>
<body <?php body_class(); ?>>
<header>
<h1>wp-blogのトップページ</h1>
<p>サイトのキャッチフレーズ</p>
</header>
<main>
<div class="main-visual">
<ul class="bxslider">
<li><img src="<?php echo get_template_directory_uri(); ?>/img/01.jpg" alt=""></li>
<li><img src="<?php echo get_template_directory_uri(); ?>/img/02.jpg" alt=""></li>
<li><img src="<?php echo get_template_directory_uri(); ?>/img/03.jpg" alt=""></li>
<li><img src="<?php echo get_template_directory_uri(); ?>/img/04.jpg" alt=""></li>
</ul>
</div>

<div class="wp-post-wrapper">
<h2>Blog</h2>
<dl class="post-list">

<?php
$arg = array(
'posts_per_page' => 3, // 表示する件数
'orderby' => 'date', // 日付でソート
'order' => 'DESC', // DESCで最新から表示、ASCで最古から表示
//'category_name' => 'osaka', // 表示したいカテゴリーのスラッグを指定
'tag' => 'travel'//表示したいタグをスラッグ指定
);
$posts = get_posts( $arg );
if( $posts ): ?>

<!-- ループ開始 -->
<?php
foreach ( $posts as $post ) :
setup_postdata( $post );
?>

<dt><?php the_time('Y年m月d日'); ?></dt>
<dd>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</dd>
<?php endforeach; ?>
<!-- ループ終了 -->
<?php
/// 必ずクエリをリセット
  endif;
  wp_reset_postdata();
?>
</dl>

<a href="<?php echo esc_url( home_url() ); ?>/blog/">blogページへ</a>


</div><!-- /.wp-post-wrapper -->

</main>



<footer>
<p>サイトのタイトルが入る</p>
</footer>


<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js'></script>
<script src="<?php echo get_template_directory_uri(); ?>/js/jquery.bxslider.js"></script>
<script>
$(function(){
$('.bxslider').bxSlider({
maxSlides: 4,//横に並べる画像の数
ticker: true,
speed: 40000,
slideWidth: 600,//1枚の画像の幅
shrinkItems: true,
});
});
</script>

</body>
</html>

ブログページ

index.php

<?php
/* Template Name:blogサイトのブログページ */
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ブログページ</title>
<link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>">
</head>
<body <?php body_class(); ?>>

<div class="post-wrapper">
<?php if(have_posts()): ?>
<?php while (have_posts()): ?>
<?php the_post(); ?>

<!-- ここから投稿 -->
<a href="<?php the_permalink(); ?>">
<div class="post-box">
<h1><?php the_title(); ?></h1>
<?php the_content(); ?>
<p class="date"><?php the_time('Y年n月j日'); ?></p>
</div><!-- /.post-box -->
</a>
<!-- ここまで投稿 -->

<?php endwhile; //投稿ループ終了 ?>
<!-- ページネーション開始 -->
<?php the_posts_pagination(); ?>
<!-- ページネーション終了 -->
<?php else: ?>
<?php endif; //条件分岐終了 ?>
</div>
</body>
</html>


style.css

@charset "utf-8";

/*
Theme Name:felica-blog
Author:yajima
*/

html{box-sizing:border-box;-webkit-text-size-adjust:100%}*,:after,:before{background-repeat:no-repeat;box-sizing:inherit}:after,:before{text-decoration:inherit;vertical-align:inherit}*{padding:0;margin:0;box-sizing:border-box;}audio:not([controls]){display:none;height:0}hr{overflow:visible}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}summary{display:list-item}small{font-size:80%}[hidden],template{display:none}abbr[title]{border-bottom:1px dotted;text-decoration:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}code,kbd,pre,samp{font-family:monospace,monospace}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background-color:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}input{border-radius:0}[role=button],[type=button],[type=reset],[type=submit],button{cursor:pointer}[disabled]{cursor:default}[type=number]{width:auto}[type=search]{-webkit-appearance:textfield}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;resize:vertical}button,input,optgroup,select,textarea{font:inherit}optgroup{font-weight:700}button{overflow:visible}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:0;padding:0}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button:-moz-focusring{outline:1px dotted ButtonText}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}button,select{text-transform:none}button,input,select,textarea{background-color:transparent;border-style:none;color:inherit}select{-moz-appearance:none;-webkit-appearance:none}select::-ms-expand{display:none}select::-ms-value{color:currentColor}legend{border:0;color:inherit;display:table;max-width:100%;white-space:normal}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}img{border-style:none;vertical-align: bottom}progress{vertical-align:baseline}svg:not(:root){overflow:hidden}audio,canvas,progress,video{display:inline-block}@media screen{[hidden~=screen]{display:inherit}[hidden~=screen]:not(:active):not(:focus):not(:target){position:absolute!important;clip:rect(0 0 0 0)!important}}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled]{cursor:default}::-moz-selection{background-color:#b3d4fc;color:#000;text-shadow:none}::selection{background-color:#b3d4fc;color:#000;text-shadow:none}ul,ol{list-style:none;}a{text-decoration:none;}.wrapper{overflow:hidden;}body{overflow-y:scroll;}img{max-width: 100%;}

header{
text-align: center;
padding: 30px 0;
}
header>h1{
margin-bottom: 20px;
}

.main-visual{
width: 100%;
margin-bottom: 100px;
}
.wp-post-wrapper{
max-width: 800px;
margin: 100px auto;
}
.wp-post-wrapper>h2{
text-align: center;
margin-bottom: 20px;
}
.post-list{
display: flex;
flex-wrap: wrap;
background-color: #e7effa;
}
.post-list>dt{
width: 30%;
padding: 20px;
}
.post-list>dd{
width: 70%;
}
.post-list>dd>a{
display: block;
padding: 20px;
color: #222;
}
.post-list>dd>a:hover{
text-decoration: underline 2px;
}
.post-list>dt:nth-of-type(even),.post-list>dd:nth-of-type(even){
background-color: #c5c5c5;
}

footer{
width: 100%;
height: 100px;
background-color: #5d5d5d;
color: #FFF;
}

/* ブログページ */
.post-wrapper{
max-width: 960px;
margin: 100px auto;
}
a{
color: #222;
}
.post-box{
margin: 20px auto 40px;
background-color: #d9f1ef;
padding: 20px;
}
.post-wrapper h1{
margin-bottom: 20px;
}
.post-wrapper p{
margin-bottom: 20px;
}

/* ブログ詳細ページ */
.single-post .post-wrapper{
max-width: 1200px;
}
.single-post .post-box{
background-color: #eb7a91;
}
.single-post h1{
text-align: center;
}

wordpressで特定のカテゴリー記事を表示させる

wordpressで特定のカテゴリー記事を表示させる為には「 get_posts( );」を使って表示させます。カテゴリーに指定したスラッグを使う事で特定のカテゴリー記事のみを表示する事が出来ます。また、「foreach」を使う事で配列に入っている値を全て出力させます。
以前は「query_posts」で出力するケースもありましたが、現在は非推奨なので注意が必要です。


「get_posts」で出力

出力する記事のフォーマット指定
<?php
$arg = array(
'posts_per_page' => 4, // 表示する件数
'orderby' => 'date', // 日付でソート
'order' => 'DESC', // DESCで最新から表示、ASCで最古から表示
'category_name' => 'news', // 表示したいカテゴリーのスラッグを指定
//'tag' => 'post'//表示したいタグをスラッグ指定
);
$posts = get_posts( $arg );
if( $posts ): ?>

「foreach」で条件に当てはまる記事を表示

<!-- ループ開始 -->
<?php
foreach ( $posts as $post ) :
setup_postdata( $post );
?>
<dt><?php the_time('Y年m月d日'); ?></dt>
<dd>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</dd>
<?php endforeach; ?>
<!-- ループ終了 -->


<?php
/// 必ずクエリをリセット
  endif;
  wp_reset_postdata();
?>

wordpressの投稿記事をループさせる

 

wordpressで特定のカテゴリー記事を表示させる為には「 get_posts( );」を使って表示させます。カテゴリーに指定したスラッグを使う事で特定のカテゴリー記事のみを表示する事が出来ます。また、「foreach」を使う事で配列に入っている値を全て出力させます。
以前は「query_posts」で出力するケースもありましたが、現在は非推奨なので注意が必要です。


「get_posts」で出力

出力する記事のフォーマット指定
<?php
$arg = array(
'posts_per_page' => 4, // 表示する件数
'orderby' => 'date', // 日付でソート
'order' => 'DESC', // DESCで最新から表示、ASCで最古から表示
'category_name' => 'news', // 表示したいカテゴリーのスラッグを指定
//'tag' => 'post'//表示したいタグをスラッグ指定
);
$posts = get_posts( $arg );
if( $posts ): ?>

「foreach」で条件に当てはまる記事を表示

<!-- ループ開始 -->
<?php
foreach ( $posts as $post ) :
setup_postdata( $post );
?>
<dt><?php the_time('Y年m月d日'); ?></dt>
<dd>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</dd>
<?php endforeach; ?>
<!-- ループ終了 -->


<?php
/// 必ずクエリをリセット
  endif;
  wp_reset_postdata();
?>

フォントサイズを画面幅に応じて可変にする

emを使ったフォントサイズ

emは親要素のフォントサイズをそのまま継承します。一見すると判りやすいですが構造が複雑になってくると、複利計算されてしまい判り難くなってしまいます。


remを使ったフォントサイズ

次にremを使ったフォントサイズの指定です。
「rem」とは、「em」や「%」の場合、親要素(が基準)に対して相対的に指定する単位になりますが、「rem」は「root em」の略の通り、root要素(最上位の要素)に対して相対的に指定する単位の事です。

remを使う時の注意点

remをそのまま使うと計算式が非常に複雑になるので、注意が必要です。
主要ブラウザーのデフォルトの文字サイズである16pxを基準値として使い回せるように、まずはベースフォントサイズを作ります。htmlに「%」を使って、基準値サイズの「16px」を「10px」になるように記述します。こうすることで、フォントのサイズを「16px」にするためには「1.6rem」、「20px」にするには「2rem」という風にわかりやすい値で指定できるようになります。
また、bodyl要素に「font-size: 1.6rem;」を指定しないとfont-sizeを指定していない箇所のfont-sizeが全て10pxになってしまうので注意が必要です。

html { font-size: 62.5%; } /* 10px */
body { font-size: 1.6rem; } /* 16px */


h1 {
font-size:4.0rem; /* 40px */
}

スマホ時にフォントサイズを画面幅に応じて可変にする

フォントサイズを可変にするには上記のremにvwとcalcを合わせて使用します。
ルート(html)のfont-sizeをcalc(100vw / 32)とすることで、iPhone5などの画面幅320pxのときは基準のフォントサイズを10pxとし、ルートより下ではremを使っていくという方法です。


@media (max-width:640px){
html{
font-size: calc(100vw / 32);/*iPhoneの最小サイズ320pxの時に10px*/
}
h1 {
font-size:3.2rem;/*320pxの時32pxに*/
}
p {
font-size: 1.4rem;/*320pxの時14pxに*/
}
}

html要素に62.5%を入れずに変数を使って指定する方法

mixin用ファイルに

@mixin font-size($size) {
  font-size: ($size / 16) + rem;
}

各スタイルに

h1{
@include font-size(40);
}