リスト表示の工夫 html で ul要素 ol 要素を使ったCSS デザインの基礎

listのデフォルトスタイル

ul ol 要素に代表されるlist要素は、WEBページよく利用される要素で、様々なビュレットを使用することが出来ますが、よく見かけるのは ベーシックな番号あり、なしリストや、リストスタイルを消したりしたものです。

ナビゲーション用のネストされたULは、WordPressの水平方向に配置されるプライマリーナビゲーションでよく見かけます。

まずは、html4,html5で使われるデフォルトスタイルをみてみましょう。

li { display: list-item }
ol { list-style-type: decimal }
ol ul, ul ol,
ul ul, ol ol { margin-top: 0; margin-bottom: 0 }

html4 (css2) default CSS

dir, dd, dl, dt, ol, ul { display: block; }
li { display: list-item; }

dir, dl, ol, ul { margin-top: 1em; margin-bottom: 1em; }

dir dir, dir dl, dir ol, dir ul,
dl dir, dl dl, dl ol, dl ul,
ol dir, ol dl, ol ol, ol ul,
ul dir, ul dl, ul ol, ul ul {
 margin-top: 0; margin-bottom: 0;
}

dd { margin-left: 40px; } /* LTR-specific: use 'margin-right' for rtl elements */
dir, ol, ul { padding-left: 40px; } /* LTR-specific: use 'padding-right' for rtl elements */

ol { list-style-type: decimal; }

dir, ul { list-style-type: disc; }

dir dir, dir ul,
ol dir, ol ul,
ul dir, ul ul {
 list-style-type: circle;
}

dir dir dir, dir dir ul,
dir ol dir, dir ol ul,
dir ul dir, dir ul ul,
ol dir dir, ol dir ul,
ol ol dir, ol ol ul,
ol ul dir, ol ul ul,
ul dir dir, ul dir ul,
ul ol dir, ul ol ul,
ul ul dir, ul ul ul {
 list-style-type: square;
}

A vocabulary and associated APIs for HTML and XHTML

dir Not Supported in HTML5.

基本:リストマーカーの色の変更

新しい、リストマーカーの色の変更方法
ul.marker-test li::marker {
 color: red;
}
  • マーカーは赤で表示します
  • マーカーは赤で表示します
  • マーカーは赤で表示します

Can I use... ::marker

古くなった記事

リストマーカーの色は、親要素のcolorが反映します。白背景で、色が黒ならば、リストマーカー色は黒になります。
リストマーカーの色を変える場合は、li要素内に何かしらの子要素を追加して、子要素の色を別の色に指定する事で、マーカーだけ色を変えることが出来ます。

WordPressのテーマのサイドバー、例えば TwentySixteenなどでアーカイブウィジェットなどを設置すると、リストマーカーが表示されますが、リストの子要素はa要素になるので、リストマーカーの色の変更はすぐにでもできます。

.widget li{
 color:#27ae60;
}

TwentySixteenテーマなら、これだけのスタイルを追加するだけでリストマーカーの色は変更できます。

投稿本文については

<ul>
 <li>
 <p>....</p>
 </li>
</ul> 

リストの内容により、p要素だったり、span要素だったり何かしらの要素を追加し、ul要素にリストマーカー色を設定し、更にli要素の子要素に色を設定する事でカスタマイズできます。

TwentySixteenで投稿本文に以下のようなリストを書いたとすると

<ul>
 <li><a href="http://example.com">test</a></li>
 <li><span>test</span></li>
 <li><span>test</span></li>
</ul>

style.cssの最後に、

article ul li{
 color:#27ae60;
}
article ul li *:not(a){
 color:#686868;
}

等と指定する事で、リストマーカーの色を変更することが出来ます。

before疑似要素を使って、スタイル付きマーカー

  1. Lorem ipsum dolor sit amet, consectetur adipisicing elit,
  2. sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
  3. Ut enim ad minim veniam, quis nostrud exercitation
  4. Duis aute irure dolor in reprehenderit in voluptate
  5. Excepteur sint occaecat cupidatat non proident
  6. Lorem ipsum dolor sit amet, consectetur adipisicing elit,
