LoginSignup
0
0

More than 5 years have passed since last update.

アイコンフォント(Font Awesome 等) を使ったリストマーカーをリスト要素のみで実装する

Posted at

i タグを使いたくないときの書き方。
サンプルは Font Awesome 5 を使用。

描画

icon-font-listmarker-without-i-tag.png

コード

<!doctype html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title></title>
    <link href="https://use.fontawesome.com/releases/v5.0.6/css/all.css" rel="stylesheet">

    <style>
      body {
        margin: 0;
      }
      .container {
        width: 360px;
        border: 1px solid gray;
        margin: 0 auto;
      }
      hr {
        border-width: 2px;
      }
      a {
        outline: 1px solid gray;
      }
      a:hover {
        background-color: yellow;
      }

      .sample1 {
        list-style: none;
        padding-left: 0;
      }
      .sample1 li:before {
        font-family: "Font Awesome 5 Free";
        font-weight: 900;
        content: "\f138";
        margin-right: .3em;
      }

      .sample2 {
        list-style: none;
        padding-left: 0;
      }
      .sample2 li {
        margin-left: 1.3rem; /* 追加 */
        text-indent: -1.3em; /* 追加 */
      }
      .sample2 li:before {
        font-family: "Font Awesome 5 Free";
        font-weight: 900;
        content: "\f138";
        margin-right: .3em;
      }
      .sample2 li {
        margin-left: 1.3rem;
        text-indent: -1.3em;
      }

      .sample2b {
        list-style: none;
        padding-left: 0;
      }
      .sample2b li:before {
        font-family: "Font Awesome 5 Free";
        font-weight: 900;
        content: "\f138";
        margin-right: .3em;
        margin-left: 1.3rem;
        text-indent: -1.3em;
      }
      .sample2b li a {
        display: block; /* 追加 */
      }

      .sample2c {
        list-style: none;
        padding-left: 0;
      }
      .sample2c li {
        margin-left: 1.3rem;
        text-indent: -1.3em;
      }
      .sample2c li a:before {
        font-family: "Font Awesome 5 Free";
        font-weight: 900;
        content: "\f138";
        margin-right: .3em;
        margin-left: 1.3rem;
        text-indent: -1.3em;
      }
      .sample2c li a {
        display: block; /* 追加 */
      }

      .sample3 {
        list-style: none;
        padding-left: 0;
      }
      .sample3 li {
        position: relative;
      }
      .sample3 li:before {
        position: absolute;
        top: .25em;
        left: 1rem; /* 左余白 */
        font-family: "Font Awesome 5 Free";
        font-weight: 900;
        content: "\f138";
      }
      .sample3 li a {
        display: block;
        padding-left: 2.3rem; /* 左余白 1rem をプラス */
      }

      .sample3b {
        list-style: none;
        padding-left: 0;
      }
      .sample3b li {
        position: relative;
      }
      .sample3b li a {padding-left: 1.3rem;
        display: block;
        padding-left: 2.3rem; /* 左余白 1rem をプラス */
      }
      .sample3b li a:before {
        font-family: "Font Awesome 5 Free";
        font-weight: 900;
        content: "\f138";
      }

    </style>
  </head>


  <body>

  <div class="container">

    <h2>sample 1</h2>
    <p>改行が入ると2行目以降がリストマーカーの頭と揃い格好悪い</p>
    <ul class="sample1">
      <li><a href="#">りんご</a></li>
      <li><a href="#">ばなな</a></li>
      <li><a href="#">長くて改行が<br>入った場合</a></li>
    </ul>

    <hr>

    <h2>sample 2</h2>
    <p>text-indent と マイナス左マージンで調整。幅いっぱい表示しないならこれでいい</p>
    <ul class="sample2">
      <li><a href="#">りんご</a></li>
      <li><a href="#">ばなな</a></li>
      <li><a href="#">長くて改行が<br>入った場合</a></li>
    </ul>

    <hr>

    <h2>sample 2b</h2>
    <p>スマホ表示でまず必要となる幅いっぱい表示。before 疑似要素は a 要素の内側でなく前に生成されるため、a 要素を "display: block;" でブロック要素にしてもうまくいかない</p>
    <ul class="sample2b">
      <li><a href="#">りんご</a></li>
      <li><a href="#">ばなな</a></li>
      <li><a href="#">長くて改行が<br>入った場合</a></li>
    </ul>

    <hr>

    <h2>失敗例:sample 2b</h2>
    <p>スマホ表示でまず必要となる幅いっぱい表示。before 疑似要素は a 要素の内側でなく前に生成されるため、a 要素を "display: block;" でブロック要素にしてもうまくいかない</p>
    <ul class="sample2b">
      <li><a href="#">りんご</a></li>
      <li><a href="#">ばなな</a></li>
      <li><a href="#">長くて改行が<br>入った場合</a></li>
    </ul>

    <hr>

    <h2>sample 3</h2>
    <p>a 要素を幅いっぱいに。Font Awesome アイコンを使ったリストマーカーを絶対配置で置く</p>
    <ul class="sample3">
      <li><a href="#">りんご</a></li>
      <li><a href="#">ばなな</a></li>
      <li><a href="#">長くて改行が<br>入った場合</a></li>
    </ul>

    <h2>失敗例:sample 3b</h2>
    <p>li でなく a 要素の before 疑似要素にすると、before 疑似要素が a 要素内に位置するため、 "text-decoration: none;" を指定してもリンク線が付いてしまう。</p>
    <ul class="sample3b">
      <li><a href="#">りんご</a></li>
      <li><a href="#">ばなな</a></li>
      <li><a href="#">長くて改行が<br>入った場合</a></li>
    </ul>

  </div>


  </body>
</html>

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0