概要
Firefoxのサイドバーを、マウスオーバーで自動開閉できるようにカスタマイズしました。
通常時は20pxの幅に収納し、マウスを乗せると200pxに展開します。
今回のポイントは、サイドバーを展開してもWebページの表示領域が変わらないことです。
単純にサイドバーの幅を変更する方法では、開閉のたびにWebページが押し縮められてしまいます。
そこで、サイドバーの占有幅を固定し、内部の表示部分だけをWebページの上に重ねる「オーバーレイ方式」を採用しました。
今回の動作確認環境は以下のとおりです。
| 項目 | 環境 |
|---|---|
| ブラウザ | Firefox 158.0(64-bit) |
| サイドバーUI | Nova UI |
| 設定 | sidebar.revamp = true |
| タブ管理 | Tree Style Tab |
| カスタマイズ | userChrome.css |
サンプルコード
以下のCSSを userChrome.css に記載します。
/* ==========================================
Firefox 158 / Nova UI
サイドバー自動開閉(オーバーレイ方式)
通常時:20px
ホバー時:200px
Webページの表示幅は固定
========================================== */
:root {
--sidebar-closed-width: 20px;
--sidebar-open-width: 200px;
--sidebar-animation-speed: 160ms;
}
/* サイドバーの占有幅を固定 */
#sidebar-box {
position: relative !important;
box-sizing: border-box !important;
flex: 0 0 var(--sidebar-closed-width) !important;
width: var(--sidebar-closed-width) !important;
min-width: var(--sidebar-closed-width) !important;
max-width: var(--sidebar-closed-width) !important;
padding: 0 !important;
border: none !important;
overflow: visible !important;
z-index: 4 !important;
transition: none !important;
}
/* サイドバー本体をWebページ上に重ねて表示 */
#sidebar-box > .sidebar-browser-stack {
position: absolute !important;
top: 0 !important;
left: 0 !important;
bottom: 0 !important;
box-sizing: border-box !important;
width: var(--sidebar-open-width) !important;
min-width: var(--sidebar-open-width) !important;
max-width: var(--sidebar-open-width) !important;
height: 100% !important;
/* 通常時は20pxだけ残して非表示 */
clip-path: inset(
0
calc(var(--sidebar-open-width) - var(--sidebar-closed-width))
0
0
) !important;
opacity: 0 !important;
z-index: 4 !important;
transition:
clip-path var(--sidebar-animation-speed) ease !important;
}
/* マウスオーバー時に展開 */
#sidebar-box:hover > .sidebar-browser-stack {
clip-path: inset(0) !important;
opacity: 1 !important;
}
/* サイドバー内部ブラウザの幅を固定 */
#sidebar-box > .sidebar-browser-stack > #sidebar {
width: var(--sidebar-open-width) !important;
min-width: var(--sidebar-open-width) !important;
height: 100% !important;
}
/* サイドバーの境界線を非表示 */
#sidebar-splitter {
display: none !important;
}
CSSを保存したら、Firefoxを再起動して反映します。
詳細
userChrome.cssの有効化
Firefoxの画面をCSSでカスタマイズするには、userChrome.css を有効にする必要があります。
まず、Firefoxのアドレスバーに about:config と入力します。
続いて、以下の設定を検索し、値を true に変更します。
toolkit.legacyUserProfileCustomizations.stylesheets
次に、about:support を開き、「プロファイルフォルダー」から使用中のプロファイルを確認します。
プロファイルフォルダー内に chrome フォルダーを作成し、その中に userChrome.css を配置します。
既にファイルがある場合は、今回のCSSを追記するか、既存のサイドバー関連CSSと置き換えてください。
Webページの表示幅を固定する仕組み
通常、FirefoxのサイドバーはWebページと横並びに配置されています。
そのため、サイドバーの幅を20pxから200pxに変更すると、Webページの表示領域も変化します。
今回のCSSでは、外側の #sidebar-box の幅を常に20pxに固定しています。
#sidebar-box {
flex: 0 0 20px !important;
width: 20px !important;
min-width: 20px !important;
max-width: 20px !important;
}
これにより、サイドバーがレイアウト上で占有する幅を一定に保っています。
一方、内部の .sidebar-browser-stack は position: absolute で配置し、幅を200pxに固定しています。
#sidebar-box > .sidebar-browser-stack {
position: absolute !important;
width: 200px !important;
}
この構成にすることで、サイドバーの表示部分だけをWebページの上に重ねられるようになります。
マウスオーバーによる開閉
サイドバーの開閉には clip-path を使用しています。
通常時は200pxのサイドバーのうち、左端20pxだけが表示対象になるように切り取ります。
clip-path: inset(0 180px 0 0);
マウスオーバー時には、切り取りを解除します。
#sidebar-box:hover > .sidebar-browser-stack {
clip-path: inset(0) !important;
opacity: 1 !important;
}
これによって、Webページのレイアウトを変更せずにサイドバーを展開できます。
収納時のタブ表示を非表示にする
当初は、収納した20px部分にTree Style Tabのアクティブタブの枠が残っていました。
そこで、通常時に opacity: 0 を指定し、収納中の内容を透明にしています。
マウスオーバー時には opacity: 1 に切り替えることで、サイドバーの内容が表示されます。
なお、収納時の20px部分は見た目上は透明ですが、マウスオーバーの判定領域として残ります。
幅やアニメーション速度の調整
収納幅、展開幅、アニメーション速度は、CSSの冒頭で変更できます。
:root {
--sidebar-closed-width: 20px;
--sidebar-open-width: 200px;
--sidebar-animation-speed: 160ms;
}
例えば、展開幅を250pxに変更したい場合は、--sidebar-open-width を 250px に変更するだけです。
ただし、現在のCSSでは透明度の切り替えは即時に行われ、clip-path のみにアニメーションが適用されます。
注意点
今回のCSSは、Firefox 158.0のNova UI環境で動作を確認しています。
Firefoxのアップデートによって内部の要素構造やスタイルが変更された場合、正常に動作しなくなる可能性があります。
また、既存のサイドバー用CSSと競合する場合があるため、導入前に userChrome.css をバックアップしておくことをおすすめします。
おすすめ書籍
1冊ですべて身につくHTML & CSSとWebデザイン入門講座
1冊ですべては身につきませんが、HTML と CSS について丁寧に解説されています。全体像を理解できるので初心者にもお勧めです。
CSS設計完全ガイド ~詳細解説+実践的モジュール集
CSS について学ぶのであれば必須の1冊です。丁寧に解説されていますので内容についてもわかりやすいです。CSS 設計で重要視しなければいけないポイントや、保守性の高いコードを書くためのルールが具体的な例と一緒に書かれています。CSS だけでなく他のコードを書く際にもこの考え方が役に立つためおすすめします。ただ、書籍版は分厚いのでご注意ください。
関連記事

おわりに
Firefoxのサイドバーを、マウスオーバーで自動開閉する方法を紹介しました。
今回の方法では、サイドバーの占有幅を20pxに固定し、必要なときだけ200pxのサイドバーをWebページの上に重ねて表示します。
これによって、Webページの表示領域を変更せずにサイドバーを開閉できるようになりました。
Tree Style Tabなどのサイドバーを活用しながら、Webページの表示領域も広く確保したい場合に便利なカスタマイズです。