使用環境
Name | Version |
---|---|
Uikit | 3.17.11 |
boxicons | 2.1.4 |
前書き
vertical-align
は、inline
とinline-block
とtable-cell
で、設定します。*1
検索すると、vertical-align: middle
が効かない旨の記事は多いのです。
しかし、table-cell
のtd
タグでvertical-align: middle
が効かない記事は、簡単には見つかりません。
本題
下記のソースコードは、tr
タグの中に4つのtd
タグがあります。
- 1つ目の
td
タグは、アイコンが表示されるボタン - 2つ目と3つ目の
td
タグは、テキスト - 4つ目の
td
タグも、1つ目と同じアイコン表示のボタン uk-table-middle
で、td
タグにvertical-align: middle
button
タグにuk-text-middle
を記述したが変わらなかったので、削除した
失敗図1の通り、アイコンとテキストが、縦中央の配置に揃いません。
親要素であるtd
タグやbutton
タグにvertical-align: middle
を指定しても、駄目なのです。
テキストとボタン(アイコン)のheight
やline-height
が違うのが、原因なのでしょうか?
<table class="uk-table uk-table-middle uk-table-striped uk-table-small"> <thead> <tr> <th class="uk-text-small uk-text-center uk-width-1-6">詳細</th> <th class="uk-text-small uk-text-center">都道府県名</th> <th class="uk-text-small uk-text-center">市町村計</th> <th class="uk-text-small uk-text-center">市町村一覧</th> </tr> </thead> <tbody> <tr> <td class="uk-text-center"> <button class="uk-button uk-button-link uk-text-primary"> <i class="bx bx-20px bxs-info-circle"></i> </button> </td> <td class="uk-text-small uk-text-center">北海道</td> <td class="uk-text-small uk-text-center">185</td> <td class="uk-text-center"> <button class="uk-button uk-button-link uk-text-primary"> <i class="bx bx-20px bx-caret-right-circle"></i> </button> </td> </tr> </tbody> </table>
成功例(1)
i
タグのクラスを、button
タグに記述することで、縦中央に配置しました。
20pxの例
<td class="uk-text-center"> <button class="uk-button uk-button-link bx bx-20px bxs-info-circle"></button> </td>
24pxの例
<td class="uk-text-center"> <button class="uk-button uk-button-link bx bx-24px bxs-info-circle"></button> </td>
おそらく、uk-button
にvertical-align: middle
があるからだと思います。*2
成功例(2)
td
タグの中にdiv
を入れて、Flexbox
で上下左右中央にする。
<td class="uk-text-center"> <div class="uk-flex uk-flex-center uk-flex-middle"> <button class="uk-button uk-button-link uk-text-primary uk-flex"> <i class="bx bx-24px bx-info-circle"></i> </button> </div> </td>
Tailwind CSS
のCatalyst
を参考にしました。
他のCSSフレームワーク
Uikit
に限らず、Bootstrap5.3.2
でも同じでした。*3
Bulma0.9.4
は、上記のようにbutton
に追記すると、枠線が表示され、縦横中央に表示されるので、ボタンぽく見えます。*4
td
タグの中に、i
タグだけを記述した場合、CSS
に下記の追加が必要でした。
td>* { vertical-align: middle; }
或いは
.bx-20px { font-size: 1.25rem!important; vertical-align: middle; }
<td class="has-text-centered"> <i class="bx bx-20px bxs-info-circle"></i> </td>
補足
Boxicons
は、サイズが変更できるのですが、bs-sm
だと24.8px
になるので、設定をみるとfont-size: 1.55rem
でした。
それで、下記のようなクラスを作りました。
.bx-24px { font-size: 1.5rem!important; }
感想
Nunjucks
でHTML
を生成していて、extends
を読み込まず、html
タグやbody
タグがない状態だと、縦中央に配置されていました。
CSS
リセットが関係あるのかな?と思って、height
やline-height
など、色々調べてみましたけど、原因はわかりませんでした。
後書き
この記事を公開した後、上記の記事を見つけました。
td
タグはtable-cell
で、button
タグやi
タグは、inline-block
ですが、何か違いがあるみたいです。