<ol class="custom-number-list">
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit,</li>
<li>sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</li>
<li>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat</li>
<li>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur</li>
<li>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit,</li>
</ol>
.custom-number-list{
 list-style: none;
 counter-reset: li 7;/* start="8" と同じ*/
}
.custom-number-list li{
 counter-increment: li;
}
.custom-number-list li:before {
 content: counter(li);
 color: red;
 display: inline-block;
 width: 40px;
 text-align: right;
 padding-right:8px;
 box-sizing:border-box;
}


リスト表示の工夫

リスト要素のビュレットは、数字や、ローマ字、等様々なものが準備されていますが、リスト内の例えばリンクの内容を現すために、特別なビュレットを表示するといった事は出来ません

むしろ、li要素の子要素に:before等で、投稿パーマリンクであれば、アイキャッチ画像、最近の投稿などであれば、new表示等を行う事が多いかもしれません

工夫してみましょう

data 属性を使って、リンクの手前に文字などを表示

HTML

<ul class="icon">
 <li><a href="#" data-status="N">list before</a></li>
 <li><a href="#" data-status="?">list before</a></li>
 <li><a href="#" data-status="!">list before</a></li>
</ul>

CSS

.entry-content .icon li{
 position:relative;
}
.entry-content .icon li{
 list-style:none;
 line-height:1.5;
}
.entry-content .icon li a:before{
 position:absolute;
 content:attr(data-status);
 background:#333;
 color:#fff;
 left:-2em;
 width:1.5em;
 height:1.5em;
 border-radius: 50%;
 display:inline-block;
 text-align:center;
 transform: scale(0.7,0.7);
}
.entry-content .icon li a[data-status="N"]:before{
 background:red;
}
.entry-content .icon li a[data-status^="&#"]:before{
 background:transparent;
}

before セレクタを使ったビュレットの置き換え

  • Lorem ipsum dolor sit amet, consectetur adipisicing elit,
  • sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
  • Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat
  • Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
  • Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum

HTML

<ul class="use-before">
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit,</li>
<li>sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</li>
<li>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat</li>
<li>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur</li>
<li>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</li>
</ul>

CSS

.use-before li{
 list-style:none;
}
.use-before li:before {
 color: #55acee;
 content: '\2022';
 display: block;
 font-size: 20px;
 left: -20px;
 max-height: 0px;
 max-width: 0px;
 position: relative;
 top: -5px;
}

スクリプトからデータ属性を挿入した 番号付きリスト風の表示

jQueryで、data-status属性値を設定

jQuery(function($){
 $('.entry-content .number li a').each(function(i){
 $(this).attr('data-status', (i+1));
 });
});

子要素の数に応じた動的なスタイル指定

WordPressのプライマリーナビゲーション等では、配布テーマ等の場合、メニューの数をあらかじめ想定できないため、メニューが一段になるか2段になるのか検出しようとすると、javascript等が必要になりますが、工夫をすると、CSSだけでもメニューの数に応じたスタイル指定は可能です。

li要素をインラインブロックで表示し、子要素数が10個を超えたら個数に応じて、サイズをコントロールして、2列で表示する例

コントロールなし


以下 コントロールあり



.entry-content ul{
 max-width:100%;
}
.float-dinamic li:nth-child(1):nth-last-child(12), 
.float-dinamic li:nth-child(1):nth-last-child(11), 
.float-dinamic li:nth-child(1):nth-last-child(12) ~li, 
.float-dinamic li:nth-child(1):nth-last-child(11) ~li{
 width:16.6666666667%;
}
.float-dinamic li:nth-child(1):nth-last-child(14), 
.float-dinamic li:nth-child(1):nth-last-child(13), 
.float-dinamic li:nth-child(1):nth-last-child(14) ~li, 
.float-dinamic li:nth-child(1):nth-last-child(13) ~li{
 width:14.2857%;
}
.float-dinamic li:nth-child(1):nth-last-child(16), 
.float-dinamic li:nth-child(1):nth-last-child(15), 
.float-dinamic li:nth-child(1):nth-last-child(16) ~li, 
.float-dinamic li:nth-child(1):nth-last-child(15) ~li{
 width:12.5%;
}

カウンターのカスタマイズ

  • Lorem ipsum dolor sit amet, consectetur adipisicing elit,
  • sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
  • Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat
  • Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur
  • Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum

関連

リスト要素 ul, ol のリストマーカーの位置の調整


新着記事

コメントは受け付けていません。