【コードあり】CSSで縦書き固定メニューを作る方法

この記事では、ページの左右にアンカーリンクのメニューを縦書きにして固定メニューにする方法を紹介します。

1. 右側に固定する

まずこのような、サイドメニューのHTMLを書きます。

続いて、右側に固定していきます。positon:fixedを使って、画面の右側の任意の高さにおきます。

2. CSSで縦書きにする

この記事の肝であるCSSでメニューを縦書きにしていきます。

CSSで縦書きにするには、writing-modeプロパティを使います。

writing-modeプロパティは、テキストの行のレイアウトを水平または垂直に、ブロックのフロー方向を左向きまたは右向きにするかを変えることができます。

値としては、下記のものが指定できます。

説  明
horizontal-tb 横書きにして,上から下へ行ブロックを並べます。 (初期値)
vertical-rl 縦書きにして,右から左へ行ブロックを並べます。
vertical-lr 縦書きにして,左から右へ行ブロックを並べます。

今回は、日本語の縦書きなので、縦(vertical)の右から左(Right to Left)なのでvertical-rlという値を用います。

具体的には以下のような指定をします。

IEは昔から独自仕様で縦書きが可能だったため、プレフィックス付きで変なプロパティがついています。

3. inline-blockの隙間をなくす

あとは、これで見た目を整えていけば良さそうですが、ボタン同士の間に隙間があいてハマったので、そこもまとめておきます。

親要素にfont-size:0;を指定する

letter-spacingを調整したりなど、いくつかの解決方法があるようですがこの方法が一番簡単でした。

display:inline-blockの隙間は、テキストの改行が原因で起こるので、
inline-blockを使った要素の親要素にfont-size:0;を指定すると改善されます。

具体的に今回の当てはめると以下のような書き方になります。

ただし、font-sizeを%指定したい場合は、問題が起こるようなので、その場合は参考にした下記の記事を合わせて読んでみてください。

【参考記事】inline-blockの隙間をなくす方法 – Qiita

【コードあり】縦書き固定メニューの実例紹介

あとは、

  • ボタンの装飾、hover時の表示、スマホ時の表示の調整
  • アンカーリンクへのスクロールアニメーション(jQuery)

を追加したものがこれです。

See the Pen Tategaki Menu by MASATOSHI HANAI (@hanahana0201) on CodePen.

まとめ

この記事では、CSSを使って縦書きの固定メニューの作り方を紹介してきました。

やり方を知ってしまえば、そこまで難しくない実装なので、いつものデザインのアクセントにも使ってみてください。