はじめに
Simplicity のグローバルメニューのカスタマイズ方法の紹介です。
この記事では、主に 3 つのカスタマイズを紹介しています。
- Font Awesome のアイコンを表示する。
- Font Awesome のアイコンを 1 行目、メニュー名を 2 行目に表示する。
- 子メニュー用に下矢印のアイコンを表示する。
Font Awesome のアイコンを表示
Simplicity のグローバルメニューには、CSS のみで Font Awesome のアイコンを表示できます。
基本的な指定方法
:before
疑似要素と :nth-child
擬似クラスを用いれば、直感的にアイコンを指定できます。
以下の CSS を子テーマの style.css に追加します。
.menu-item > a:before {
display: inline-block;
font: 16px/1 FontAwesome;
margin-right: 4px;
}
.menu > .menu-item:nth-child(1) > a:before {
content: '\f015';
}
これだけで、1 つ目のメニューに Font Awesome のホームアイコンが表示されます。
\f015
は、ホームアイコンの Unicode です。Unicode は、Font Awesome の各アイコンページで確認できます。
2 つ目以降のメニューにもアイコンを表示するには、:nth-child
を使い Unicode を追加します。
.menu-item > a:before {
display: inline-block;
font: 16px/1 FontAwesome;
margin-right: 4px;
}
.menu > .menu-item:nth-child(1) > a:before {
content: '\f015';
}
.menu > .menu-item:nth-child(2) > a:before {
content: '\f06b';
}
.menu > .menu-item:nth-child(3) > a:before {
content: '\f000';
}
.menu > .menu-item:nth-child(4) > a:before {
content: '\f290';
}
.menu > .menu-item:nth-child(5) > a:before {
content: '\f19c';
}
これで全てのメニューにアイコンが表示されます。
2 つ目のメニューには :nth-child(2)
、3 つ目のメニューには :nth-child(3)
と、:nth-child()
の数字を変えます。
アイコンのサイズを大きくする場合
上記の CSS では、16px
でアイコンを表示しています。
これを 24px
にした場合、メニューテキストとのバランスがちょっと崩れてしまいます。
大きなアイコンを表示させる場合は、.menu-item > a:before
に変更を加えます。
.menu-item > a:before {
display: inline-block;
font: 24px/1 FontAwesome;
margin-right: 4px;
position: relative;
top: 2px;
}
バランスの良いしっくりくる表示になりました。
position: relative
と top: 2px
を加えることで、アイコンが 2px 下がっています。
個別に色を付ける
子ども向けサイトや料理系サイトなどでは、カラフルなデザインにすることがよくあります。
アイコンに色を付けて、華やかにしてみます。例えば下記の CSS を指定すると…。
.menu-item > a:before {
display: inline-block;
font: 24px/1 FontAwesome;
margin-right: 4px;
position: relative;
top: 2px;
}
.menu > .menu-item:nth-child(1) > a:before {
color: #e91e63;
content: '\f015';
}
.menu > .menu-item:nth-child(2) > a:before {
color: #ff9800;
content: '\f06b';
}
.menu > .menu-item:nth-child(3) > a:before {
color: #4caf50;
content: '\f000';
}
.menu > .menu-item:nth-child(4) > a:before {
color: #03a9f4;
content: '\f290';
}
.menu > .menu-item:nth-child(5) > a:before {
color: #9c27b0;
content: '\f19c';
}
ポップでカラフルなグローバルメニューになります。
お好きな色を color
で 1 つ 1 つ指定します。
今回使った色は、マテリアルデザインの Color Tool を参考にしました。
モバイル時のメニューテキストの開始位置を揃える
パソコンで見た時は、これまでの CSS だけで十分です。しかし、モバイルで見た時に、メニューテキストの開始位置が揃っていません。
これは FontAwesome のアイコンが、1 つ 1 つ微妙に大きさが違うのが原因。そこで下記の CSS を追加し、メニューテキストの開始位置を揃えます。
@media screen and (max-width: 1110px) {
.menu-item > a:before {
text-align: center;
width: 32px;
}
}
すると、きれいに開始位置が揃います。
width
の値は、お好みの値で構いません。
id や class でアイコンを指定
これまでの説明では、:before
疑似要素と :nth-child
擬似クラスを使いました。メニューの順番どおりに指定するため、直感的にアイコンの Unicode を指定できるのがメリットです。
しかし、セレクタが長くなるデメリットがあります。特に子メニューにアイコンを表示する場合には、下記の CSS のようにセレクタが複雑です。
.menu-item:nth-child(1) .sub-menu .menu-item:nth-child(1) > a:before {
content: '\f015';
}
1 つ目のメニューの 1 つ目の子メニューとの指定をしています。
簡潔なセレクタで指定したい場合は、各メニューに割り当てられた id や class を用います。
各メニューの id や class は、ブラウザのデベロッパーツールで把握できます。
例えば、class の menu-item-91
で指定すればセレクタが簡潔です。
.menu-item-91 > a:before {
content: '\f015';
}
また、各メニューの順番を変更しても CSS を変更する必要がないのもメリット。
簡単にカスタマイズするよりも CSS の効率性を重視される方は、id や class での指定がおすすめです。
メニューを 2 行で表示
サイトによってはメニューを 2 行にし、1 行目にアイコン、2 行目にメニュー名を表示したい時もあります。
メニューを 2 行にするのも CSS で行います。
アイコンを 1 行目に表示
このような CSS を子テーマの style.css に追加すれば、アイコンを 1 行目、メニュー名を 2 行目に表示できます。
@media screen and (min-width: 1110px) {
.menu > .menu-item > a {
text-align: center;
}
}
.menu-item > a:before {
display: block;
font: 24px/1 FontAwesome;
margin-bottom: 4px;
}
.menu > .menu-item:nth-child(1) > a:before {
content: '\f0f5';
}
.menu > .menu-item:nth-child(2) > a:before {
content: '\f11b';
}
.menu > .menu-item:nth-child(3) > a:before {
content: '\f008';
}
.menu > .menu-item:nth-child(4) > a:before {
content: '\f02d';
}
.menu > .menu-item:nth-child(5) > a:before {
content: '\f004';
}
1 行目にアイコンが表示されます。FontAwesome アイコンの表示方法は、先に紹介した方法と同じです。ただ、display: block;
でブロック要素にし、1 行目に表示しています。
2 行で表示するのは PC でのみ、モバイルでは 1 行で表示する場合は、下記の CSS を指定します。
.menu-item>a:before {
font: 24px/1 FontAwesome;
}
@media screen and (min-width: 1110px) {
.menu > .menu-item > a {
text-align: center;
}
.menu-item > a:before {
display: block;
margin-bottom: 4px;
}
}
@media screen and (max-width: 1110px) {
.menu-item > a:before {
display: inline-block;
margin-right: 4px;
position: relative;
text-align: center;
top: 2px;
width: 32px;
}
}
.menu > .menu-item:nth-child(1) > a:before {
content: '\f0f5';
}
.menu > .menu-item:nth-child(2) > a:before {
content: '\f11b';
}
.menu > .menu-item:nth-child(3) > a:before {
content: '\f008';
}
.menu > .menu-item:nth-child(4) > a:before {
content: '\f02d';
}
.menu > .menu-item:nth-child(5) > a:before {
content: '\f004';
}
するとモバイルでは、アイコンがメニュー名の左に表示されます。
英語のサブメニューを表示
アイコンではなく、英語のサブメニュー名の表示も可能です。
Simplicity であれば、下記のような CSS を指定します。
@media screen and (min-width: 1110px) {
.menu > .menu-item > a {
text-align: center;
}
}
.menu-item > a:after {
display: block;
}
.menu > .menu-item:nth-child(1) > a:after {
content: 'Cooking';
}
1 つ目のメニュー「料理」の下に「Cooking」が表示されます。
:nth-child
の数字を変え、2 つ目以降のメニューにもサブメニュー名を表示してみます。
@media screen and (min-width: 1110px) {
.menu > .menu-item > a {
text-align: center;
}
}
.menu-item > a:after {
display: block;
}
.menu > .menu-item:nth-child(1) > a:after {
content: 'Cooking';
}
.menu > .menu-item:nth-child(2) > a:after {
content: 'Game';
}
.menu > .menu-item:nth-child(3) > a:after {
content: 'Movie';
}
.menu > .menu-item:nth-child(4) > a:after {
content: 'Book';
}
.menu > .menu-item:nth-child(5) > a:after {
content: 'Love';
}
これですべてのメニューが、英語のサブメニュー付きで 2 行で表示されます。
下矢印のアイコンを表示
メニューを階層化しているサイトもあるでしょう。
ただ、単に階層化しているだけでは、子メニューのクリック率は低いはずです。例えば下の画像の「メニュー 1」には、3 つの子メニューを設置しています。
見ただけで子メニューがあると分かる方は、おそらくいらっしゃらないでしょう。
では、下の画像の「メニュー 1」は、どうでしょうか?
下矢印が付いているため、さらにメニューがあることがすぐに分かります。
この下矢印も CSS のみで表示できます。
Font Awesome で下矢印を表示
下矢印を表示する最も手軽な方法が、Font Awesome の caret-down を使うもの。
子テーマの style.css に、以下の CSS を指定します。
.menu > .menu-item:nth-child(1) > a:after {
content: '\f0d7';
display: inline-block;
font: 16px/1 FontAwesome;
margin-left: 8px;
}
これで 1 つ目の親メニューの右に、下矢印が表示されます。
2 つ目の親メニューに指定するには、.menu > .menu-item:nth-child(2) > a:after
と:nth-child()
の数字を変えます。
もちろん、.menu > .menu-item:nth-child(1)
は、メニューの id や class での指定でも構いません 。
CSS で三角形を指定する
Font Awesome のアイコンが気に入らない場合は、自分で三角形を作ることも可能です。
例えば、下記のように CSS を指定してみます。
.menu > .menu-item:nth-child(1) > a:after {
border-color: #111 transparent transparent transparent;
border-style: solid;
border-width: 8px 4px 0 4px;
content: '';
display: inline-block;
margin-left: 8px;
position: relative;
top: -1px;
}
1 つ目の親メニューに、CSS で作成した三角形が表示されます。
三角形を作る際は、「CSS 三角形作成ツール」を使うとすごく便利。
三角形の大きさ、矢印の向き、色など、自由自在に簡単に作成できます。しかも、自動的に CSS が生成されるため、コピペで指定が可能です。