UL, LIタグで作成したリストの項目の先頭の記号を画像に変更する - CSS

ULタグやLIタグで作成したリストの項目の先頭の記号を画像に変更するコードを紹介します。

概要

ULタグやLIタグで作成したリストの項目の先頭の記号を画像に変更する場合は、スタイルシートのlist-style-imageプロパティを用いて変更します。
メモ
標準で定義されている記号や数値表現に変更する場合のコードはこちらの記事を参照してください。

list-style-image プロパティを利用する方法

書式

スタイルシートに以下の書式で記述をします。
ul li{
 list-style-image: url("(変更するアイコンの画像URL)");
}

実施例

下図の画像を準備します。
mark.svg
mark.svg

ListImageBullet.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
  <link rel="stylesheet" href="ListImageBullet.css" />
	<meta charset="utf-8" />
</head>
<body>
  <div>画像を設定した、リストのデモ</div>
  <ul>
    <li>項目A</li>
    <li>項目B</li>
    <li>項目C</li>
    <li>項目D</li>
    <li>項目E</li>
    <li>項目F</li>
  </ul>
</body>
</html>
ListImageBullet.css
ul li {
  list-style-image: url("mark.svg");
}

上記のHTMLをWebブラウザで表示します。下図のページが表示されます。
項目の記号が指定した画像になりました。ただしサイズが小さいです。

background-image プロパティを利用する方法

先に紹介した list-style-image を利用して画像に変更した場合、画像のサイズによってはアイコンがずれて表示されてしまう場合があります。 また、先の例では画像が小さく表示され、もう少し画像を大きく表示したい場合もあります。
background-imageを利用すると画像の大きさや位置の調整ができます。

書式

background-image を利用する場合の書式は以下の通りです。
この記述では項目の行が複数行になった時に画像の位置がずれたり画像のサイズが変化してしまいます。
ul li{
  margin-left:0px;
  list-style: none;   
  padding-left: 18px;   
  background-image: url("(変更するアイコンの画像URL)"); 
  background-position: left center;   
  background-repeat:no-repeat;
}

実施例

ListImageBulletBack.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
  <link rel="stylesheet" href="ListImageBulletBack.css" />
	<meta charset="utf-8" />
</head>
<body>
  <div>画像を設定した、リストのデモ</div>
  <ul>
    <li>項目A</li>
    <li>項目B</li>
    <li>項目C</li>
    <li>項目D</li>
    <li>項目E</li>
    <li>項目F</li>
  </ul>
</body>
</html>
ListImageBulletBack.css
ul {
  padding: 0 0 0 1rem;
}
ul li {
  font-size:1.2rem;
  margin-left: 0px;
  list-style: none;
  padding: 0.4rem 0.25rem 0.25rem 3.0rem;
  background-image: url("mark.svg");
  background-position: left center;
  background-repeat: no-repeat;
}

表示結果

上記のHTMLファイルをWebブラウザで表示します。下図のページが表示されます。画像の大きさを調整できました。


LIタグ内が複数行になった場合の結果が下図です。画像の大きさが変化してしまいます。
  <ul>
    <li>項目A</li>
    <li>項目B</li>
    <li>項目C1<br />項目C2</li>
    <li>項目D</li>
    <li>項目E</li>
    <li>項目F</li>
  </ul>


before 疑似クラス要素と content プロパティを利用する方法

先の改行時の問題を解決する場合には、before疑似クラスと content プロパティを利用する方法があります。
以下のコードを記述します。
ListImageBulletBefore.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
  <link rel="stylesheet" href="ListImageBulletBefore.css" />
	<meta charset="utf-8" />
</head>
<body>
  <div>画像を設定した、リストのデモ</div>
  <ul>
    <li>項目A</li>
    <li>項目B</li>
    <li>項目C</li>
    <li>項目D</li>
    <li>項目E</li>
    <li>項目F</li>
  </ul>
</body>
</html>
ListImageBulletBefore.css
ul {
  padding: 0 0 0 2rem;
}
  ul li {
    list-style:none;
    font-size:1.2rem;
  }

    ul li::before {
      display: inline-block;
      margin: 0 0 0 0;
      padding: 0 0.5rem 0 0;
      width: 1.2rem;
      content: url("mark.svg");
    }

解説

before疑似要素を記述することで、項目の手前をスタイルシートで表現できます。 before疑似要素の詳細はこちらの記事を参照してください。
今回の実装では content: url("mark.svg"); を記述して画像をLI要素の手前に表示します。
    ul li::before {
      display: inline-block;
      margin: 0 0 0 0;
      padding: 0 0.5rem 0 0;
      width: 1.2rem;
      content: url("mark.svg");
    }

表示結果

上記のHTMLファイルをWebブラウザで表示します。下図のページが表示されます。項目の先頭記号が画像で表示されています。


リストの項目が改行された場合の表示を確認します。
  <ul>
    <li>項目A</li>
    <li>項目B</li>
    <li>項目C</li>
    <li>項目D1<br />項目D2</li>
    <li>項目E</li>
    <li>項目F</li>
  </ul>

改行された場合も画像の大きさは変化しないことが確認できます。

著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。
掲載日: 2009-11-14
改訂日: 2024-09-22
iPentec all rights reserverd.