HTML と CSS だけで複数絵文字の羅列を 1 行に収める

まず結果を見たい人向け

ソースコードとサンプル
(HTML 編集が可能なブログサービスでの利用を想定しているため, CSS ではなく HTML の style 属性を使用している.)

作りたいもの (要件)

- 複数の絵文字を連打したい.
- デスクトップでもモバイルでも 1 行で表示したい. (変に改行させたくない.)

実装解説

まず <p> (<div> でも良い) の中に複数の絵文字を連打する. このとき絵文字の種類ごとに <span> で囲む.

<p>
  <span>
    🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
  </span>
  
  <span>
    😇😇😇😇😇😇😇😇😇😇😇😇😇
  </span>
  
  <span>
    🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏
  </span>
</p>

次に Flexbox を用いてこれらの絵文字が横一列に並ぶようにする.

<p style="display: flex;">
  <span>
    🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
  </span>
  
  <span>
    😇😇😇😇😇😇😇😇😇😇😇😇😇
  </span>
  
  <span>
    🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏
  </span>
</p>

このままだと <p> の幅が十分でない場合 (≒ モバイル表示時) に各絵文字がそれぞれ改行され, 複数行に渡り表示される.

そこで, 各絵文字の 1 行目のみを表示するように <p> を調整する. 具体的には, line-height (1 行の高さ) と height (<p> そのものの高さ) を同じ値とし, overflow: hidden を用いてはみ出した部分 (2 行目以降) を隠す.

<p style="display: flex; line-height: 1.5em; height: 1.5em; overflow: hidden;">
  <span>
    🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
  </span>
  
  <span>
    😇😇😇😇😇😇😇😇😇😇😇😇😇
  </span>
  
  <span>
    🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏
  </span>
</p>

なおこのままだと各絵文字は <span> 内で左寄せであるから, 各絵文字の間に微妙な空白が生じることがある. この問題を軽減するため, 各絵文字を text-align: justify; を用いて均等割り付けする.

<p style="display: flex; line-height: 1.5em; height: 1.5em; overflow: hidden; text-align: justify;">
  <span>
    🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰🥰
  </span>
  
  <span>
    😇😇😇😇😇😇😇😇😇😇😇😇😇
  </span>
  
  <span>
    🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏
  </span>
</p>


いいなと思ったら応援しよう!