現象
Googleが提供するMaterial Design Iconsを使用しています。
文中にリンクを設置し、合わせて新規タブで開くことを示すこのようなアイコンを使用した際、
意識しないと少し上にズレてしまう現象が起こりませんか?
今回は解決したときの備忘録として記します。
解決法
2パターンご紹介します。
コードとイメージ図
See the Pen 【CSS】文中のアイコンを上下に揃える by YousukeSasaki (@yousukesasaki) on CodePen.
前提
- 赤枠は通常の
p
タグ、青枠はリンク部分のa
タグです。 - 文字とアイコン共に
font-size: 24px
-
line-height: 24px
で文字の大きさと統一
①アイコンに対してvertical-align: ◯◯px
で微調整
垂直方向の位置を調整するなら真っ先に思いつくのがvertical-align
プロパティですよね。
真ん中に揃えたいのだからvertical-align: middle
でいいのでは?と私も思ったのですが、
英字・ひらがな・漢字・アイコンなど…
様々な物を1つの文章の中に載せようとすると
基準となる中央が揃わなくなってしまうみたいです…
こちらのサイトでわかりやすく図で紹介されているので気になった方はご覧ください。
理解しておきたい、CSSによるインラインレイアウトの仕組み(font-size/line-height編)Inline Layout─Frontrend Conference | HTML5Experts.jp
なのでmiddle
を使うのではなく、面倒ではありますが
vertical-align
を何も指定しない場合の初期値baseline
から
上下に微調整する方法として、◯◯px
などの具体的な値を入力します。
冒頭の画像は文字とアイコン共に24px
で揃えておりますが、
アイコンが上に3px
ズレていたので今回は-3px
として下方向にズラしました。
baseline
の詳細はこちら
vertical-align-スタイルシートリファレンス
②リンクに対してdisplay: inline-flex
とalign-items: center
の組み合わせ
青枠のa
タグに
-
display: inline-flex
と align-items: center
を付けています。
inline-flexとは
「inline-block」の性格を持ちながら、尚且つ「flex」の性格を持ちます。
FlexBoxの使い方(4)〜display:inline-flexについて(動画あり) | IT工房|AI入門とWeb開発
Flexboxをinline要素の中で使うことができるんですね。これは便利!
なので青枠のリンク全体をFlexboxとしてしまい、
Flexboxの中でalign-items: center
で垂直方向に中央寄せにする方法です。
補足
冒頭のイメージ図をご覧になっていただいておわかりの通り、
両者の1番の大きな違いは
p
タグがborderを含んだ高さとなるかならないかです。
イメージ図では視覚的にわかりやすくするためにあえてボーダーを(しかも太めに)設定していますが、
通常は文章中にborderを設定することはないのであまり気にしなくても大丈夫かと思います
また、文字とアイコンのfont-size
が同じでも、
隣り合う文字とアイコンの組み合わせによっては必ずしも見た目が揃うとは限らないので、
適宜アイコンの方のサイズを調整してください。
以上です!