🍗

【shopifyテーマ開発】おしゃれなFAQページをLiquidで実装

2022/07/25に公開

こんにちは。PeiWebです。
今回は、shopifyでFAQを実装したので、アウトプットします。
使い回しもできるのでけっこうおすすめです。

完成形

完成形完成したFAQページ

まずは、FAQの固定ページを作成していきます。

jsonファイルの作成

json
{
  "sections": {
    "main": {
      "type": "main-page-faq",
      "settings": {}
    }
  },
  "order": ["main"]
}

schemaの定義

次に、セクションフォルダ内にliquidファイル「main-page-faq.liquid」を作成します。
schemaの定義はこんな感じです。

liquid
{% schema %}
{
 "name": "FAQ",
 "tag": "section",
 "class": "faq-section",
 "blocks":[
   {
     "name": "質問項目",
     "type": "faq",
     "settings": [
       {
         "id": "question",
         "label": "質問",
         "type": "text",
         "default": "質問を入力してください"
       },
       {
         "id": "answer",
         "label": "回答",
         "type": "richtext",
         "default": "<p>回答を入力してください</p>"
       }
     ]
   }
 ]
}
{% endschema %}

shopify上で、どのように表示されるか確認します。
セクションの中身セクションの中身
settingsの中身質問項目のsettingsの中身

しっかり実装されていますね^^

次に、HTML,CSSを組み込んでページを表示させていきます。

FAQページを実装

まずは、liquidファイルはこんな感じです。

liquid
<link rel="stylesheet" href="{{ 'section-main-page.css' | asset_url }}" media="print" onload="this.media='all'">
<link rel="stylesheet" href="{{ 'component-rte.css' | asset_url }}" media="print" onload="this.media='all'">
<link rel="stylesheet" href="{{ 'page-faq.css' | asset_url }}" media="print" onload="this.media='all'">
 
<noscript>{{ 'section-main-page.css' | asset_url | stylesheet_tag }}</noscript>
<noscript>{{ 'component-rte.css' | asset_url | stylesheet_tag }}</noscript>
 
<div class="page-width page-width--narrow">
  <h1 class="main-page-title page-title h0">
    {{ page.title | escape }}
  </h1>
  <div class="rte">
    {{ page.content }}
  </div>
 </div>
{% comment %} FAQの中身 {% endcomment %}
<div class="faq__contents">
  {% for block in section.blocks %}
  {% assign item = block.settings %}
	<div class="faq__contents--tab">
		<input id="tab-checkbox__{{forloop.index }}" type="checkbox" name="tabs">
		<label for="tab-checkbox__{{forloop.index }}">
		{{ item.question }}</label>
		<div class="faq__contents--answer">
		  {{ item.answer }}
		</div>
	</div>
  {% endfor %}
</div>

あとは、CSSを記述するだけです。

CSSファイル

cssファイルはこんな感じ。。

css
.faq__contents,
.faq__contents ::after,
.faq__contents ::before {
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

.faq__contents .faq__contents--tab {
  position: relative;
  margin: 10px 10px;
  width: 90%;
  color: #f7f7f7;
  overflow: hidden;
}

.faq__contents .faq__contents--tab input {
  position: absolute;
  opacity: 0;
}

.faq__contents .faq__contents--tab label {
  display: block;
  position: relative;
  line-height: 1.6em;
  margin: 0;
  padding: 1em 2em 1em 2.5em;
  cursor: pointer;
  text-indent: 1em;
  border-radius: 0.5em;
  background: rgba(7, 114, 222, 0.7);
  font-weight: 700;
}

.faq__contents .faq__contents--tab label::before {
  /* font-family: serif; */
  font-size: 1.5em;
  margin-left: -2em;
  padding-right: 0.5em;
  content: 'Q : ';
}

.faq__contents .faq__contents--tab label:hover {
  transition: all 0.3s;
  background: rgba(16, 109, 201, 0.9);
}

.faq__contents .faq__contents--tab label::after {
  content: '+';
  display: inline-block;
  position: absolute;
  top: 0;
  right: 0;
  font-size: 1.7em;
  font-weight: 700;
  line-height: 2em;
  width: 2em;
  height: 2em;
  -webkit-transition: transform 0.4s;
  transition: transform 0.4s;
}


.faq__contents .faq__contents--tab .faq__contents--answer {
  position: relative;
  overflow: hidden;
  max-height: 0;
  padding: 0 0 0 2.5em;
  -webkit-transition: max-height 0.2s;
  transition: max-height 0.2s;
  border-radius: 0 0 0.5em 0.5em;
  background: rgba(7, 114, 222, 0.7);
}

.faq__contents .faq__contents--tab .faq__contents--answer::before {
  position: absolute;
  margin: 0.4em 0 0 -1em;
  padding: 0;
  font-size: 1.4em;
  content: 'A : ';
  color: rgb(40, 40, 40);
}

.faq__contents .faq__contents--tab .faq__contents--answer p {
  margin: 1em;
  color: rgb(40, 40, 40);
}

.faq__contents .faq__contents--tab input:checked~.faq__contents--answer {
  max-height: 40em;
  background-color: #f6f6f6;
}


.faq__contents .faq__contents--tab input:checked~label {
  border-radius: 0.5em 0.5em 0 0;
}

.faq__contents .faq__contents--tab input[type=checkbox]:checked+label::after {
  -webkit-transform: rotateZ(45deg);
  transform: rotateZ(45deg);
  -webkit-transform-origin: 50% 50%;
  transform-origin: 50% 50%;
}

色とか、余白とかフォントとか自由にカスタマイズすることができます。個人的には、hoverするときは、背景色を色を濃くしたりするのが好きです。


最後に、、、
少しでも参考になれば記事にイイねしていただけますと嬉しいです。

Webサイト & ECサイト構築のご相談・ご依頼はTwitterのDMまでお願いいたします!
お待ちしております^^
https://twitter.com/pei_traveler


Discussion