
Webサイト制作において、「開催日時:〇月〇日」「場所:〇〇ホール」のような「項目名」と「内容」が対になったリストを作成するシーンは頻繁にあります。
リッチテキストエディタでこれらを作ろうとすると、インデントがズレたり、スマホ表示で崩れたりと苦労しがちです。また、HTMLの <table> タグはレスポンシブ対応が難しく、スマホで見づらくなる原因になります。
今回紹介するのは、こうした情報を美しく、かつSEOに強い構造で表示できる「定義リスト(Definition List)」モジュールです。


このモジュールの目的は、**「情報のペア(項目と内容)を整理して見やすく表示すること」**です。
主なメリット:
<dl>, <dt>, <dd> タグを使用しているため、検索エンジンに文書構造を正しく伝えられます。このデザインは、以下のような場面で特に効果を発揮します。
このコードをDesign Managerでカスタムモジュールとして実装した後の、ページエディタ(編集画面)での操作方法です。
モジュールの設定パネルには以下の項目が表示されます。
「Styles」タブ(またはグループ)を開くと、以下のデザインを直感的に変更できます。
HubSpotのDesign Managerで「新規モジュール」を作成し、以下のコードをそれぞれの箇所に貼り付けてください。
フィールド定義です。繰り返しフィールド(Items)と、スタイル設定用フィールド(Styles)で構成されています。
[
{
"allow_new_line": false,
"display_width": null,
"id": "6ef51c75-6d87-4d6f-bc68-1beedff13aac",
"label": "title",
"locked": false,
"name": "title",
"required": false,
"type": "text"
},
{
"children": [
{
"allow_new_line": false,
"display_width": null,
"id": "440c75fa-45a0-401b-b719-4fed4bf08a97",
"label": "row_title",
"locked": false,
"name": "row_title",
"required": false,
"type": "text"
},
{
"display_width": null,
"id": "1e3b082c-a362-5dbc-a2b2-6f5b4dde9f52",
"label": "content",
"locked": false,
"name": "content",
"required": false,
"type": "richtext"
}
],
"default": [],
"display_width": null,
"expanded": false,
"group_occurrence_meta": null,
"id": "0fec1fe5-d3c2-131e-595b-989d357cf578",
"label": "items",
"locked": false,
"name": "items",
"occurrence": {},
"required": false,
"tab": "CONTENT",
"type": "group"
},
{
"children": [
{
"default": {
"color": null,
"opacity": null
},
"display_width": null,
"id": "764c03b3-19ad-3234-2a17-9521b1d8b7a3",
"label": "title_color",
"locked": false,
"name": "title_color",
"required": false,
"type": "color"
},
{
"display": "text",
"display_width": null,
"id": "360fd10e-2290-cf85-3c03-fc4797ff6b22",
"label": "title_size",
"locked": false,
"name": "title_size",
"required": false,
"step": 1,
"type": "number"
},
{
"default": {
"color": null,
"opacity": null
},
"display_width": null,
"id": "affa2a09-3769-cf50-8255-910426c8a58e",
"label": "label_color",
"locked": false,
"name": "label_color",
"required": false,
"type": "color"
},
{
"default": {
"color": null,
"opacity": null
},
"display_width": null,
"id": "55c972d5-db0a-1b5d-5d09-f06365a575c8",
"label": "text_color",
"locked": false,
"name": "text_color",
"required": false,
"type": "color"
},
{
"display": "text",
"display_width": null,
"id": "42368473-da19-6609-db94-dbf157f38a84",
"label": "text_size",
"locked": false,
"name": "text_size",
"required": false,
"step": 1,
"type": "number"
},
{
"default": {
"color": null,
"opacity": null
},
"display_width": null,
"id": "35e4dc65-e6ad-4a9a-c491-bddf2339ff38",
"label": "bg_color",
"locked": false,
"name": "bg_color",
"required": false,
"type": "color"
},
{
"default": {
"color": null,
"opacity": null
},
"display_width": null,
"id": "f4b21074-995c-6aee-f577-04dc5055b2cc",
"label": "border_color",
"locked": false,
"name": "border_color",
"required": false,
"type": "color"
},
{
"display": "text",
"display_width": null,
"id": "107200a3-53b1-539c-ead1-5e6efa863794",
"label": "border_size",
"locked": false,
"name": "border_size",
"required": false,
"step": 1,
"type": "number"
}
],
"default": {
"title_color": {
"color": null,
"opacity": null
},
"label_color": {
"color": null,
"opacity": null
},
"text_color": {
"color": null,
"opacity": null
},
"bg_color": {
"color": null,
"opacity": null
},
"border_color": {
"color": null,
"opacity": null
}
},
"display_width": null,
"expanded": false,
"group_occurrence_meta": null,
"id": "04d537c8-1df0-59fe-bb36-052c050d4360",
"label": "styles",
"locked": false,
"name": "styles",
"required": false,
"tab": "CONTENT",
"type": "group"
}
]{# モジュール固有のIDをクラスとして付与 #}
<div id="seminar-{{ module.id }}" class="seminar-module">
{# タイトルエリア #}
{% if module.title %}
<h2 class="seminar-module__title">{{ module.title }}</h2>
{% endif %}
{# リストエリア #}
<div class="seminar-module__container">
{% for item in module.items %}
<dl class="seminar-module__row">
<dt class="seminar-module__label">{{ item.row_title }}</dt>
<dd class="seminar-module__content">{{ item.content }}</dd>
</dl>
{% endfor %}
</div>
</div>
{# スタイル変数の定義 #}
{% require_css %}
<style>
#seminar-{{ module.id }} {
--title-color: {{ module.styles.title_color.css || '#003366' }};
--label-color: {{ module.styles.label_color.css || '#003366' }};
--text-color: {{ module.styles.text_color.css || '#333333' }};
--bg-color: {{ module.styles.bg_color.css || '#f8f8f8' }};
--border-color: {{ module.styles.border_color.css || '#cccccc' }};
--border-size: {{ module.styles.border_size || 1 }}px;
--title-size: {{ module.styles.title_size || 28 }}px;
--text-size: {{ module.styles.text_size || 16 }}px;
}
</style>
{% end_require_css %}
.seminar-module {
width: 100%;
max-width: 960px;
margin: 0 auto;
padding: 20px 0;
box-sizing: border-box;
}
/* タイトル */
.seminar-module__title {
color: var(--title-color);
font-size: var(--title-size);
font-weight: bold;
margin-bottom: 20px;
line-height: 1.4;
}
/* リスト全体枠 */
.seminar-module__container {
background-color: var(--bg-color);
padding: 30px;
border-radius: 4px;
box-sizing: border-box; /* パディングを幅に含める */
}
/* 各行の設定 */
.seminar-module__row {
display: flex;
flex-wrap: nowrap; /* デスクトップでは折り返さない */
align-items: baseline; /* テキストのベースラインで揃える */
border-bottom: var(--border-size) solid var(--border-color);
padding: 20px 0;
margin: 0;
box-sizing: border-box;
}
/* 最後の行だけ線を消す */
.seminar-module__row:last-child {
border-bottom: none;
padding-bottom: 0;
}
.seminar-module__row:first-child {
padding-top: 0;
}
/* 左側:項目名 */
.seminar-module__label {
/* 幅の設定 */
width: 20%;
min-width: 120px; /* 最低限の幅を確保 */
/* スタイル */
color: var(--label-color);
font-weight: bold;
font-size: var(--text-size);
/* リセットと配置 */
margin: 0; /* デフォルトの余白を消す */
padding-right: 20px;
box-sizing: border-box; /* paddingを含めて20%にする */
flex-shrink: 0; /* 幅が縮まないようにする */
}
/* 右側:内容 */
.seminar-module__content {
/* 幅の設定 */
width: 80%;
flex-grow: 1; /* 余ったスペースを埋める */
/* スタイル */
color: var(--text-color);
font-size: var(--text-size);
line-height: 1.8;
/* リセット */
margin: 0; /* デフォルトの余白(特にddタグの左余白)を消す */
box-sizing: border-box;
}
/* リッチテキスト内のリンク色調整 */
.seminar-module__content a {
color: #0000EE;
text-decoration: underline;
}
/* --- モバイル対応(スマホのみ縦並びにする) --- */
@media (max-width: 767px) {
.seminar-module__container {
padding: 20px;
}
.seminar-module__row {
display: block; /* フレックスを解除して縦積みに */
}
.seminar-module__label {
width: 100%;
margin-bottom: 8px;
padding-right: 0;
}
.seminar-module__content {
width: 100%;
}
}
いいえ、必要ありません。記事の「スタイルの調整 (Styles)」セクションにある通り、このモジュールにはスタイル設定機能が組み込まれています。HubSpotのページエディタ上で、カラーピッカーや数値入力を使って、文字色、背景色、フォントサイズ、枠線の色などを直感的に変更できます。
自動的に「縦並び」に切り替わります。このモジュールはレスポンシブ対応しており、PCのような広い画面では「項目名」と「内容」が横並びになりますが、スマートフォンのような狭い画面では読みやすさを優先して、縦に積み重なるレイアウトに変化します。
特に制限はありません。「Items」フィールドは繰り返しグループ(リピーター)として設定されているため、ページエディタの「Add」ボタンを押すことで、必要な数だけ行を追加・削除・並べ替えすることができます。