- Open about:config and set toolkit.legacyUserProfileCustomizations.stylesheets to true.
- Open a new tab on about:support and click the button next to “Profile Folder“
- Go to the “chrome” directory at the profile folder, or create it if it doesn’t exist.
- Create a file named “userChrome.css” (if it doesn’t exist) and open it in a text editor.
- Copy the css code from below (based on multi-row_bookmarks.css)
(copy of the css is at the bottom of this post) - Paste it into userChrome.css and save.
- Restart Firefox
More firefox tweaks at firefox-csshacks
userChrome.css
NOTE: I’ve been told that the old script (see below) stopped working. This new script should work but I didn’t test it. Some time ago I switched to using the Tree Style Tab extension.
/* Makes tabs to appear on multiple lines */
#PersonalToolbar{
--multirow-bmb-n-rows: 3; /* Control how many rows are shown before scrolling */
--multirow-bmb-row-margin: 2px; /* Control how much spacing is between rows */
max-height: none !important;
}
:root[BookmarksToolbarOverlapsBrowser] :where(#PersonalToolbar){
height: unset !important;
}
#PlacesToolbar > hbox:not(#PlacesToolbarDropIndicatorHolder){
display: block;
width: 100vw;
}
#PlacesToolbarItems{
display: flex;
flex-wrap: wrap;
/* --uc-bm-padding is defined in autohide_bookmarks_toolbar.css */
max-height: calc(var(--multirow-bmb-n-rows) * (4px + 1em + (2 * (var(--multirow-bmb-row-margin) + var(--uc-bm-padding,var(--bookmark-block-padding)))))) !important;
overflow-y:auto;
scrollbar-color: var(--lwt-accent-color) var(--toolbar-bgcolor);
scrollbar-gutter: stable;
scrollbar-width: thin;
}
/* Hide the all-bookmarks button */
#PlacesChevron{ display: none }
/* Add some spacing between rows, inline margin is collapsed to prevent dragging issues */
#PlacesToolbarItems > .bookmark-item{
margin: var(--multirow-bmb-row-margin) 0 !important;
border-inline: 2px solid transparent;
visibility: visible !important; /* Just in case they would be hidden for some reason */
}
This is the previous script that worked until Firefox 130 or so (not sure when this broke)
/* Makes tabs to appear on multiple lines */
/* Tab reordering will not work and can't be made to work */
/* You can use multi-row_tabs_window_control_patch.css to move window controls to nav-bar*/
/* It's recommended to move tabs new-tab-button outside tabs toolbar */
/* Change the --multirow-n-rows to change maximum number of rows before the rows will start to scroll */
/* This maximum visible rows won't work before Fx66 */
/* So this setting does nothing on Fx65 and all tab rows will be shown */
:root{
--multirow-n-rows: 5;
--multirow-tab-min-width: 60px;
--multirow-tab-dynamic-width: 1; /* Change to 0 for fixed-width tabs using the above width. */
}
/* Scrollbar can't be clicked but the rows can be scrolled with mouse wheel */
/* Uncomment the next line if you want to be able to use the scrollbar with mouse clicks */
/* .tabbrowser-arrowscrollbox{ -moz-window-dragging: no-drag } */
/* Uncommenting the above makes you unable to drag the window from empty space in the tab strip but normal draggable spaces will continue to work */
#tabbrowser-tabs{
min-height: unset !important;
padding-inline-start: 0px !important
}
/* Selectors for Firefox 71+ */
/* These are not tabs toolbar specific but horizontal scrollbox isn't used elsewhere, except in bookmarks toolbar but there it doesn't have [part] attribute since it's not in shadow-root */
@-moz-document url(chrome://browser/content/browser.xhtml){
.scrollbutton-up[orient="horizontal"][part]~spacer,
.scrollbutton-up[orient="horizontal"][part],
.scrollbutton-down[orient="horizontal"][part]{ display: none }
scrollbox[part][orient="horizontal"]{
display: flex;
flex-wrap: wrap;
overflow-y: auto;
max-height: calc(var(--tab-min-height) * var(--multirow-n-rows));
scrollbar-color: currentColor transparent;
scrollbar-width: thin;
}
}
/* Test for Firefox > 66 */
@supports (inset-block:auto){
#tabbrowser-tabs > .tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox{
display: flex;
flex-wrap: wrap;
overflow-y: auto;
max-height: calc(var(--tab-min-height) * var(--multirow-n-rows));
scrollbar-color: var(--toolbar-bgcolor) var(--lwt-accent-color);
scrollbar-width: thin;
}
#tabbrowser-tabs > .tabbrowser-arrowscrollbox,
#tabbrowser-arrowscrollbox{
overflow: -moz-hidden-unscrollable;
display: block;
}
}
/* Test for Firefox < 66 */
@supports not (inset-block:auto){
#tabbrowser-tabs > .tabbrowser-arrowscrollbox{
min-height: unset !important;
}
#tabbrowser-tabs .scrollbox-innerbox{
display: flex;
flex-wrap: wrap;
}
#tabbrowser-tabs .arrowscrollbox-scrollbox {
overflow: -moz-hidden-unscrollable;
display: block;
}
}
.tabbrowser-tab{ height: var(--tab-min-height); }
#tabbrowser-tabs .tabbrowser-tab[pinned]{
position: static !important;
margin-inline-start: 0px !important;
}
.tabbrowser-tab[fadein]:not([pinned]){
min-width: var(--multirow-tab-min-width) !important;
flex-grow: var(--multirow-tab-dynamic-width);
/*
Uncomment to enable full-width tabs, also makes tab dragging a tiny bit more sensible
Don't set to none or you'll see errors in console when closing tabs
*/
/*max-width: 100vw !important;*/
}
.tabbrowser-tab > stack{ width: 100%; height: 100% }
#scrollbutton-up,
#scrollbutton-down,
#scrollbutton-up~spacer,
#tabbrowser-tabs .scrollbutton-up,
#tabbrowser-tabs .scrollbutton-down,
#alltabs-button,
:root:not([customizing]) #TabsToolbar #new-tab-button,
#tabbrowser-tabs spacer,
.tabbrowser-tab::after{ display: none !important }