Ok dann weiß ich bescheid und warte lieber, denn das Standard Design ist für mich keien Alternative.
Vielen Dank für die Info.
Beiträge von GermanFreme82
-
-
Das Problem sollte in Firefox 140.0.1 behoben sein.
Weißt du zufällig wann das Update kommt ?
Aktuell bekommt man nur Augenschmerzen bei dem Design ! -
Probiere mal diese Version:
JavaScript
Alles anzeigen(function() { if (!window.gBrowser) return; for (let key of document.querySelectorAll('key[keycode="VK_F12"]')) { key.setAttribute('disabled', 'true'); } let key = document.createXULElement('key'); key.id = 'closeTab'; key.setAttribute('keycode', 'VK_F12'); // key.setAttribute('oncommand', 'gBrowser.removeTab(gBrowser.selectedTab, {animate: true})'); document.getElementById('mainKeyset').appendChild(key); document.getElementById('closeTab').addEventListener('command', () => { gBrowser.removeTab(gBrowser.selectedTab, {animate: true}) }); })();
Wow vielen herzlichen Dank das hat funktioniert.
SUPER DANKE !!!!
-
Hallo ihr lieben !
Ich wollte einmal nachfragen, ob jemand mir helfen kann, weil das folgende Script im FF138 nicht mehr geht.
Es sollte mit "F12" den aktuellen TAB schließen und bis FF137 ging das auch noch, aber jetzt in FF138 nicht mehr.JavaScript
Alles anzeigen(function() { if (!window.gBrowser) return; for (let key of document.querySelectorAll('key[keycode="VK_F12"]')) { key.setAttribute('disabled', 'true'); } let key = document.createXULElement('key'); key.id = 'closeTab'; key.setAttribute('keycode', 'VK_F12'); key.setAttribute('oncommand', 'gBrowser.removeTab(gBrowser.selectedTab, {animate: true})'); document.getElementById('mainKeyset').appendChild(key); })();
-
Die Tabs sind ...
- runde Tabs
- Abstände geändert
- Höhe geändert 32px
- Breite geändert 165px
- weißer Rand sehr klein 1px
- kein Hoover Effekt
- kein blau
- kein rot
- keine schwarzen Schatten
- Close Button 2
- Größe für angepinnte Tab 120px
Das sind noch die Dinge an die ich mich erinnern kann.
Ich DANKE allen Beteiligten von ganzen Herzen !
Ohne euch wäre ich echt am Arsc# gewesen.
Vielen Dank das ihr so viel Geduld mit mir gehabt habt !
Ihr seid einfach die BESTEN
Ich sende euch virtuelle Umarmungen und Dankesgrüße
Vielen DANK 💖💖💖💖 -
Hallo alle zusammen !!!
Ich habe nun einige Tage das neue Script getestet und ich finde es super.
Es gefällt mir wie es nun aussieht und die Handhabung ist auch genial.
Ich konnte einige kleinen Dinge auch selbst anpassen, so wie ich es mag.
Aktuell sieht es so aus im Script:userChrome.css
CSS
Alles anzeigen/*----------------------------------------*/ /* Megabar (Url-Bar) die Ecken abgerundet */ /*----------------------------------------*/ /* Adressleiste / Erhöhung wird verhindert */ #urlbar-background { background: #f8f8ff ! important; /* Hintergrund */ border: 1px solid #5badff !important; border-radius: 50px !important; } #urlbar[breakout][breakout-extend] { top: calc((var(--urlbar-toolbar-height) - var(--urlbar-height)) / 2) !important; left: 0 !important; width: 100% !important; } #urlbar[breakout][breakout-extend] > #urlbar-input-container { height: var(--urlbar-height) !important; padding-block: 0 !important; padding-inline: 0 !important; } #urlbar[breakout][breakout-extend][breakout-extend-animate] > #urlbar-background { animation-name: none !important; } #urlbar[breakout][breakout-extend] > #urlbar-background { box-shadow: none !important; } /* Suchleiste Ecken abrunden */ #searchbar { background: #f8f8ff ! important; /* Hintergrund */ border-radius: 50px !important; border: 1px solid #5badff !important; } /* -------------------------------------*/ /* Kontext-Menü / Einträge ausgeblendet */ /* -------------------------------------*/ #context-viewinfo, #textnotes_gaborjuhaszprojects_com-menuitem-_textnotes, #_lympha-menuitem-_lympha-ctx-btn { display: none !important; } #context_pinTab, #context_moveTabOptions, #context_reopenInContainer, #context_sendTabToDevice, #context-sendlinktodevice, #context-inspect-a11y, #context-openlink, #context-openlinkprivate, #context-bookmarklink, #context-inspect, #context-openlinkinusercontext-menu, #context-viewpartialsource-selection, #context-sep-sendlinktodevice, #inspect-separator, #context-sendpagetodevice, #context-viewbgimage, #context-selectall, #context-viewsource, #context-sep-sendpagetodevice, #context-sep-viewbgimage, #contentAreaContextMenu > menuseparator:nth-child(93), #context-sendimage, #context-setDesktopBackground { display: none !important; } #context_duplicateTab { order: -1 !important; } #context-openlinkintab { order: -1 !important; } #context-copylink { order: -1 !important; } #copyplaintext_eros_man-menuitem-_copyPlainText { order: -1 !important; } #context-copy { order: -1 !important; } #_5dd73bb9-e728-4d1e-990b-c77d8e03670f_-menuitem-_search_engine_menu { order: 20 !important; } #context-print-selection, #textnotes_gaborjuhaszprojects_com-menuitem-_textnotes-selection { display: none !important; } menuitem[label="Ein Schlüsselwort für diese Suche hinzufügen…"] { display: none !important; } /*-------------------------------------------------------*/ /* Trennstrich + Hintergrund für TAB geschlossen Button */ /*-----------------------------------------------------*/ #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action .toolbarbutton-badge-stack { background: #FF8F00 !important; border-radius: 35px !important; } #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action:hover .toolbarbutton-badge-stack { background-color: #FF0039 !important; border-radius: 35px !important; } #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action { margin-left: 12px !important; margin-right: 12px !important; } /*--------------------------------------------*/ /* Ordnersymbole für Symbolleiste und Sidebar */ /*--------------------------------------------*/ @-moz-document url-prefix(chrome://browser/content/browser.xhtml), url("chrome://browser/content/places/places.xhtml") { .bookmark-item[container="true"]{ list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important; } } @-moz-document url("chrome://browser/content/places/bookmarksSidebar.xhtml") { treechildren::-moz-tree-image(container) { list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important; } } /**********************************************/ /* Anpassungen für MultiRowTabs.uc.js (START) */ /**********************************************/ .tabbrowser-tab[pinned] { flex-grow: 0 !important; min-width: 120px !important; } .tabbrowser-tab .tab-label { text-shadow: 1px 1px 0px #000000 !important; } .tab-background[selected], .tabbrowser-tab:hover > .tab-stack > .tab-background:not([selected]), .tabbrowser-tab:hover:not([selected]) :is(.tab-label,.tab-icon-stack), .tabbrowser-tab:hover > .tab-stack > .tab-background[multiselected]:not([selected]), .tab-background:not([selected]), .tab-background[multiselected]:not([selected]) { filter: initial !important; } .tab-sharing-icon-overlay, .tab-icon-overlay:not([pinned]), .tab-icon-overlay[soundplaying] { transform: scale(1.0) !important; } #TabsToolbar #tabs-newtab-button > image { min-height: initial !important; max-height: initial !important; min-width: initial !important; max-width: initial !important; } #TabsToolbar #tabs-newtab-button > image { padding: 7px !important; } /*Abstände der Tabs*/ .tabbrowser-tab { margin-bottom: -4px !important; margin-top: -3px !important; margin-right: -3px !important; } /*Aktiver Tab Hintergrund orange*/ tab.tabbrowser-tab[selected] stack.tab-stack vbox.tab-background { background: rgb(240,152,0) !important; box-shadow: none !important; border-radius: 30px !important; border: 1px solid white !important; } /*Aktiver Tab hover Hintergrund rot */ /* tab.tabbrowser-tab[selected]:hover stack.tab-stack vbox.tab-background { background-color: red !important; } */ /*Aktiver Tab hover Schrift weiß*/ tab.tabbrowser-tab .tab-content[selected]:hover { color:white !important; } /*Inaktiver Tab Hintergrund beige*/ tab.tabbrowser-tab:not([selected]) stack.tab-stack vbox.tab-background { background: rgb(195,157,116) !important; box-shadow: none !important; border-radius: 30px !important; } /*Inaktiver Tab hover Hintergrund blau */ /* tab.tabbrowser-tab:not([selected]):hover stack.tab-stack vbox.tab-background { background: blue !important; } */ /*Inaktiver Tab hover Schrift weiß*/ tab.tabbrowser-tab .tab-content:not([selected]):hover { color: white !important; } /*Neuer Tabbutton weiss*/ #TabsToolbar #tabs-newtab-button { fill: white !important; } /*********************************************/ /* Anpassungen für MultiRowTabs.uc.js (ENDE) */ /*********************************************/
MultiRowTabLiteforFx.uc.js
CSS
Alles anzeigen// ==UserScript== // @name MultiRowTabLiteforFx.uc.js // @namespace Based on Alice0775's zzzz-MultiRowTab_LiteforFx48.uc.js // @description Mehrzeilige Tableiste - Experimentelle CSS Version // @include main // @compatibility Firefox 138+ // @version 2025/04/07 12:00 // ==/UserScript== "use strict"; MultiRowTabLiteforFx(); function MultiRowTabLiteforFx() { if (!window.gBrowser) { return; } // -- Config -- // Vergleichbarer CSS Code in userChrome.css Datei wird vorrangig behandelt! const // Mehrzeilige Tableiste Ein/Aus Anzahl der Tabzeilen MultiRowTab_OnOff_and_TabBar_Rows = -1 ,// [-1] = Mehrzeilige Tableiste aktiv unbegrenzte Anzahl von Zeilen. // 0 = Mehrzeilige Tableiste aus. // 1 = Mehrzeilige Tableiste aktiv. Standard = 1 Zeile. Bei Berührung // der Tableiste mit der der Maus, werden die zweite und die folgenden // Zeilen bis zur angegebenen Anzahl von Zeilen angezeigt. // 2 = Mehrzeilige Tableiste aktiv. Anzahl der Tabzeilen angeben. TabBar_Rows_on_MouseOver = 3 ,// Standard = 1 Zeile. Anzahl der Zeilen angeben, die angezeigt werden sollen, // wenn der Mauszeiger über die Tableiste bewegt wird. Voraussetzung: // „MultiRowTab_OnOff_and_TabBar_Rows“ auf „1“ setzen. TabBar_DisplayTime_on_MouseOver = 1 ,// Sie können die Anzeigezeit (Sekunden) festlegen, wann die zweite und die // folgenden Zeilen beim Mouseover angezeigt werden. Das Display zeigt den // eingestellten Wert(Sekunden) an und kehrt dann zur ersten Zeile zurück. // Position der Tab-Leiste. TabBar_Position = 1 ,// [0] = Standard // 1 = unter der Symbolleiste // 2 = unter dem Fenster // Positionen der Tab-Leiste und der Lesezeichen-Symbolleiste tauschen. // sofern die Position der Tab-Leiste unterhalb der Symbolleiste festgelegt ist. // Voraussetzung: "TabBar_Position" auf "1". Bookmark_Toolbar_Position = true ,// [true] = Menüleiste, Navigationsleiste, Lesezeichenleiste, Tableiste // false = Menüleiste, Navigationsleiste, Tableiste, Lesezeichensymbolleiste // Tab-Höhe „UI-Dichte“ UI_Density_Compact = 32 ,// Standard = 29 Pixelbei Kompakt UI_Density_Normal = 32 ,// Standard = 36 Pixel bei Normal UI_Density_Touch = 41 ,// Standard = 41 Pixel bei Touch // Tab-Breite Tab_Min_Width = 165 ,// Standard - Mindestwert = 76px Tab_Max_Width = 165 ,// Standard - Maxwert = 225px // Bei gleichen Werten bei Min und Max, wird die Tabbreite fixiert! // „Tab schließen“ Schaltfläche Tab_Close_Button = 0 ,// [0] = Standard // 1 = Ausgeblendet // 2 = Auf allen Tabs anzeigen // 3 = Nur bei Mausberührung anzeigen // 4 = Aktive Tabs werden immer angezeigt, inaktive Tabs // werden beim Mouseover angezeigt. *Standard für vertikalen Tab-Modus. // ProtonUI Erscheinungsbild der Tabs ändern Proton_Margins = true ,// [true] = Darstellung ProtonUI // Die Höhe der Tab-Leiste entspricht der Höhe der UI-Dichte plus dem Leerraum darüber // und darunter. // false = Darstellung wie bei browser.proton.enabled auf false, was man vor Firefox 90 // noch einstellen konnte. // Wenn der Leerraum um die Tabs auf 0 und die Höhe auf die UI-Dichte eingestellt // ist, ist sie 4 Pixel breiter und 8 Pixel niedriger als die Standardeinstellung. // Ränder auf der linken und rechten Seite der Tabs Tab_Separators = false ,// [false] = Nicht anzeigen // true = Anzeigen // Rahmen CSS wurde extrahiert und angepasst, an Aussehen wie bei browser.proton.enabled // auf false, was man vor Firefox 90 noch einstellen konnte. // Voraussetzung: „TabBar_Position“ auf „0“ setzen. TitleBar_Button_Autohide = false ,// [false] = Aktiviert // true = Deaktiviert // Äußeren Rahmen der Titelleistenschaltfläche [-□×] reduzieren und transparent machen. TitleBar_Button_DisplayTime = 0.6 ,// Dauer der Anzeige in Sekunden, nach der Rückkehr zur Originalgröße und dem Aufheben // der Transparenz per Mouseover angeben. // Tab-Leiste von Anfang an auf die angegebene Höhe einstellen. // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf „2“ oder höher setzen. Set_the_TabBar_to_the_Specified_Height = false ,// [false] = Die Tab-Leiste wird höher, wenn der nächsten Zeile weitere Tabs hinzugefügt werden. // true = Verwendung: Die Tab-Leiste wird von Anfang an auf die angegebene Höhe eingestellt // „.tabDropIndicator“, der beim Ziehen und Ablegen eines Tabs angezeigt wird, ersetzen. // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf einen anderen Wert als „0“ setzen. Tab_Drop_Indicator = false ,// [false] = Stecknadel Symbol 📍 // true = Rote Linie (2px × 29px) als Symbol // Position der angepinnten Tabs // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf einen Wert ungleich „0“ setzen. Separate_Tabs_and_PinnedTabs = false ,// [false] = Standard // true = Angeheftete Tabs von der Tab-Leiste lösen und in die darüber liegende // Zeile verschieben. Breite der angehefteten Tabs für die Position der // angehefteten Tabs „true“ anpassen. PinnedTab_Width = false ,// [false] = Kein Standard // true = Breite angehefteter Tabs anpassen, z. B. „Tab-Breite“. PinnedTab_Min_Width = 76 ,// Standard Mindestbreite = 76 Pixel PinnedTab_Max_Width = 225 ,// Standard Maximalbreite = 225 Pixel // Bei gleichen Werten ist die Breite fixiert. // Angeheftete Tab, Schließen Schaltfläche // Voraussetzung: „Separate_Tabs_and_PinnedTabs“ auf „true“ setzen. PinnedTab_Close_Button = 0 ,// [0] = Standard // 1 = auf allen Tabs sichtbar // 2 = auf Tab bei Mouseover anzeigen // 3 = Aktiver Tab immer sichtbar, inaktiver Tab bei Mouseover sichtbar // *Standard für vertikalen Tab-Modus. // Tab-Leisten-Ziehbereich Left_Drag_Area = 0 ,// Linker Ziehbereich Breite: Standard 40 Pixel Right_Drag_Area = 0 ,// Rechter Ziehbereich Breite: Standard 40 Pixel Maximize_Left_Drag_Area = false ,// true = Linken Ziehbereich bei maximiertem Fenster anzeigen. Standard ausgeblendet. Fullscreen_Drag_Area = false ,// true = Linken und rechten Ziehbereich bei Vollbild anzeigen. Standard ausgeblendet. // Wenn die Titelleiste angezeigt wird, funktioniert sie nicht als Drag-Bereich, selbst // wenn „.titlebar-spacer“ angezeigt wird. Daher habe ich dafür gesorgt, dass sie nichts bewirkt. // -- Config Ende -- css = ` #TabsToolbar:not([collapsed="true"]) { :root[uidensity="compact"] & { --tab-min-height: ${UI_Density_Compact}px; } :root:not([uidensity]) & { --tab-min-height: ${UI_Density_Normal}px; } :root[uidensity="touch"] & { --tab-min-height: ${UI_Density_Touch}px; } #tabbrowser-tabs { min-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px); ${MultiRowTab_OnOff_and_TabBar_Rows != 0 ? ` &[overflow] { padding-inline: 0 !important; & > #tabbrowser-arrowscrollbox { & > .tabbrowser-tab[pinned] { display: flex; margin-inline-start: 0 !important; position: static !important; } &::part(scrollbox) { padding-inline: 0; } } & + #new-tab-button { display: none; } } ${Tab_Drop_Indicator ? ` & > .tab-drop-indicator { background: url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAdCAIAAAAPVCo9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASSURBVBhXY3growJEQ5+SUQEAOb1EM8kwskcAAAAASUVORK5CYII= ) no-repeat center; } ` : ``} #tabbrowser-arrowscrollbox { &::part(scrollbox) { & > slot { flex-wrap: wrap; } ${MultiRowTab_OnOff_and_TabBar_Rows != -1 ? ` ${MultiRowTab_OnOff_and_TabBar_Rows == 1 ? ` ${TabBar_Rows_on_MouseOver == 0 || TabBar_Rows_on_MouseOver == 1 ? ` max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * 2); ` : ` max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${TabBar_Rows_on_MouseOver}); `} &:not(:hover) { max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) !important; ${Proton_Margins ? `scrollbar-width: none;` : ``} transition: all 0s ease-in-out ${TabBar_DisplayTime_on_MouseOver}s; } ` : ` ${Set_the_TabBar_to_the_Specified_Height ? ` min-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows}); & > slot { max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px); } ` : ` max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows}); `} `} overflow: hidden auto; & scrollbar { -moz-window-dragging: no-drag; } ` : ``} } &::part(overflow-start-indicator), &::part(overflow-end-indicator), &::part(scrollbutton-up), &::part(scrollbutton-down) { display: none; } ${Separate_Tabs_and_PinnedTabs ? ` &:has(> .tabbrowser-tab[fadein][pinned]) { &::part(scrollbox) { & > slot::after { display: flow-root list-item; content: ""; flex-basis: -moz-available; height: 0; overflow: hidden; } } } .tabbrowser-tab[fadein] { &:not([pinned]) { #tabbrowser-tabs[haspinnedtabs] & { &, & + :not(#tabs-newtab-button) { order: 1; } } } &[pinned] { .tab-background:after { content: "📌"; font-size: 11px; right: -2px; position: absolute; top: -2px; } ${PinnedTab_Width ? ` flex: 100 100; max-width: ${PinnedTab_Max_Width}px; min-width: ${PinnedTab_Min_Width}px; .tab-throbber, .tab-icon-pending, .tab-icon-image, .tab-sharing-icon-overlay, .tab-icon-overlay { margin-inline-end: 5.5px !important; } ${PinnedTab_Close_Button == 1 ? ` .tab-close-button { display: flex; } ` : PinnedTab_Close_Button == 2 ? ` .tab-close-button { display: none; } &:hover .tab-close-button { display: flex; } ` : PinnedTab_Close_Button == 3 ? ` &:not([selected]):hover, &[selected] { .tab-close-button { display: flex; } } ` : ``} ` : ``} } } ` : ``} #tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]):not([orient="vertical"]) > & { & > .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) { margin-inline-start: 0 !important; } } } ` : ``} } .tabbrowser-tab[fadein]:not([pinned]) { max-width: ${Tab_Max_Width}px; min-width: ${Tab_Min_Width}px; ${Tab_Close_Button == 1 ? ` .tab-close-button { display: none; } ` : Tab_Close_Button == 2 ? ` .tab-close-button { display: flex; } ` : Tab_Close_Button == 3 ? ` .tab-close-button { display: none; } &:hover .tab-close-button { display: flex; } ` : Tab_Close_Button == 4 ? ` &:not([selected]):hover { .tab-close-button { display: flex; } } ` : ``} } ${Tab_Separators ? ` .titlebar-spacer[type="pre-tabs"] { border-inline-end: 1px solid color-mix(in srgb, currentColor 20%, transparent); } .tabbrowser-tab { &::after, &::before { border-left: 1px solid color-mix(in srgb, currentColor 50%, transparent); height: calc(var(--tab-min-height) - 15%); margin-block: auto; } &:hover::after, &[multiselected]::after, #tabbrowser-tabs:not([movingtab]) &:has(+ .tabbrowser-tab:hover)::after, #tabbrowser-tabs:not([movingtab]) &:has(+ [multiselected])::after { height: 100%; } &::after, #tabbrowser-tabs[movingtab] &[visuallyselected]::before { display: flex; content: ""; } } ` : ``} ${Proton_Margins ? `` : ` .tabbrowser-tab, .toolbarbutton-1 { padding: 0; } .tabbrowser-tab, #tabs-newtab-button { height: var(--tab-min-height); } .tabbrowser-tab { .tab-background { box-shadow: none; margin-block: 0; } .tab-label-container { height: var(--tab-min-height); max-height: 24px; } .tab-close-button { height: 20px !important; padding-block: 3px !important; } &[usercontextid] > .tab-stack > .tab-background > .tab-context-line { margin-block-start: 1px !important; } } `} ${TabBar_Position == 0 ? ` .titlebar-buttonbox-container { height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px); } ${TitleBar_Button_Autohide ? ` & > .titlebar-buttonbox-container { background-color: color-mix(in srgb, currentColor 20%, transparent); position: fixed; right: 0; &:not(:hover) { height: 6px; .titlebar-button { padding: 0; } &,& .titlebar-button { opacity: 0; transition: all 0s ease-in-out ${TitleBar_Button_DisplayTime}s; } } } ` : ``} }` : ` ${TabBar_Position == 1 || TabBar_Position == 2 ? ` & > .titlebar-buttonbox-container { display: none; }} #nav-bar { &:not(.browser-titlebar) { :root[customtitlebar] #toolbar-menubar[autohide="true"] ~ &, :root[inFullscreen] #toolbar-menubar ~ & { & > .titlebar-buttonbox-container { display: flex; } } } .titlebar-button { padding-block: 0; } } ` : ``} body:has(> #navigator-toolbox:not([tabs-hidden])) { ${TabBar_Position == 1 ? ` script, toolbar:not(#TabsToolbar ${Bookmark_Toolbar_Position ? `` : `, #PersonalToolbar`}) { order: -1; } ` : TabBar_Position == 2 ? ` & > #fullscr-toggler[hidden] + tabbox, :root[inFullscreen] & > tabbox:hover { border-top: 0.01px solid var(--chrome-content-separator-color); } & > tabbox > #navigator-toolbox { border-block: none !important; } :root[inFullscreen] & { & > #navigator-toolbox { transition: none; &:has(~ tabbox:hover) { margin-top: 0 !important; } &:hover ~ tabbox > #navigator-toolbox { display: flex; } } & > tabbox:not(:hover) { border-top: 0.01px solid transparent; & > #navigator-toolbox { display: none; } } } ` : ``} } `} toolbar[id$="bar"].browser-titlebar { .titlebar-spacer { &[type="pre-tabs"] { width: ${Left_Drag_Area}px; } &[type="post-tabs"] { width: ${Right_Drag_Area}px; } ${Maximize_Left_Drag_Area ? ` :root[customtitlebar]:not([sizemode="normal"], [inFullscreen]) &[type="pre-tabs"] { display: flex; } ` : ``} ${Fullscreen_Drag_Area ? ` :root[customtitlebar][inFullscreen] & { display: flex; } ` : ``} } #navigator-toolbox[tabs-hidden] & { #new-tab-button { display: none; } } } `, sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService), uri = Services.io.newURI("data:text/css;charset=UTF=8," + encodeURIComponent(css)); ["0", "2", "dragend", "SSTabRestored", "TabAttrModified"].find(eventType => { if(!sss.sheetRegistered(uri, eventType)) sss.loadAndRegisterSheet(uri, eventType); if (MultiRowTab_OnOff_and_TabBar_Rows > 0) { gBrowser.tabContainer.addEventListener(eventType, (e) => { e.target.scrollIntoView({ behavior: "instant", block: "nearest" }) }) } }) if (TabBar_Position == 2) { document.body.appendChild( document.createXULElement("tabbox") ).appendChild( document.importNode(document.getElementById("navigator-toolbox")) ).appendChild( document.adoptNode(document.getElementById("TabsToolbar")) ) } gBrowser.tabContainer._getDropIndex = function(event) { let tabToDropAt = getTabFromEventTarget(event, false); const tabPos = gBrowser.tabContainer.getIndexOfItem(tabToDropAt); if (window.getComputedStyle(this).direction == "ltr") { let rect = tabToDropAt.getBoundingClientRect(); if (event.clientX < rect.x + rect.width / 2) return tabPos; else return tabPos + 1; } else { let rect = tabToDropAt.getBoundingClientRect(); if (event.clientX > rect.x + rect.width / 2) return tabPos; else return tabPos + 1; } }; // We set this to check if the listeners were added before let listenersActive = false; // This sets when to apply the fix (by default a new row starts after the 23th open tab, unless you changed the min-size of tabs) gBrowser.tabContainer.addEventListener("dragstart", () => { // Multiple tab select fix gBrowser.visibleTabs.forEach(t => t.style.transform = ""); // Event handling if (!listenersActive) { gBrowser.tabContainer.getDropEffectForTabDrag = function(){}; gBrowser.tabContainer._getDropEffectForTabDrag = function(){}; gBrowser.tabContainer.on_dragover = (dragoverEvent) => performTabDragOver(dragoverEvent); gBrowser.tabContainer._onDragOver = (dragoverEvent) => performTabDragOver(dragoverEvent); gBrowser.tabContainer.ondrop = (dropEvent) => performTabDropEvent(dropEvent); listenersActive = true; } }); } var lastKnownIndex = null; var lastGroupStart = null; var lastGroupEnd = null; /** * Gets the tab from the event target. * @param {*} event The event. * @returns The tab if it was part of the target or its parents, otherwise null */ function getTabFromEventTarget(event, { ignoreTabSides = false } = {}) { let { target } = event; if (target.nodeType != Node.ELEMENT_NODE) { target = target.parentElement; } let tab = target?.closest("tab") || target?.closest("tab-group"); const selectedTab = gBrowser.selectedTab; if (tab && ignoreTabSides) { let { width, height } = tab.getBoundingClientRect(); if ( event.screenX < tab.screenX + width * 0.25 || event.screenX > tab.screenX + width * 0.75 || ((event.screenY < tab.screenY + height * 0.25 || event.screenY > tab.screenY + height * 0.75) && gBrowser.tabContainer.verticalMode) ) { return selectedTab; } } if (!tab) { return selectedTab; } return tab; } /** * Performs the tab drag over event. * @param {*} event The drag over event. */ function performTabDragOver(event) { event.preventDefault(); event.stopPropagation(); let ind = gBrowser.tabContainer._tabDropIndicator; let effects = orig_getDropEffectForTabDrag(event); let tab; if (effects == "link") { tab = getTabFromEventTarget(event, true); if (tab) { if (!gBrowser.tabContainer._dragTime) gBrowser.tabContainer._dragTime = Date.now(); if (!tab.hasAttribute("pendingicon") && // annoying fix Date.now() >= gBrowser.tabContainer._dragTime + gBrowser.tabContainer._dragOverDelay) gBrowser.tabContainer.selectedItem = tab; ind.hidden = true; return; } } if (!tab) { tab = getTabFromEventTarget(event, false); } let newIndex = gBrowser.tabContainer._getDropIndex(event); if (newIndex == null) return; // Update the last known index and group position lastKnownIndex = newIndex; if (tab.nodeName == "tab-group" && !lastGroupStart) { lastGroupStart = tab.querySelector("tab:first-of-type")._tPos; lastGroupEnd = tab.querySelector("tab:last-of-type")._tPos; } let tabs = document.querySelectorAll("tab"); let ltr = (window.getComputedStyle(gBrowser.tabContainer).direction == "ltr"); let rect = gBrowser.tabContainer.arrowScrollbox.getBoundingClientRect(); let newMarginX, newMarginY; if (newIndex == tabs.length) { let tabRect = tabs[newIndex - 1].getBoundingClientRect(); if (ltr) newMarginX = tabRect.right - rect.left; else newMarginX = rect.right - tabRect.left; newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fix if (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+ newMarginY += rect.height / 2 - tabRect.height / 2; } else if (newIndex != null || newIndex != 0) { let tabRect = tabs[newIndex].getBoundingClientRect(); if (ltr) newMarginX = tabRect.left - rect.left; else newMarginX = rect.right - tabRect.right; newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fix if (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+ newMarginY += rect.height / 2 - tabRect.height / 2; } newMarginX += ind.clientWidth / 2; if (!ltr) newMarginX *= -1; ind.hidden = false; ind.style.transform = "translate(" + Math.round(newMarginX) + "px," + Math.round(newMarginY) + "px)"; // multirow fix ind.style.marginInlineStart = (-ind.clientWidth) + "px"; } /** * Performs the tab drop event. * @param {*} event The drop event. */ function performTabDropEvent(event) { let newIndex; let dt = event.dataTransfer; let dropEffect = dt.dropEffect; let draggedTab; if (dt.mozTypesAt(0)[0] == TAB_DROP_TYPE) { draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0); if (!draggedTab) { return; } } if (draggedTab && dropEffect != "copy" && draggedTab.container == gBrowser.tabContainer) { newIndex = gBrowser.tabContainer._getDropIndex(event); /* fix for moving multiple selected tabs and tab groups */ let selectedTabs = gBrowser.selectedTabs; if (lastGroupStart) { selectedTabs = [draggedTab?.closest("tab-group")]; if (lastKnownIndex >= lastGroupStart && lastKnownIndex <= lastGroupEnd) { newIndex = lastGroupStart; } else if (lastKnownIndex == lastGroupEnd + 1) { newIndex = lastGroupStart + 1; } } if (selectedTabs[selectedTabs.length - 1] == null){ newIndex = lastKnownIndex; } else if (newIndex > selectedTabs[selectedTabs.length - 1]._tPos + 1) newIndex--; else if (newIndex >= selectedTabs[0]._tPos) newIndex = -1; if (newIndex == -1) { newIndex = lastKnownIndex; } const tabToMoveAt = gBrowser.tabContainer.getItemAtIndex(newIndex); console.log("tabToMoveAt", tabToMoveAt); console.log("newIndex", newIndex); selectedTabs.forEach(t => gBrowser.moveTabBefore(t, tabToMoveAt)); // Restart global vars lastKnownIndex = null; lastGroupStart = null; lastGroupEnd = null; } } // copy of the original and overrided _getDropEffectForTabDrag method function orig_getDropEffectForTabDrag(event) { let dt = event.dataTransfer; let isMovingTabs = dt.mozItemCount > 0; for (let i = 0; i < dt.mozItemCount; i++) { // tabs are always added as the first type let types = dt.mozTypesAt(0); if (types[0] != TAB_DROP_TYPE) { isMovingTabs = false; break; } } if (isMovingTabs) { let sourceNode = dt.mozGetDataAt(TAB_DROP_TYPE, 0); if (XULElement.isInstance(sourceNode) && sourceNode.localName == "tab" && sourceNode.ownerGlobal.isChromeWindow && sourceNode.ownerDocument.documentElement.getAttribute("windowtype") == "navigator:browser" && sourceNode.ownerGlobal.gBrowser.tabContainer == sourceNode.container) { // Do not allow transfering a private tab to a non-private window // and vice versa. if (PrivateBrowsingUtils.isWindowPrivate(window) != PrivateBrowsingUtils.isWindowPrivate(sourceNode.ownerGlobal)) return "none"; if (window.gMultiProcessBrowser != sourceNode.ownerGlobal.gMultiProcessBrowser) return "none"; if (window.gFissionBrowser != sourceNode.ownerGlobal.gFissionBrowser) return "none"; return dt.dropEffect == "copy" ? "copy" : "move"; } } if (Services.droppedLinkHandler.canDropLink(event, true)) return "link"; return "none"; }
-
ich melde mich die Tage wieder aber ich habe bisher alles neue gelesen und werde es in Ruhe ausprobieren.
-
Welche Ordner kann ich denn weglassen ?
C:\Users\User\AppData\Local\Mozilla
C:\meine Programme\Mozilla Firefox
???Prinzipiell nutze ich immer die aktuellste Version, die möglich ist, bis Fehler auftreten.
Wenn ein Fehler passiert, dann greife ich zum virtuellen Windows und kopiere dort alles rein, was ich kenne was noch funktioniert hatte bisher.
Auf dme aktuellen PC kopiere ich dann immer die Daten wieder zurück, denn ich mache vor jedem Update mittlerweile immer ein Backup von meinem Firefox, weil ich Angst habe, das wieder einmal etwas zerballert wird.
Sehe ich einen Fehler nach dem Update, das wird erstmal das Backup eingespielt und am virtuellen Windows das Update vom Firefox reingemacht udn dann .... "GIB IHM SAURES" dann tobe ich mich aus mit dem virtuellen Windows und dem defekten Firefox, bis es geht. -
Zitat
Wer Rechtschreib-, oder Grammatikfehler findet, darf sie gern behalten
Ich bin reich!
Ja ich habe seid Jahren Probleme mit der Tastatur, aber ich finde keine mit der ich noch gut schrieben kann ohne Fehler und ausserdem macht irgendwie meine Krankheit auch Probleme (Auswirkungen) auf meine Texte.
Nur wenn ich sehr extrem fokussiert schreibe, dann klappt es ohne Fehler. -
Nimm Andreas JavaScript!
2002Andreas Ich war so frei und habe die hover (blau) und selekt (rot) wieder "eingeschaltet".
Des Weiteren habe ich einen weißen Rahmen hinzugefügt,
und die Hintergrundfarbe der Tableiste mal auf ein braun geändert.
GermanFreme82
Benutze folgende "userChrome.css".CSS
Alles anzeigen/*----------------------------------------*/ /* Megabar (Url-Bar) die Ecken abgerundet */ /*----------------------------------------*/ /* Adressleiste / Erhöhung wird verhindert */ #urlbar-background { background: #f8f8ff ! important; /* Hintergrund */ border: 1px solid #5badff !important; border-radius: 50px !important; } #urlbar[breakout][breakout-extend] { top: calc((var(--urlbar-toolbar-height) - var(--urlbar-height)) / 2) !important; left: 0 !important; width: 100% !important; } #urlbar[breakout][breakout-extend] > #urlbar-input-container { height: var(--urlbar-height) !important; padding-block: 0 !important; padding-inline: 0 !important; } #urlbar[breakout][breakout-extend][breakout-extend-animate] > #urlbar-background { animation-name: none !important; } #urlbar[breakout][breakout-extend] > #urlbar-background { box-shadow: none !important; } /* Suchleiste Ecken abrunden */ #searchbar { background: #f8f8ff ! important; /* Hintergrund */ border-radius: 50px !important; border: 1px solid #5badff !important; } /* -------------------------------------*/ /* Kontext-Menü / Einträge ausgeblendet */ /* -------------------------------------*/ #context-viewinfo, #textnotes_gaborjuhaszprojects_com-menuitem-_textnotes, #_lympha-menuitem-_lympha-ctx-btn { display: none !important; } #context_pinTab, #context_moveTabOptions, #context_reopenInContainer, #context_sendTabToDevice, #context-sendlinktodevice, #context-inspect-a11y, #context-openlink, #context-openlinkprivate, #context-bookmarklink, #context-inspect, #context-openlinkinusercontext-menu, #context-viewpartialsource-selection, #context-sep-sendlinktodevice, #inspect-separator, #context-sendpagetodevice, #context-viewbgimage, #context-selectall, #context-viewsource, #context-sep-sendpagetodevice, #context-sep-viewbgimage, #contentAreaContextMenu > menuseparator:nth-child(93), #context-sendimage, #context-setDesktopBackground { display: none !important; } #context_duplicateTab { order: -1 !important; } #context-openlinkintab { order: -1 !important; } #context-copylink { order: -1 !important; } #copyplaintext_eros_man-menuitem-_copyPlainText { order: -1 !important; } #context-copy { order: -1 !important; } #_5dd73bb9-e728-4d1e-990b-c77d8e03670f_-menuitem-_search_engine_menu { order: 20 !important; } #context-print-selection, #textnotes_gaborjuhaszprojects_com-menuitem-_textnotes-selection { display: none !important; } menuitem[label="Ein Schlüsselwort für diese Suche hinzufügen…"] { display: none !important; } /*-------------------------------------------------------*/ /* Trennstrich + Hintergrund für TAB geschlossen Button */ /*-----------------------------------------------------*/ #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action .toolbarbutton-badge-stack { background: #FF8F00 !important; border-radius: 35px !important; } #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action:hover .toolbarbutton-badge-stack { background-color: #FF0039 !important; border-radius: 35px !important; } #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action { margin-left: 12px !important; margin-right: 12px !important; } /*--------------------------------------------*/ /* Ordnersymbole für Symbolleiste und Sidebar */ /*--------------------------------------------*/ @-moz-document url-prefix(chrome://browser/content/browser.xhtml), url("chrome://browser/content/places/places.xhtml") { .bookmark-item[container="true"]{ list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important; } } @-moz-document url("chrome://browser/content/places/bookmarksSidebar.xhtml") { treechildren::-moz-tree-image(container) { list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important; } } /**********************************************/ /* Anpassungen für MultiRowTabs.uc.js (START) */ /**********************************************/ .tabbrowser-tab[pinned] { flex-grow: 0 !important; min-width: 120px !important; } .tabbrowser-tab .tab-label { text-shadow: 1px 1px 0px #000000 !important; } .tab-background[selected], .tabbrowser-tab:hover > .tab-stack > .tab-background:not([selected]), .tabbrowser-tab:hover:not([selected]) :is(.tab-label,.tab-icon-stack), .tabbrowser-tab:hover > .tab-stack > .tab-background[multiselected]:not([selected]), .tab-background:not([selected]), .tab-background[multiselected]:not([selected]) { filter: initial !important; } .tab-sharing-icon-overlay, .tab-icon-overlay:not([pinned]), .tab-icon-overlay[soundplaying] { transform: scale(1.0) !important; } #TabsToolbar #tabs-newtab-button > image { min-height: initial !important; max-height: initial !important; min-width: initial !important; max-width: initial !important; } #TabsToolbar #tabs-newtab-button > image { padding: 7px !important; } /*Abstände der Tabs*/ .tabbrowser-tab { margin-bottom: -4px !important; margin-top: -3px !important; margin-right: -3px !important; } /*Aktiver Tab Hintergrund orange*/ tab.tabbrowser-tab[selected] stack.tab-stack vbox.tab-background { background: rgb(240,152,0) !important; box-shadow: none !important; border-radius: 30px !important; border: 2px solid white !important; } /*Aktiver Tab hover Hintergrund rot */ tab.tabbrowser-tab[selected]:hover stack.tab-stack vbox.tab-background { background-color: red !important; } /*Aktiver Tab hover Schrift weiß*/ tab.tabbrowser-tab .tab-content[selected]:hover { color:white !important; } /*Inaktiver Tab Hintergrund beige*/ tab.tabbrowser-tab:not([selected]) stack.tab-stack vbox.tab-background { background: rgb(195,157,116) !important; box-shadow: none !important; border-radius: 30px !important; } /*Inaktiver Tab hover Hintergrund blau */ tab.tabbrowser-tab:not([selected]):hover stack.tab-stack vbox.tab-background { background: blue !important; } /*Inaktiver Tab hover Schrift weiß*/ tab.tabbrowser-tab .tab-content:not([selected]):hover { color: white !important; } /*Neuer Tabbutton weiss*/ #TabsToolbar #tabs-newtab-button { fill: white !important; } #TabsToolbar { background: #8d5a0c !important; } /*********************************************/ /* Anpassungen für MultiRowTabs.uc.js (ENDE) */ /*********************************************/
Ich hoffe, es ist jetzt alles so, wie Du es gerne hättest.
Wenn nicht, wir sind da.
Welches Theme nutzt Du
Wenn dich die Hintergrundfarbe stört,
löscheaus der "userChrome.css"
Dann wird dieser Hintergrund vom Theme bestimmt.Okay das habe ich jetzt übernommen und aus der
userChrome.css
MultiRowTabLiteforFx.uc.js
Die Farben "blue" und "red" entfernt.Oh, das habe ich überlesen!
Hier ohne das "rot" und "blau".
CSS
Alles anzeigen/*----------------------------------------*/ /* Megabar (Url-Bar) die Ecken abgerundet */ /*----------------------------------------*/ /* Adressleiste / Erhöhung wird verhindert */ #urlbar-background { background: #f8f8ff ! important; /* Hintergrund */ border: 1px solid #5badff !important; border-radius: 50px !important; } #urlbar[breakout][breakout-extend] { top: calc((var(--urlbar-toolbar-height) - var(--urlbar-height)) / 2) !important; left: 0 !important; width: 100% !important; } #urlbar[breakout][breakout-extend] > #urlbar-input-container { height: var(--urlbar-height) !important; padding-block: 0 !important; padding-inline: 0 !important; } #urlbar[breakout][breakout-extend][breakout-extend-animate] > #urlbar-background { animation-name: none !important; } #urlbar[breakout][breakout-extend] > #urlbar-background { box-shadow: none !important; } /* Suchleiste Ecken abrunden */ #searchbar { background: #f8f8ff ! important; /* Hintergrund */ border-radius: 50px !important; border: 1px solid #5badff !important; } /* -------------------------------------*/ /* Kontext-Menü / Einträge ausgeblendet */ /* -------------------------------------*/ #context-viewinfo, #textnotes_gaborjuhaszprojects_com-menuitem-_textnotes, #_lympha-menuitem-_lympha-ctx-btn { display: none !important; } #context_pinTab, #context_moveTabOptions, #context_reopenInContainer, #context_sendTabToDevice, #context-sendlinktodevice, #context-inspect-a11y, #context-openlink, #context-openlinkprivate, #context-bookmarklink, #context-inspect, #context-openlinkinusercontext-menu, #context-viewpartialsource-selection, #context-sep-sendlinktodevice, #inspect-separator, #context-sendpagetodevice, #context-viewbgimage, #context-selectall, #context-viewsource, #context-sep-sendpagetodevice, #context-sep-viewbgimage, #contentAreaContextMenu > menuseparator:nth-child(93), #context-sendimage, #context-setDesktopBackground { display: none !important; } #context_duplicateTab { order: -1 !important; } #context-openlinkintab { order: -1 !important; } #context-copylink { order: -1 !important; } #copyplaintext_eros_man-menuitem-_copyPlainText { order: -1 !important; } #context-copy { order: -1 !important; } #_5dd73bb9-e728-4d1e-990b-c77d8e03670f_-menuitem-_search_engine_menu { order: 20 !important; } #context-print-selection, #textnotes_gaborjuhaszprojects_com-menuitem-_textnotes-selection { display: none !important; } menuitem[label="Ein Schlüsselwort für diese Suche hinzufügen…"] { display: none !important; } /*-------------------------------------------------------*/ /* Trennstrich + Hintergrund für TAB geschlossen Button */ /*-----------------------------------------------------*/ #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action .toolbarbutton-badge-stack { background: #FF8F00 !important; border-radius: 35px !important; } #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action:hover .toolbarbutton-badge-stack { background-color: #FF0039 !important; border-radius: 35px !important; } #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action { margin-left: 12px !important; margin-right: 12px !important; } /*--------------------------------------------*/ /* Ordnersymbole für Symbolleiste und Sidebar */ /*--------------------------------------------*/ @-moz-document url-prefix(chrome://browser/content/browser.xhtml), url("chrome://browser/content/places/places.xhtml") { .bookmark-item[container="true"]{ list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important; } } @-moz-document url("chrome://browser/content/places/bookmarksSidebar.xhtml") { treechildren::-moz-tree-image(container) { list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important; } } /**********************************************/ /* Anpassungen für MultiRowTabs.uc.js (START) */ /**********************************************/ .tabbrowser-tab[pinned] { flex-grow: 0 !important; min-width: 120px !important; } .tabbrowser-tab .tab-label { text-shadow: 1px 1px 0px #000000 !important; } .tab-background[selected], .tabbrowser-tab:hover > .tab-stack > .tab-background:not([selected]), .tabbrowser-tab:hover:not([selected]) :is(.tab-label,.tab-icon-stack), .tabbrowser-tab:hover > .tab-stack > .tab-background[multiselected]:not([selected]), .tab-background:not([selected]), .tab-background[multiselected]:not([selected]) { filter: initial !important; } .tab-sharing-icon-overlay, .tab-icon-overlay:not([pinned]), .tab-icon-overlay[soundplaying] { transform: scale(1.0) !important; } #TabsToolbar #tabs-newtab-button > image { min-height: initial !important; max-height: initial !important; min-width: initial !important; max-width: initial !important; } #TabsToolbar #tabs-newtab-button > image { padding: 7px !important; } /*Abstände der Tabs*/ .tabbrowser-tab { margin-bottom: -4px !important; margin-top: -3px !important; margin-right: -3px !important; } /*Aktiver Tab Hintergrund orange*/ tab.tabbrowser-tab[selected] stack.tab-stack vbox.tab-background { background: rgb(240,152,0) !important; box-shadow: none !important; border-radius: 30px !important; border: 2px solid white !important; } /*Aktiver Tab hover Hintergrund rot tab.tabbrowser-tab[selected]:hover stack.tab-stack vbox.tab-background { background-color: red !important; } */ /*Aktiver Tab hover Schrift weiß*/ tab.tabbrowser-tab .tab-content[selected]:hover { color:white !important; } /*Inaktiver Tab Hintergrund beige*/ tab.tabbrowser-tab:not([selected]) stack.tab-stack vbox.tab-background { background: rgb(195,157,116) !important; box-shadow: none !important; border-radius: 30px !important; } /*Inaktiver Tab hover Hintergrund blau tab.tabbrowser-tab:not([selected]):hover stack.tab-stack vbox.tab-background { background: blue !important; } */ /*Inaktiver Tab hover Schrift weiß*/ tab.tabbrowser-tab .tab-content:not([selected]):hover { color: white !important; } /*Neuer Tabbutton weiss*/ #TabsToolbar #tabs-newtab-button { fill: white !important; } #TabsToolbar { background: #8d5a0c !important; } /*********************************************/ /* Anpassungen für MultiRowTabs.uc.js (ENDE) */ /*********************************************/
Okay jetzt habe ich das genommen und nachträglich "blue" und "red" entfernt udn auch den "Hintergrund" entfernt, damit er von der Farbe des Theme genommen wird, was ich nutze.
Was noch ziemlich komisch aussieht ist das die TABS irgendwie sich in die Adressleiste reinschieben oben. Kann man das noch irgendwie "fixen" das Problem, denn im FF137 sind meine Tabs 165px lang und 35px hoch udn der Text ist in der Mitte vom Tab (oben unten Abstand innerhalb).userChrome.css
CSS
Alles anzeigen/*----------------------------------------*/ /* Megabar (Url-Bar) die Ecken abgerundet */ /*----------------------------------------*/ /* Adressleiste / Erhöhung wird verhindert */ #urlbar-background { background: #f8f8ff ! important; /* Hintergrund */ border: 1px solid #5badff !important; border-radius: 50px !important; } #urlbar[breakout][breakout-extend] { top: calc((var(--urlbar-toolbar-height) - var(--urlbar-height)) / 2) !important; left: 0 !important; width: 100% !important; } #urlbar[breakout][breakout-extend] > #urlbar-input-container { height: var(--urlbar-height) !important; padding-block: 0 !important; padding-inline: 0 !important; } #urlbar[breakout][breakout-extend][breakout-extend-animate] > #urlbar-background { animation-name: none !important; } #urlbar[breakout][breakout-extend] > #urlbar-background { box-shadow: none !important; } /* Suchleiste Ecken abrunden */ #searchbar { background: #f8f8ff ! important; /* Hintergrund */ border-radius: 50px !important; border: 1px solid #5badff !important; } /* -------------------------------------*/ /* Kontext-Menü / Einträge ausgeblendet */ /* -------------------------------------*/ #context-viewinfo, #textnotes_gaborjuhaszprojects_com-menuitem-_textnotes, #_lympha-menuitem-_lympha-ctx-btn { display: none !important; } #context_pinTab, #context_moveTabOptions, #context_reopenInContainer, #context_sendTabToDevice, #context-sendlinktodevice, #context-inspect-a11y, #context-openlink, #context-openlinkprivate, #context-bookmarklink, #context-inspect, #context-openlinkinusercontext-menu, #context-viewpartialsource-selection, #context-sep-sendlinktodevice, #inspect-separator, #context-sendpagetodevice, #context-viewbgimage, #context-selectall, #context-viewsource, #context-sep-sendpagetodevice, #context-sep-viewbgimage, #contentAreaContextMenu > menuseparator:nth-child(93), #context-sendimage, #context-setDesktopBackground { display: none !important; } #context_duplicateTab { order: -1 !important; } #context-openlinkintab { order: -1 !important; } #context-copylink { order: -1 !important; } #copyplaintext_eros_man-menuitem-_copyPlainText { order: -1 !important; } #context-copy { order: -1 !important; } #_5dd73bb9-e728-4d1e-990b-c77d8e03670f_-menuitem-_search_engine_menu { order: 20 !important; } #context-print-selection, #textnotes_gaborjuhaszprojects_com-menuitem-_textnotes-selection { display: none !important; } menuitem[label="Ein Schlüsselwort für diese Suche hinzufügen…"] { display: none !important; } /*-------------------------------------------------------*/ /* Trennstrich + Hintergrund für TAB geschlossen Button */ /*-----------------------------------------------------*/ #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action .toolbarbutton-badge-stack { background: #FF8F00 !important; border-radius: 35px !important; } #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action:hover .toolbarbutton-badge-stack { background-color: #FF0039 !important; border-radius: 35px !important; } #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action { margin-left: 12px !important; margin-right: 12px !important; } /*--------------------------------------------*/ /* Ordnersymbole für Symbolleiste und Sidebar */ /*--------------------------------------------*/ @-moz-document url-prefix(chrome://browser/content/browser.xhtml), url("chrome://browser/content/places/places.xhtml") { .bookmark-item[container="true"]{ list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important; } } @-moz-document url("chrome://browser/content/places/bookmarksSidebar.xhtml") { treechildren::-moz-tree-image(container) { list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important; } } /**********************************************/ /* Anpassungen für MultiRowTabs.uc.js (START) */ /**********************************************/ .tabbrowser-tab[pinned] { flex-grow: 0 !important; min-width: 120px !important; } .tabbrowser-tab .tab-label { text-shadow: 1px 1px 0px #000000 !important; } .tab-background[selected], .tabbrowser-tab:hover > .tab-stack > .tab-background:not([selected]), .tabbrowser-tab:hover:not([selected]) :is(.tab-label,.tab-icon-stack), .tabbrowser-tab:hover > .tab-stack > .tab-background[multiselected]:not([selected]), .tab-background:not([selected]), .tab-background[multiselected]:not([selected]) { filter: initial !important; } .tab-sharing-icon-overlay, .tab-icon-overlay:not([pinned]), .tab-icon-overlay[soundplaying] { transform: scale(1.0) !important; } #TabsToolbar #tabs-newtab-button > image { min-height: initial !important; max-height: initial !important; min-width: initial !important; max-width: initial !important; } #TabsToolbar #tabs-newtab-button > image { padding: 7px !important; } /*Abstände der Tabs*/ .tabbrowser-tab { margin-bottom: -4px !important; margin-top: -3px !important; margin-right: -3px !important; } /*Aktiver Tab Hintergrund orange*/ tab.tabbrowser-tab[selected] stack.tab-stack vbox.tab-background { background: rgb(240,152,0) !important; box-shadow: none !important; border-radius: 30px !important; border: 2px solid white !important; } /*Aktiver Tab hover Hintergrund rot tab.tabbrowser-tab[selected]:hover stack.tab-stack vbox.tab-background { background-color: !important; } */ /*Aktiver Tab hover Schrift weiß*/ tab.tabbrowser-tab .tab-content[selected]:hover { color:white !important; } /*Inaktiver Tab Hintergrund beige*/ tab.tabbrowser-tab:not([selected]) stack.tab-stack vbox.tab-background { background: rgb(195,157,116) !important; box-shadow: none !important; border-radius: 30px !important; } /*Inaktiver Tab hover Hintergrund blau tab.tabbrowser-tab:not([selected]):hover stack.tab-stack vbox.tab-background { background: !important; } */ /*Inaktiver Tab hover Schrift weiß*/ tab.tabbrowser-tab .tab-content:not([selected]):hover { color: white !important; } /*Neuer Tabbutton weiss*/ #TabsToolbar #tabs-newtab-button { fill: white !important; } /*********************************************/ /* Anpassungen für MultiRowTabs.uc.js (ENDE) */ /*********************************************/
MultiRowTabLiteforFx.uc.js
CSS
Alles anzeigen// ==UserScript== // @name MultiRowTabLiteforFx.uc.js // @namespace Based on Alice0775's zzzz-MultiRowTab_LiteforFx48.uc.js // @description Mehrzeilige Tableiste - Experimentelle CSS Version // @include main // @compatibility Firefox 138+ // @version 2025/04/07 12:00 // ==/UserScript== "use strict"; MultiRowTabLiteforFx(); function MultiRowTabLiteforFx() { if (!window.gBrowser) { return; } // -- Config -- // Vergleichbarer CSS Code in userChrome.css Datei wird vorrangig behandelt! const // Mehrzeilige Tableiste Ein/Aus Anzahl der Tabzeilen MultiRowTab_OnOff_and_TabBar_Rows = -1 ,// [-1] = Mehrzeilige Tableiste aktiv unbegrenzte Anzahl von Zeilen. // 0 = Mehrzeilige Tableiste aus. // 1 = Mehrzeilige Tableiste aktiv. Standard = 1 Zeile. Bei Berührung // der Tableiste mit der der Maus, werden die zweite und die folgenden // Zeilen bis zur angegebenen Anzahl von Zeilen angezeigt. // 2 = Mehrzeilige Tableiste aktiv. Anzahl der Tabzeilen angeben. TabBar_Rows_on_MouseOver = 3 ,// Standard = 1 Zeile. Anzahl der Zeilen angeben, die angezeigt werden sollen, // wenn der Mauszeiger über die Tableiste bewegt wird. Voraussetzung: // „MultiRowTab_OnOff_and_TabBar_Rows“ auf „1“ setzen. TabBar_DisplayTime_on_MouseOver = 1 ,// Sie können die Anzeigezeit (Sekunden) festlegen, wann die zweite und die // folgenden Zeilen beim Mouseover angezeigt werden. Das Display zeigt den // eingestellten Wert(Sekunden) an und kehrt dann zur ersten Zeile zurück. // Position der Tab-Leiste. TabBar_Position = 1 ,// [0] = Standard // 1 = unter der Symbolleiste // 2 = unter dem Fenster // Positionen der Tab-Leiste und der Lesezeichen-Symbolleiste tauschen. // sofern die Position der Tab-Leiste unterhalb der Symbolleiste festgelegt ist. // Voraussetzung: "TabBar_Position" auf "1". Bookmark_Toolbar_Position = true ,// [true] = Menüleiste, Navigationsleiste, Lesezeichenleiste, Tableiste // false = Menüleiste, Navigationsleiste, Tableiste, Lesezeichensymbolleiste // Tab-Höhe „UI-Dichte“ UI_Density_Compact = 29 ,// Standard = 29 Pixelbei Kompakt UI_Density_Normal = 36 ,// Standard = 36 Pixel bei Normal UI_Density_Touch = 41 ,// Standard = 41 Pixel bei Touch // Tab-Breite Tab_Min_Width = 35 ,// Standard - Mindestwert = 76px Tab_Max_Width = 170 ,// Standard - Maxwert = 225px // Bei gleichen Werten bei Min und Max, wird die Tabbreite fixiert! // „Tab schließen“ Schaltfläche Tab_Close_Button = 2 ,// [0] = Standard // 1 = Ausgeblendet // 2 = Auf allen Tabs anzeigen // 3 = Nur bei Mausberührung anzeigen // 4 = Aktive Tabs werden immer angezeigt, inaktive Tabs // werden beim Mouseover angezeigt. *Standard für vertikalen Tab-Modus. // ProtonUI Erscheinungsbild der Tabs ändern Proton_Margins = true ,// [true] = Darstellung ProtonUI // Die Höhe der Tab-Leiste entspricht der Höhe der UI-Dichte plus dem Leerraum darüber // und darunter. // false = Darstellung wie bei browser.proton.enabled auf false, was man vor Firefox 90 // noch einstellen konnte. // Wenn der Leerraum um die Tabs auf 0 und die Höhe auf die UI-Dichte eingestellt // ist, ist sie 4 Pixel breiter und 8 Pixel niedriger als die Standardeinstellung. // Ränder auf der linken und rechten Seite der Tabs Tab_Separators = false ,// [false] = Nicht anzeigen // true = Anzeigen // Rahmen CSS wurde extrahiert und angepasst, an Aussehen wie bei browser.proton.enabled // auf false, was man vor Firefox 90 noch einstellen konnte. // Voraussetzung: „TabBar_Position“ auf „0“ setzen. TitleBar_Button_Autohide = false ,// [false] = Aktiviert // true = Deaktiviert // Äußeren Rahmen der Titelleistenschaltfläche [-□×] reduzieren und transparent machen. TitleBar_Button_DisplayTime = 0.6 ,// Dauer der Anzeige in Sekunden, nach der Rückkehr zur Originalgröße und dem Aufheben // der Transparenz per Mouseover angeben. // Tab-Leiste von Anfang an auf die angegebene Höhe einstellen. // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf „2“ oder höher setzen. Set_the_TabBar_to_the_Specified_Height = false ,// [false] = Die Tab-Leiste wird höher, wenn der nächsten Zeile weitere Tabs hinzugefügt werden. // true = Verwendung: Die Tab-Leiste wird von Anfang an auf die angegebene Höhe eingestellt // „.tabDropIndicator“, der beim Ziehen und Ablegen eines Tabs angezeigt wird, ersetzen. // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf einen anderen Wert als „0“ setzen. Tab_Drop_Indicator = false ,// [false] = Stecknadel Symbol 📍 // true = Rote Linie (2px × 29px) als Symbol // Position der angepinnten Tabs // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf einen Wert ungleich „0“ setzen. Separate_Tabs_and_PinnedTabs = false ,// [false] = Standard // true = Angeheftete Tabs von der Tab-Leiste lösen und in die darüber liegende // Zeile verschieben. Breite der angehefteten Tabs für die Position der // angehefteten Tabs „true“ anpassen. PinnedTab_Width = false ,// [false] = Kein Standard // true = Breite angehefteter Tabs anpassen, z. B. „Tab-Breite“. PinnedTab_Min_Width = 76 ,// Standard Mindestbreite = 76 Pixel PinnedTab_Max_Width = 225 ,// Standard Maximalbreite = 225 Pixel // Bei gleichen Werten ist die Breite fixiert. // Angeheftete Tab, Schließen Schaltfläche // Voraussetzung: „Separate_Tabs_and_PinnedTabs“ auf „true“ setzen. PinnedTab_Close_Button = 0 ,// [0] = Standard // 1 = auf allen Tabs sichtbar // 2 = auf Tab bei Mouseover anzeigen // 3 = Aktiver Tab immer sichtbar, inaktiver Tab bei Mouseover sichtbar // *Standard für vertikalen Tab-Modus. // Tab-Leisten-Ziehbereich Left_Drag_Area = 0 ,// Linker Ziehbereich Breite: Standard 40 Pixel Right_Drag_Area = 0 ,// Rechter Ziehbereich Breite: Standard 40 Pixel Maximize_Left_Drag_Area = false ,// true = Linken Ziehbereich bei maximiertem Fenster anzeigen. Standard ausgeblendet. Fullscreen_Drag_Area = false ,// true = Linken und rechten Ziehbereich bei Vollbild anzeigen. Standard ausgeblendet. // Wenn die Titelleiste angezeigt wird, funktioniert sie nicht als Drag-Bereich, selbst // wenn „.titlebar-spacer“ angezeigt wird. Daher habe ich dafür gesorgt, dass sie nichts bewirkt. // -- Config Ende -- css = ` #TabsToolbar:not([collapsed="true"]) { :root[uidensity="compact"] & { --tab-min-height: ${UI_Density_Compact}px; } :root:not([uidensity]) & { --tab-min-height: ${UI_Density_Normal}px; } :root[uidensity="touch"] & { --tab-min-height: ${UI_Density_Touch}px; } #tabbrowser-tabs { min-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px); ${MultiRowTab_OnOff_and_TabBar_Rows != 0 ? ` &[overflow] { padding-inline: 0 !important; & > #tabbrowser-arrowscrollbox { & > .tabbrowser-tab[pinned] { display: flex; margin-inline-start: 0 !important; position: static !important; } &::part(scrollbox) { padding-inline: 0; } } & + #new-tab-button { display: none; } } ${Tab_Drop_Indicator ? ` & > .tab-drop-indicator { background: url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAdCAIAAAAPVCo9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASSURBVBhXY3growJEQ5+SUQEAOb1EM8kwskcAAAAASUVORK5CYII= ) no-repeat center; } ` : ``} #tabbrowser-arrowscrollbox { &::part(scrollbox) { & > slot { flex-wrap: wrap; } ${MultiRowTab_OnOff_and_TabBar_Rows != -1 ? ` ${MultiRowTab_OnOff_and_TabBar_Rows == 1 ? ` ${TabBar_Rows_on_MouseOver == 0 || TabBar_Rows_on_MouseOver == 1 ? ` max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * 2); ` : ` max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${TabBar_Rows_on_MouseOver}); `} &:not(:hover) { max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) !important; ${Proton_Margins ? `scrollbar-width: none;` : ``} transition: all 0s ease-in-out ${TabBar_DisplayTime_on_MouseOver}s; } ` : ` ${Set_the_TabBar_to_the_Specified_Height ? ` min-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows}); & > slot { max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px); } ` : ` max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows}); `} `} overflow: hidden auto; & scrollbar { -moz-window-dragging: no-drag; } ` : ``} } &::part(overflow-start-indicator), &::part(overflow-end-indicator), &::part(scrollbutton-up), &::part(scrollbutton-down) { display: none; } ${Separate_Tabs_and_PinnedTabs ? ` &:has(> .tabbrowser-tab[fadein][pinned]) { &::part(scrollbox) { & > slot::after { display: flow-root list-item; content: ""; flex-basis: -moz-available; height: 0; overflow: hidden; } } } .tabbrowser-tab[fadein] { &:not([pinned]) { #tabbrowser-tabs[haspinnedtabs] & { &, & + :not(#tabs-newtab-button) { order: 1; } } } &[pinned] { .tab-background:after { content: "📌"; font-size: 11px; right: -2px; position: absolute; top: -2px; } ${PinnedTab_Width ? ` flex: 100 100; max-width: ${PinnedTab_Max_Width}px; min-width: ${PinnedTab_Min_Width}px; .tab-throbber, .tab-icon-pending, .tab-icon-image, .tab-sharing-icon-overlay, .tab-icon-overlay { margin-inline-end: 5.5px !important; } ${PinnedTab_Close_Button == 1 ? ` .tab-close-button { display: flex; } ` : PinnedTab_Close_Button == 2 ? ` .tab-close-button { display: none; } &:hover .tab-close-button { display: flex; } ` : PinnedTab_Close_Button == 3 ? ` &:not([selected]):hover, &[selected] { .tab-close-button { display: flex; } } ` : ``} ` : ``} } } ` : ``} #tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]):not([orient="vertical"]) > & { & > .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) { margin-inline-start: 0 !important; } } } ` : ``} } .tabbrowser-tab[fadein]:not([pinned]) { max-width: ${Tab_Max_Width}px; min-width: ${Tab_Min_Width}px; ${Tab_Close_Button == 1 ? ` .tab-close-button { display: none; } ` : Tab_Close_Button == 2 ? ` .tab-close-button { display: flex; } ` : Tab_Close_Button == 3 ? ` .tab-close-button { display: none; } &:hover .tab-close-button { display: flex; } ` : Tab_Close_Button == 4 ? ` &:not([selected]):hover { .tab-close-button { display: flex; } } ` : ``} } ${Tab_Separators ? ` .titlebar-spacer[type="pre-tabs"] { border-inline-end: 1px solid color-mix(in srgb, currentColor 20%, transparent); } .tabbrowser-tab { &::after, &::before { border-left: 1px solid color-mix(in srgb, currentColor 50%, transparent); height: calc(var(--tab-min-height) - 15%); margin-block: auto; } &:hover::after, &[multiselected]::after, #tabbrowser-tabs:not([movingtab]) &:has(+ .tabbrowser-tab:hover)::after, #tabbrowser-tabs:not([movingtab]) &:has(+ [multiselected])::after { height: 100%; } &::after, #tabbrowser-tabs[movingtab] &[visuallyselected]::before { display: flex; content: ""; } } ` : ``} ${Proton_Margins ? `` : ` .tabbrowser-tab, .toolbarbutton-1 { padding: 0; } .tabbrowser-tab, #tabs-newtab-button { height: var(--tab-min-height); } .tabbrowser-tab { .tab-background { box-shadow: none; margin-block: 0; } .tab-label-container { height: var(--tab-min-height); max-height: 24px; } .tab-close-button { height: 20px !important; padding-block: 3px !important; } &[usercontextid] > .tab-stack > .tab-background > .tab-context-line { margin-block-start: 1px !important; } } `} ${TabBar_Position == 0 ? ` .titlebar-buttonbox-container { height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px); } ${TitleBar_Button_Autohide ? ` & > .titlebar-buttonbox-container { background-color: color-mix(in srgb, currentColor 20%, transparent); position: fixed; right: 0; &:not(:hover) { height: 6px; .titlebar-button { padding: 0; } &,& .titlebar-button { opacity: 0; transition: all 0s ease-in-out ${TitleBar_Button_DisplayTime}s; } } } ` : ``} }` : ` ${TabBar_Position == 1 || TabBar_Position == 2 ? ` & > .titlebar-buttonbox-container { display: none; }} #nav-bar { &:not(.browser-titlebar) { :root[customtitlebar] #toolbar-menubar[autohide="true"] ~ &, :root[inFullscreen] #toolbar-menubar ~ & { & > .titlebar-buttonbox-container { display: flex; } } } .titlebar-button { padding-block: 0; } } ` : ``} body:has(> #navigator-toolbox:not([tabs-hidden])) { ${TabBar_Position == 1 ? ` script, toolbar:not(#TabsToolbar ${Bookmark_Toolbar_Position ? `` : `, #PersonalToolbar`}) { order: -1; } ` : TabBar_Position == 2 ? ` & > #fullscr-toggler[hidden] + tabbox, :root[inFullscreen] & > tabbox:hover { border-top: 0.01px solid var(--chrome-content-separator-color); } & > tabbox > #navigator-toolbox { border-block: none !important; } :root[inFullscreen] & { & > #navigator-toolbox { transition: none; &:has(~ tabbox:hover) { margin-top: 0 !important; } &:hover ~ tabbox > #navigator-toolbox { display: flex; } } & > tabbox:not(:hover) { border-top: 0.01px solid transparent; & > #navigator-toolbox { display: none; } } } ` : ``} } `} toolbar[id$="bar"].browser-titlebar { .titlebar-spacer { &[type="pre-tabs"] { width: ${Left_Drag_Area}px; } &[type="post-tabs"] { width: ${Right_Drag_Area}px; } ${Maximize_Left_Drag_Area ? ` :root[customtitlebar]:not([sizemode="normal"], [inFullscreen]) &[type="pre-tabs"] { display: flex; } ` : ``} ${Fullscreen_Drag_Area ? ` :root[customtitlebar][inFullscreen] & { display: flex; } ` : ``} } #navigator-toolbox[tabs-hidden] & { #new-tab-button { display: none; } } } .tabbrowser-tab:not([pinned]) { padding-inline: 5px !important; } .tab-background { margin-top: -1px !important; } /*----------------------------------------*/ /* Megabar (Url-Bar) die Ecken abgerundet */ /*----------------------------------------*/ /* Adressleiste / Erhöhung wird verhindert */ #urlbar-background { background: #f8f8ff ! important; /* Hintergrund */ border: 1px solid #5badff !important; border-radius: 50px !important; } #urlbar[breakout][breakout-extend] { top: calc((var(--urlbar-toolbar-height) - var(--urlbar-height)) / 2) !important; left: 0 !important; width: 100% !important; } #urlbar[breakout][breakout-extend] > #urlbar-input-container { height: var(--urlbar-height) !important; padding-block: 0 !important; padding-inline: 0 !important; } #urlbar[breakout][breakout-extend][breakout-extend-animate] > #urlbar-background { animation-name: none !important; } #urlbar[breakout][breakout-extend] > #urlbar-background { box-shadow: none !important; } /* Suchleiste Ecken abrunden */ #searchbar { background: #f8f8ff ! important; /* Hintergrund */ border-radius: 50px !important; border: 1px solid #5badff !important; } /* -------------------------------------*/ /* Kontext-Menü / Einträge ausgeblendet */ /* -------------------------------------*/ #context-viewinfo, #textnotes_gaborjuhaszprojects_com-menuitem-_textnotes, #_lympha-menuitem-_lympha-ctx-btn { display: none !important; } #context_pinTab, #context_moveTabOptions, #context_reopenInContainer, #context_sendTabToDevice, #context-sendlinktodevice, #context-inspect-a11y, #context-openlink, #context-openlinkprivate, #context-bookmarklink, #context-inspect, #context-openlinkinusercontext-menu, #context-viewpartialsource-selection, #context-sep-sendlinktodevice, #inspect-separator, #context-sendpagetodevice, #context-viewbgimage, #context-selectall, #context-viewsource, #context-sep-sendpagetodevice, #context-sep-viewbgimage, #contentAreaContextMenu > menuseparator:nth-child(93), #context-sendimage, #context-setDesktopBackground { display: none !important; } #context_duplicateTab { order: -1 !important; } #context-openlinkintab { order: -1 !important; } #context-copylink { order: -1 !important; } #copyplaintext_eros_man-menuitem-_copyPlainText { order: -1 !important; } #context-copy { order: -1 !important; } #_5dd73bb9-e728-4d1e-990b-c77d8e03670f_-menuitem-_search_engine_menu { order: 20 !important; } #context-print-selection, #textnotes_gaborjuhaszprojects_com-menuitem-_textnotes-selection { display: none !important; } menuitem[label="Ein Schlüsselwort für diese Suche hinzufügen…"] { display: none !important; } /*-------------------------------------------------------*/ /* Trennstrich + Hintergrund für TAB geschlossen Button */ /*-----------------------------------------------------*/ #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action .toolbarbutton-badge-stack { background: #FF8F00 !important; border-radius: 35px !important; } #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action:hover .toolbarbutton-badge-stack { background-color: #FF0039 !important; border-radius: 35px !important; } #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action { margin-left: 12px !important; margin-right: 12px !important; } /*--------------------------------------------*/ /* Ordnersymbole für Symbolleiste und Sidebar */ /*--------------------------------------------*/ @-moz-document url-prefix(chrome://browser/content/browser.xhtml), url("chrome://browser/content/places/places.xhtml") { .bookmark-item[container="true"]{ list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important; } } @-moz-document url("chrome://browser/content/places/bookmarksSidebar.xhtml") { treechildren::-moz-tree-image(container) { list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important; } } /**********************************************/ /* Anpassungen für MultiRowTabs.uc.js (START) */ /**********************************************/ .tabbrowser-tab[pinned] { flex-grow: 0 !important; min-width: 120px !important; } .tabbrowser-tab .tab-label { text-shadow: 1px 1px 0px #000000 !important; } .tab-background[selected], .tabbrowser-tab:hover > .tab-stack > .tab-background:not([selected]), .tabbrowser-tab:hover:not([selected]) :is(.tab-label,.tab-icon-stack), .tabbrowser-tab:hover > .tab-stack > .tab-background[multiselected]:not([selected]), .tab-background:not([selected]), .tab-background[multiselected]:not([selected]) { filter: initial !important; } .tab-sharing-icon-overlay, .tab-icon-overlay:not([pinned]), .tab-icon-overlay[soundplaying] { transform: scale(1.0) !important; } #TabsToolbar #tabs-newtab-button > image { min-height: initial !important; max-height: initial !important; min-width: initial !important; max-width: initial !important; } #TabsToolbar #tabs-newtab-button > image { padding: 7px !important; } /*Aktiver Tab Hintergrund orange*/ tab.tabbrowser-tab[selected] stack.tab-stack vbox.tab-background { background: rgb(240,152,0) !important; box-shadow: none !important; border-radius: 30px !important; } /*Aktiver Tab hover Hintergrund rot*/ tab.tabbrowser-tab[selected]:hover stack.tab-stack vbox.tab-background { background-color: !important; } /*Aktiver Tab hover Schrift weiß*/ tab.tabbrowser-tab .tab-content[selected]:hover { color:white !important; } /*Inaktiver Tab Hintergrund beige*/ tab.tabbrowser-tab:not([selected]) stack.tab-stack vbox.tab-background { background: rgb(195,157,116) !important; box-shadow: none !important; border-radius: 30px !important; } /*Inaktiver Tab hover Hintergrund blau*/ tab.tabbrowser-tab:not([selected]):hover stack.tab-stack vbox.tab-background { background: !important; } /*Inaktiver Tab hover Schrift weiß*/ tab.tabbrowser-tab .tab-content:not([selected]):hover { color: white !important; } /*Neuer Tabbutton weiss*/ #TabsToolbar #tabs-newtab-button { fill: white !important; } #TabsToolbar { background: rgb()!important; } /*********************************************/ /* Anpassungen für MultiRowTabs.uc.js (ENDE) */ /*********************************************/ `, sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService), uri = Services.io.newURI("data:text/css;charset=UTF=8," + encodeURIComponent(css)); ["0", "2", "dragend", "SSTabRestored", "TabAttrModified"].find(eventType => { if(!sss.sheetRegistered(uri, eventType)) sss.loadAndRegisterSheet(uri, eventType); if (MultiRowTab_OnOff_and_TabBar_Rows > 0) { gBrowser.tabContainer.addEventListener(eventType, (e) => { e.target.scrollIntoView({ behavior: "instant", block: "nearest" }) }) } }) if (TabBar_Position == 2) { document.body.appendChild( document.createXULElement("tabbox") ).appendChild( document.importNode(document.getElementById("navigator-toolbox")) ).appendChild( document.adoptNode(document.getElementById("TabsToolbar")) ) } gBrowser.tabContainer._getDropIndex = function(event) { let tabToDropAt = getTabFromEventTarget(event, false); const tabPos = gBrowser.tabContainer.getIndexOfItem(tabToDropAt); if (window.getComputedStyle(this).direction == "ltr") { let rect = tabToDropAt.getBoundingClientRect(); if (event.clientX < rect.x + rect.width / 2) return tabPos; else return tabPos + 1; } else { let rect = tabToDropAt.getBoundingClientRect(); if (event.clientX > rect.x + rect.width / 2) return tabPos; else return tabPos + 1; } }; // We set this to check if the listeners were added before let listenersActive = false; // This sets when to apply the fix (by default a new row starts after the 23th open tab, unless you changed the min-size of tabs) gBrowser.tabContainer.addEventListener("dragstart", () => { // Multiple tab select fix gBrowser.visibleTabs.forEach(t => t.style.transform = ""); // Event handling if (!listenersActive) { gBrowser.tabContainer.getDropEffectForTabDrag = function(){}; gBrowser.tabContainer._getDropEffectForTabDrag = function(){}; gBrowser.tabContainer.on_dragover = (dragoverEvent) => performTabDragOver(dragoverEvent); gBrowser.tabContainer._onDragOver = (dragoverEvent) => performTabDragOver(dragoverEvent); gBrowser.tabContainer.ondrop = (dropEvent) => performTabDropEvent(dropEvent); listenersActive = true; } }); } var lastKnownIndex = null; var lastGroupStart = null; var lastGroupEnd = null; /** * Gets the tab from the event target. * @param {*} event The event. * @returns The tab if it was part of the target or its parents, otherwise null */ function getTabFromEventTarget(event, { ignoreTabSides = false } = {}) { let { target } = event; if (target.nodeType != Node.ELEMENT_NODE) { target = target.parentElement; } let tab = target?.closest("tab") || target?.closest("tab-group"); const selectedTab = gBrowser.selectedTab; if (tab && ignoreTabSides) { let { width, height } = tab.getBoundingClientRect(); if ( event.screenX < tab.screenX + width * 0.25 || event.screenX > tab.screenX + width * 0.75 || ((event.screenY < tab.screenY + height * 0.25 || event.screenY > tab.screenY + height * 0.75) && gBrowser.tabContainer.verticalMode) ) { return selectedTab; } } if (!tab) { return selectedTab; } return tab; } /** * Performs the tab drag over event. * @param {*} event The drag over event. */ function performTabDragOver(event) { event.preventDefault(); event.stopPropagation(); let ind = gBrowser.tabContainer._tabDropIndicator; let effects = orig_getDropEffectForTabDrag(event); let tab; if (effects == "link") { tab = getTabFromEventTarget(event, true); if (tab) { if (!gBrowser.tabContainer._dragTime) gBrowser.tabContainer._dragTime = Date.now(); if (!tab.hasAttribute("pendingicon") && // annoying fix Date.now() >= gBrowser.tabContainer._dragTime + gBrowser.tabContainer._dragOverDelay) gBrowser.tabContainer.selectedItem = tab; ind.hidden = true; return; } } if (!tab) { tab = getTabFromEventTarget(event, false); } let newIndex = gBrowser.tabContainer._getDropIndex(event); if (newIndex == null) return; // Update the last known index and group position lastKnownIndex = newIndex; if (tab.nodeName == "tab-group" && !lastGroupStart) { lastGroupStart = tab.querySelector("tab:first-of-type")._tPos; lastGroupEnd = tab.querySelector("tab:last-of-type")._tPos; } let tabs = document.querySelectorAll("tab"); let ltr = (window.getComputedStyle(gBrowser.tabContainer).direction == "ltr"); let rect = gBrowser.tabContainer.arrowScrollbox.getBoundingClientRect(); let newMarginX, newMarginY; if (newIndex == tabs.length) { let tabRect = tabs[newIndex - 1].getBoundingClientRect(); if (ltr) newMarginX = tabRect.right - rect.left; else newMarginX = rect.right - tabRect.left; newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fix if (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+ newMarginY += rect.height / 2 - tabRect.height / 2; } else if (newIndex != null || newIndex != 0) { let tabRect = tabs[newIndex].getBoundingClientRect(); if (ltr) newMarginX = tabRect.left - rect.left; else newMarginX = rect.right - tabRect.right; newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fix if (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+ newMarginY += rect.height / 2 - tabRect.height / 2; } newMarginX += ind.clientWidth / 2; if (!ltr) newMarginX *= -1; ind.hidden = false; ind.style.transform = "translate(" + Math.round(newMarginX) + "px," + Math.round(newMarginY) + "px)"; // multirow fix ind.style.marginInlineStart = (-ind.clientWidth) + "px"; } /** * Performs the tab drop event. * @param {*} event The drop event. */ function performTabDropEvent(event) { let newIndex; let dt = event.dataTransfer; let dropEffect = dt.dropEffect; let draggedTab; if (dt.mozTypesAt(0)[0] == TAB_DROP_TYPE) { draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0); if (!draggedTab) { return; } } if (draggedTab && dropEffect != "copy" && draggedTab.container == gBrowser.tabContainer) { newIndex = gBrowser.tabContainer._getDropIndex(event); /* fix for moving multiple selected tabs and tab groups */ let selectedTabs = gBrowser.selectedTabs; if (lastGroupStart) { selectedTabs = [draggedTab?.closest("tab-group")]; if (lastKnownIndex >= lastGroupStart && lastKnownIndex <= lastGroupEnd) { newIndex = lastGroupStart; } else if (lastKnownIndex == lastGroupEnd + 1) { newIndex = lastGroupStart + 1; } } if (selectedTabs[selectedTabs.length - 1] == null){ newIndex = lastKnownIndex; } else if (newIndex > selectedTabs[selectedTabs.length - 1]._tPos + 1) newIndex--; else if (newIndex >= selectedTabs[0]._tPos) newIndex = -1; if (newIndex == -1) { newIndex = lastKnownIndex; } const tabToMoveAt = gBrowser.tabContainer.getItemAtIndex(newIndex); console.log("tabToMoveAt", tabToMoveAt); console.log("newIndex", newIndex); selectedTabs.forEach(t => gBrowser.moveTabBefore(t, tabToMoveAt)); // Restart global vars lastKnownIndex = null; lastGroupStart = null; lastGroupEnd = null; } } // copy of the original and overrided _getDropEffectForTabDrag method function orig_getDropEffectForTabDrag(event) { let dt = event.dataTransfer; let isMovingTabs = dt.mozItemCount > 0; for (let i = 0; i < dt.mozItemCount; i++) { // tabs are always added as the first type let types = dt.mozTypesAt(0); if (types[0] != TAB_DROP_TYPE) { isMovingTabs = false; break; } } if (isMovingTabs) { let sourceNode = dt.mozGetDataAt(TAB_DROP_TYPE, 0); if (XULElement.isInstance(sourceNode) && sourceNode.localName == "tab" && sourceNode.ownerGlobal.isChromeWindow && sourceNode.ownerDocument.documentElement.getAttribute("windowtype") == "navigator:browser" && sourceNode.ownerGlobal.gBrowser.tabContainer == sourceNode.container) { // Do not allow transfering a private tab to a non-private window // and vice versa. if (PrivateBrowsingUtils.isWindowPrivate(window) != PrivateBrowsingUtils.isWindowPrivate(sourceNode.ownerGlobal)) return "none"; if (window.gMultiProcessBrowser != sourceNode.ownerGlobal.gMultiProcessBrowser) return "none"; if (window.gFissionBrowser != sourceNode.ownerGlobal.gFissionBrowser) return "none"; return dt.dropEffect == "copy" ? "copy" : "move"; } } if (Services.droppedLinkHandler.canDropLink(event, true)) return "link"; return "none"; }
-
Ich mach Pause, richte Morgen ein Profi mit "Deiner" userChrome.css ein und bastele dann!
OK?
Schau immer mal wieder rein, kann auch Sonntag sein,
habe ja auch noch ein echtes Leben.
Aber versprochen, ich kümmere mich drum.Aber natürlich keine Sorge !
Ich danke dir 100x für deine aufopferungsvolle Hilfe und Zeit, die du mir schenkst !!
Ich werde am Sonntag nochmal vorbeischauen.
Aktuell lebe ich ja noch mit FF137 hier udn kann alles in Ruhe testen im virtuellen Win10 mit FF138.
Ich werde auf dich warten und hoffen, das es eine gute Lösung geben wird am Ende
Vielen vielen DANK erstmal !!! -
jetzt werden die TABS oben zu weit reingeschoben irgendwie.
Der Abstand zwischen den TABs ist auch noch zu weit
unten paßt das perfekt !
Kannst du mir bitte sagen wo du da was geändert hast, damit ich die zahlen mal versuchen kann ?
Ich ändere später das mit dem "Hoover" blau udn rot das muss ich nur löschen udn aber die Höhe ist hier normal eigentlich nur 35px -
Verdammt!
Du weißt doch, wie man Code eingibt!!
Dann mach das auch so und nicht immer mit irgendwelchen Krücken, die Dir irgendwie einfallenWarum hast Du im Code oben 667 Zeilen
und in dem bescheuerten Bildchen steht return "none"; in Zeile 745?
Ich komme mir irgendwie verschaukelt vor
Es tut mir leid, das du dir so vorkommst ich will dir nichts böses tun ich bin nur sehr unbeholfen bei sowas.Ich versuche dir nochmal den CODE zu geben bitte warte ... da steht ganz unten der CODE von dir drinnen.
MultiRowTabLiteforFx.uc.jsCSS
Alles anzeigen// ==UserScript== // @name MultiRowTabLiteforFx.uc.js // @namespace Based on Alice0775's zzzz-MultiRowTab_LiteforFx48.uc.js // @description Mehrzeilige Tableiste - Experimentelle CSS Version // @include main // @compatibility Firefox 138+ // @version 2025/04/07 12:00 // ==/UserScript== "use strict"; MultiRowTabLiteforFx(); function MultiRowTabLiteforFx() { if (!window.gBrowser) { return; } // -- Config -- // Vergleichbarer CSS Code in userChrome.css Datei wird vorrangig behandelt! const // Mehrzeilige Tableiste Ein/Aus Anzahl der Tabzeilen MultiRowTab_OnOff_and_TabBar_Rows = -1 ,// [-1] = Mehrzeilige Tableiste aktiv unbegrenzte Anzahl von Zeilen. // 0 = Mehrzeilige Tableiste aus. // 1 = Mehrzeilige Tableiste aktiv. Standard = 1 Zeile. Bei Berührung // der Tableiste mit der der Maus, werden die zweite und die folgenden // Zeilen bis zur angegebenen Anzahl von Zeilen angezeigt. // 2 = Mehrzeilige Tableiste aktiv. Anzahl der Tabzeilen angeben. TabBar_Rows_on_MouseOver = 3 ,// Standard = 1 Zeile. Anzahl der Zeilen angeben, die angezeigt werden sollen, // wenn der Mauszeiger über die Tableiste bewegt wird. Voraussetzung: // „MultiRowTab_OnOff_and_TabBar_Rows“ auf „1“ setzen. TabBar_DisplayTime_on_MouseOver = 1 ,// Sie können die Anzeigezeit (Sekunden) festlegen, wann die zweite und die // folgenden Zeilen beim Mouseover angezeigt werden. Das Display zeigt den // eingestellten Wert(Sekunden) an und kehrt dann zur ersten Zeile zurück. // Position der Tab-Leiste. TabBar_Position = 1 ,// [0] = Standard // 1 = unter der Symbolleiste // 2 = unter dem Fenster // Positionen der Tab-Leiste und der Lesezeichen-Symbolleiste tauschen. // sofern die Position der Tab-Leiste unterhalb der Symbolleiste festgelegt ist. // Voraussetzung: "TabBar_Position" auf "1". Bookmark_Toolbar_Position = true ,// [true] = Menüleiste, Navigationsleiste, Lesezeichenleiste, Tableiste // false = Menüleiste, Navigationsleiste, Tableiste, Lesezeichensymbolleiste // Tab-Höhe „UI-Dichte“ UI_Density_Compact = 29 ,// Standard = 29 Pixelbei Kompakt UI_Density_Normal = 36 ,// Standard = 36 Pixel bei Normal UI_Density_Touch = 41 ,// Standard = 41 Pixel bei Touch // Tab-Breite Tab_Min_Width = 35 ,// Standard - Mindestwert = 76px Tab_Max_Width = 170 ,// Standard - Maxwert = 225px // Bei gleichen Werten bei Min und Max, wird die Tabbreite fixiert! // „Tab schließen“ Schaltfläche Tab_Close_Button = 2 ,// [0] = Standard // 1 = Ausgeblendet // 2 = Auf allen Tabs anzeigen // 3 = Nur bei Mausberührung anzeigen // 4 = Aktive Tabs werden immer angezeigt, inaktive Tabs // werden beim Mouseover angezeigt. *Standard für vertikalen Tab-Modus. // ProtonUI Erscheinungsbild der Tabs ändern Proton_Margins = true ,// [true] = Darstellung ProtonUI // Die Höhe der Tab-Leiste entspricht der Höhe der UI-Dichte plus dem Leerraum darüber // und darunter. // false = Darstellung wie bei browser.proton.enabled auf false, was man vor Firefox 90 // noch einstellen konnte. // Wenn der Leerraum um die Tabs auf 0 und die Höhe auf die UI-Dichte eingestellt // ist, ist sie 4 Pixel breiter und 8 Pixel niedriger als die Standardeinstellung. // Ränder auf der linken und rechten Seite der Tabs Tab_Separators = false ,// [false] = Nicht anzeigen // true = Anzeigen // Rahmen CSS wurde extrahiert und angepasst, an Aussehen wie bei browser.proton.enabled // auf false, was man vor Firefox 90 noch einstellen konnte. // Voraussetzung: „TabBar_Position“ auf „0“ setzen. TitleBar_Button_Autohide = false ,// [false] = Aktiviert // true = Deaktiviert // Äußeren Rahmen der Titelleistenschaltfläche [-□×] reduzieren und transparent machen. TitleBar_Button_DisplayTime = 0.6 ,// Dauer der Anzeige in Sekunden, nach der Rückkehr zur Originalgröße und dem Aufheben // der Transparenz per Mouseover angeben. // Tab-Leiste von Anfang an auf die angegebene Höhe einstellen. // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf „2“ oder höher setzen. Set_the_TabBar_to_the_Specified_Height = false ,// [false] = Die Tab-Leiste wird höher, wenn der nächsten Zeile weitere Tabs hinzugefügt werden. // true = Verwendung: Die Tab-Leiste wird von Anfang an auf die angegebene Höhe eingestellt // „.tabDropIndicator“, der beim Ziehen und Ablegen eines Tabs angezeigt wird, ersetzen. // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf einen anderen Wert als „0“ setzen. Tab_Drop_Indicator = false ,// [false] = Stecknadel Symbol 📍 // true = Rote Linie (2px × 29px) als Symbol // Position der angepinnten Tabs // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf einen Wert ungleich „0“ setzen. Separate_Tabs_and_PinnedTabs = false ,// [false] = Standard // true = Angeheftete Tabs von der Tab-Leiste lösen und in die darüber liegende // Zeile verschieben. Breite der angehefteten Tabs für die Position der // angehefteten Tabs „true“ anpassen. PinnedTab_Width = false ,// [false] = Kein Standard // true = Breite angehefteter Tabs anpassen, z. B. „Tab-Breite“. PinnedTab_Min_Width = 76 ,// Standard Mindestbreite = 76 Pixel PinnedTab_Max_Width = 225 ,// Standard Maximalbreite = 225 Pixel // Bei gleichen Werten ist die Breite fixiert. // Angeheftete Tab, Schließen Schaltfläche // Voraussetzung: „Separate_Tabs_and_PinnedTabs“ auf „true“ setzen. PinnedTab_Close_Button = 0 ,// [0] = Standard // 1 = auf allen Tabs sichtbar // 2 = auf Tab bei Mouseover anzeigen // 3 = Aktiver Tab immer sichtbar, inaktiver Tab bei Mouseover sichtbar // *Standard für vertikalen Tab-Modus. // Tab-Leisten-Ziehbereich Left_Drag_Area = 0 ,// Linker Ziehbereich Breite: Standard 40 Pixel Right_Drag_Area = 0 ,// Rechter Ziehbereich Breite: Standard 40 Pixel Maximize_Left_Drag_Area = false ,// true = Linken Ziehbereich bei maximiertem Fenster anzeigen. Standard ausgeblendet. Fullscreen_Drag_Area = false ,// true = Linken und rechten Ziehbereich bei Vollbild anzeigen. Standard ausgeblendet. // Wenn die Titelleiste angezeigt wird, funktioniert sie nicht als Drag-Bereich, selbst // wenn „.titlebar-spacer“ angezeigt wird. Daher habe ich dafür gesorgt, dass sie nichts bewirkt. // -- Config Ende -- css = ` #TabsToolbar:not([collapsed="true"]) { :root[uidensity="compact"] & { --tab-min-height: ${UI_Density_Compact}px; } :root:not([uidensity]) & { --tab-min-height: ${UI_Density_Normal}px; } :root[uidensity="touch"] & { --tab-min-height: ${UI_Density_Touch}px; } #tabbrowser-tabs { min-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px); ${MultiRowTab_OnOff_and_TabBar_Rows != 0 ? ` &[overflow] { padding-inline: 0 !important; & > #tabbrowser-arrowscrollbox { & > .tabbrowser-tab[pinned] { display: flex; margin-inline-start: 0 !important; position: static !important; } &::part(scrollbox) { padding-inline: 0; } } & + #new-tab-button { display: none; } } ${Tab_Drop_Indicator ? ` & > .tab-drop-indicator { background: url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAdCAIAAAAPVCo9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASSURBVBhXY3growJEQ5+SUQEAOb1EM8kwskcAAAAASUVORK5CYII= ) no-repeat center; } ` : ``} #tabbrowser-arrowscrollbox { &::part(scrollbox) { & > slot { flex-wrap: wrap; } ${MultiRowTab_OnOff_and_TabBar_Rows != -1 ? ` ${MultiRowTab_OnOff_and_TabBar_Rows == 1 ? ` ${TabBar_Rows_on_MouseOver == 0 || TabBar_Rows_on_MouseOver == 1 ? ` max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * 2); ` : ` max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${TabBar_Rows_on_MouseOver}); `} &:not(:hover) { max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) !important; ${Proton_Margins ? `scrollbar-width: none;` : ``} transition: all 0s ease-in-out ${TabBar_DisplayTime_on_MouseOver}s; } ` : ` ${Set_the_TabBar_to_the_Specified_Height ? ` min-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows}); & > slot { max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px); } ` : ` max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows}); `} `} overflow: hidden auto; & scrollbar { -moz-window-dragging: no-drag; } ` : ``} } &::part(overflow-start-indicator), &::part(overflow-end-indicator), &::part(scrollbutton-up), &::part(scrollbutton-down) { display: none; } ${Separate_Tabs_and_PinnedTabs ? ` &:has(> .tabbrowser-tab[fadein][pinned]) { &::part(scrollbox) { & > slot::after { display: flow-root list-item; content: ""; flex-basis: -moz-available; height: 0; overflow: hidden; } } } .tabbrowser-tab[fadein] { &:not([pinned]) { #tabbrowser-tabs[haspinnedtabs] & { &, & + :not(#tabs-newtab-button) { order: 1; } } } &[pinned] { .tab-background:after { content: "📌"; font-size: 11px; right: -2px; position: absolute; top: -2px; } ${PinnedTab_Width ? ` flex: 100 100; max-width: ${PinnedTab_Max_Width}px; min-width: ${PinnedTab_Min_Width}px; .tab-throbber, .tab-icon-pending, .tab-icon-image, .tab-sharing-icon-overlay, .tab-icon-overlay { margin-inline-end: 5.5px !important; } ${PinnedTab_Close_Button == 1 ? ` .tab-close-button { display: flex; } ` : PinnedTab_Close_Button == 2 ? ` .tab-close-button { display: none; } &:hover .tab-close-button { display: flex; } ` : PinnedTab_Close_Button == 3 ? ` &:not([selected]):hover, &[selected] { .tab-close-button { display: flex; } } ` : ``} ` : ``} } } ` : ``} #tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]):not([orient="vertical"]) > & { & > .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) { margin-inline-start: 0 !important; } } } ` : ``} } .tabbrowser-tab[fadein]:not([pinned]) { max-width: ${Tab_Max_Width}px; min-width: ${Tab_Min_Width}px; ${Tab_Close_Button == 1 ? ` .tab-close-button { display: none; } ` : Tab_Close_Button == 2 ? ` .tab-close-button { display: flex; } ` : Tab_Close_Button == 3 ? ` .tab-close-button { display: none; } &:hover .tab-close-button { display: flex; } ` : Tab_Close_Button == 4 ? ` &:not([selected]):hover { .tab-close-button { display: flex; } } ` : ``} } ${Tab_Separators ? ` .titlebar-spacer[type="pre-tabs"] { border-inline-end: 1px solid color-mix(in srgb, currentColor 20%, transparent); } .tabbrowser-tab { &::after, &::before { border-left: 1px solid color-mix(in srgb, currentColor 50%, transparent); height: calc(var(--tab-min-height) - 15%); margin-block: auto; } &:hover::after, &[multiselected]::after, #tabbrowser-tabs:not([movingtab]) &:has(+ .tabbrowser-tab:hover)::after, #tabbrowser-tabs:not([movingtab]) &:has(+ [multiselected])::after { height: 100%; } &::after, #tabbrowser-tabs[movingtab] &[visuallyselected]::before { display: flex; content: ""; } } ` : ``} ${Proton_Margins ? `` : ` .tabbrowser-tab, .toolbarbutton-1 { padding: 0; } .tabbrowser-tab, #tabs-newtab-button { height: var(--tab-min-height); } .tabbrowser-tab { .tab-background { box-shadow: none; margin-block: 0; } .tab-label-container { height: var(--tab-min-height); max-height: 24px; } .tab-close-button { height: 20px !important; padding-block: 3px !important; } &[usercontextid] > .tab-stack > .tab-background > .tab-context-line { margin-block-start: 1px !important; } } `} ${TabBar_Position == 0 ? ` .titlebar-buttonbox-container { height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px); } ${TitleBar_Button_Autohide ? ` & > .titlebar-buttonbox-container { background-color: color-mix(in srgb, currentColor 20%, transparent); position: fixed; right: 0; &:not(:hover) { height: 6px; .titlebar-button { padding: 0; } &,& .titlebar-button { opacity: 0; transition: all 0s ease-in-out ${TitleBar_Button_DisplayTime}s; } } } ` : ``} }` : ` ${TabBar_Position == 1 || TabBar_Position == 2 ? ` & > .titlebar-buttonbox-container { display: none; }} #nav-bar { &:not(.browser-titlebar) { :root[customtitlebar] #toolbar-menubar[autohide="true"] ~ &, :root[inFullscreen] #toolbar-menubar ~ & { & > .titlebar-buttonbox-container { display: flex; } } } .titlebar-button { padding-block: 0; } } ` : ``} body:has(> #navigator-toolbox:not([tabs-hidden])) { ${TabBar_Position == 1 ? ` script, toolbar:not(#TabsToolbar ${Bookmark_Toolbar_Position ? `` : `, #PersonalToolbar`}) { order: -1; } ` : TabBar_Position == 2 ? ` & > #fullscr-toggler[hidden] + tabbox, :root[inFullscreen] & > tabbox:hover { border-top: 0.01px solid var(--chrome-content-separator-color); } & > tabbox > #navigator-toolbox { border-block: none !important; } :root[inFullscreen] & { & > #navigator-toolbox { transition: none; &:has(~ tabbox:hover) { margin-top: 0 !important; } &:hover ~ tabbox > #navigator-toolbox { display: flex; } } & > tabbox:not(:hover) { border-top: 0.01px solid transparent; & > #navigator-toolbox { display: none; } } } ` : ``} } `} toolbar[id$="bar"].browser-titlebar { .titlebar-spacer { &[type="pre-tabs"] { width: ${Left_Drag_Area}px; } &[type="post-tabs"] { width: ${Right_Drag_Area}px; } ${Maximize_Left_Drag_Area ? ` :root[customtitlebar]:not([sizemode="normal"], [inFullscreen]) &[type="pre-tabs"] { display: flex; } ` : ``} ${Fullscreen_Drag_Area ? ` :root[customtitlebar][inFullscreen] & { display: flex; } ` : ``} } #navigator-toolbox[tabs-hidden] & { #new-tab-button { display: none; } } } `, sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService), uri = Services.io.newURI("data:text/css;charset=UTF=8," + encodeURIComponent(css)); ["0", "2", "dragend", "SSTabRestored", "TabAttrModified"].find(eventType => { if(!sss.sheetRegistered(uri, eventType)) sss.loadAndRegisterSheet(uri, eventType); if (MultiRowTab_OnOff_and_TabBar_Rows > 0) { gBrowser.tabContainer.addEventListener(eventType, (e) => { e.target.scrollIntoView({ behavior: "instant", block: "nearest" }) }) } }) if (TabBar_Position == 2) { document.body.appendChild( document.createXULElement("tabbox") ).appendChild( document.importNode(document.getElementById("navigator-toolbox")) ).appendChild( document.adoptNode(document.getElementById("TabsToolbar")) ) } gBrowser.tabContainer._getDropIndex = function(event) { let tabToDropAt = getTabFromEventTarget(event, false); const tabPos = gBrowser.tabContainer.getIndexOfItem(tabToDropAt); if (window.getComputedStyle(this).direction == "ltr") { let rect = tabToDropAt.getBoundingClientRect(); if (event.clientX < rect.x + rect.width / 2) return tabPos; else return tabPos + 1; } else { let rect = tabToDropAt.getBoundingClientRect(); if (event.clientX > rect.x + rect.width / 2) return tabPos; else return tabPos + 1; } }; // We set this to check if the listeners were added before let listenersActive = false; // This sets when to apply the fix (by default a new row starts after the 23th open tab, unless you changed the min-size of tabs) gBrowser.tabContainer.addEventListener("dragstart", () => { // Multiple tab select fix gBrowser.visibleTabs.forEach(t => t.style.transform = ""); // Event handling if (!listenersActive) { gBrowser.tabContainer.getDropEffectForTabDrag = function(){}; gBrowser.tabContainer._getDropEffectForTabDrag = function(){}; gBrowser.tabContainer.on_dragover = (dragoverEvent) => performTabDragOver(dragoverEvent); gBrowser.tabContainer._onDragOver = (dragoverEvent) => performTabDragOver(dragoverEvent); gBrowser.tabContainer.ondrop = (dropEvent) => performTabDropEvent(dropEvent); listenersActive = true; } }); } var lastKnownIndex = null; var lastGroupStart = null; var lastGroupEnd = null; /** * Gets the tab from the event target. * @param {*} event The event. * @returns The tab if it was part of the target or its parents, otherwise null */ function getTabFromEventTarget(event, { ignoreTabSides = false } = {}) { let { target } = event; if (target.nodeType != Node.ELEMENT_NODE) { target = target.parentElement; } let tab = target?.closest("tab") || target?.closest("tab-group"); const selectedTab = gBrowser.selectedTab; if (tab && ignoreTabSides) { let { width, height } = tab.getBoundingClientRect(); if ( event.screenX < tab.screenX + width * 0.25 || event.screenX > tab.screenX + width * 0.75 || ((event.screenY < tab.screenY + height * 0.25 || event.screenY > tab.screenY + height * 0.75) && gBrowser.tabContainer.verticalMode) ) { return selectedTab; } } if (!tab) { return selectedTab; } return tab; } /** * Performs the tab drag over event. * @param {*} event The drag over event. */ function performTabDragOver(event) { event.preventDefault(); event.stopPropagation(); let ind = gBrowser.tabContainer._tabDropIndicator; let effects = orig_getDropEffectForTabDrag(event); let tab; if (effects == "link") { tab = getTabFromEventTarget(event, true); if (tab) { if (!gBrowser.tabContainer._dragTime) gBrowser.tabContainer._dragTime = Date.now(); if (!tab.hasAttribute("pendingicon") && // annoying fix Date.now() >= gBrowser.tabContainer._dragTime + gBrowser.tabContainer._dragOverDelay) gBrowser.tabContainer.selectedItem = tab; ind.hidden = true; return; } } if (!tab) { tab = getTabFromEventTarget(event, false); } let newIndex = gBrowser.tabContainer._getDropIndex(event); if (newIndex == null) return; // Update the last known index and group position lastKnownIndex = newIndex; if (tab.nodeName == "tab-group" && !lastGroupStart) { lastGroupStart = tab.querySelector("tab:first-of-type")._tPos; lastGroupEnd = tab.querySelector("tab:last-of-type")._tPos; } let tabs = document.querySelectorAll("tab"); let ltr = (window.getComputedStyle(gBrowser.tabContainer).direction == "ltr"); let rect = gBrowser.tabContainer.arrowScrollbox.getBoundingClientRect(); let newMarginX, newMarginY; if (newIndex == tabs.length) { let tabRect = tabs[newIndex - 1].getBoundingClientRect(); if (ltr) newMarginX = tabRect.right - rect.left; else newMarginX = rect.right - tabRect.left; newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fix if (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+ newMarginY += rect.height / 2 - tabRect.height / 2; } else if (newIndex != null || newIndex != 0) { let tabRect = tabs[newIndex].getBoundingClientRect(); if (ltr) newMarginX = tabRect.left - rect.left; else newMarginX = rect.right - tabRect.right; newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fix if (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+ newMarginY += rect.height / 2 - tabRect.height / 2; } newMarginX += ind.clientWidth / 2; if (!ltr) newMarginX *= -1; ind.hidden = false; ind.style.transform = "translate(" + Math.round(newMarginX) + "px," + Math.round(newMarginY) + "px)"; // multirow fix ind.style.marginInlineStart = (-ind.clientWidth) + "px"; } /** * Performs the tab drop event. * @param {*} event The drop event. */ function performTabDropEvent(event) { let newIndex; let dt = event.dataTransfer; let dropEffect = dt.dropEffect; let draggedTab; if (dt.mozTypesAt(0)[0] == TAB_DROP_TYPE) { draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0); if (!draggedTab) { return; } } if (draggedTab && dropEffect != "copy" && draggedTab.container == gBrowser.tabContainer) { newIndex = gBrowser.tabContainer._getDropIndex(event); /* fix for moving multiple selected tabs and tab groups */ let selectedTabs = gBrowser.selectedTabs; if (lastGroupStart) { selectedTabs = [draggedTab?.closest("tab-group")]; if (lastKnownIndex >= lastGroupStart && lastKnownIndex <= lastGroupEnd) { newIndex = lastGroupStart; } else if (lastKnownIndex == lastGroupEnd + 1) { newIndex = lastGroupStart + 1; } } if (selectedTabs[selectedTabs.length - 1] == null){ newIndex = lastKnownIndex; } else if (newIndex > selectedTabs[selectedTabs.length - 1]._tPos + 1) newIndex--; else if (newIndex >= selectedTabs[0]._tPos) newIndex = -1; if (newIndex == -1) { newIndex = lastKnownIndex; } const tabToMoveAt = gBrowser.tabContainer.getItemAtIndex(newIndex); console.log("tabToMoveAt", tabToMoveAt); console.log("newIndex", newIndex); selectedTabs.forEach(t => gBrowser.moveTabBefore(t, tabToMoveAt)); // Restart global vars lastKnownIndex = null; lastGroupStart = null; lastGroupEnd = null; } } // copy of the original and overrided _getDropEffectForTabDrag method function orig_getDropEffectForTabDrag(event) { let dt = event.dataTransfer; let isMovingTabs = dt.mozItemCount > 0; for (let i = 0; i < dt.mozItemCount; i++) { // tabs are always added as the first type let types = dt.mozTypesAt(0); if (types[0] != TAB_DROP_TYPE) { isMovingTabs = false; break; } } if (isMovingTabs) { let sourceNode = dt.mozGetDataAt(TAB_DROP_TYPE, 0); if (XULElement.isInstance(sourceNode) && sourceNode.localName == "tab" && sourceNode.ownerGlobal.isChromeWindow && sourceNode.ownerDocument.documentElement.getAttribute("windowtype") == "navigator:browser" && sourceNode.ownerGlobal.gBrowser.tabContainer == sourceNode.container) { // Do not allow transfering a private tab to a non-private window // and vice versa. if (PrivateBrowsingUtils.isWindowPrivate(window) != PrivateBrowsingUtils.isWindowPrivate(sourceNode.ownerGlobal)) return "none"; if (window.gMultiProcessBrowser != sourceNode.ownerGlobal.gMultiProcessBrowser) return "none"; if (window.gFissionBrowser != sourceNode.ownerGlobal.gFissionBrowser) return "none"; return dt.dropEffect == "copy" ? "copy" : "move"; } } if (Services.droppedLinkHandler.canDropLink(event, true)) return "link"; return "none"; } .tabbrowser-tab:not([pinned]) { padding-inline: 5px !important; } .tab-background { margin-block: 0 !important; }
-
Wo hast Du dieses CSS eingefügt?
Welche Datei?Bitte, bitte lass Dir doch nicht immer alles aus der Nase ziehen!
MultiRowTabLiteforFx.uc.js
ganz unten am Ende schau .... -
Jetzt bruahc ich nur noch den Abstand der TAB der soll 0 sein oben und unten 0 un zueinender bitte 5px
Ich steig da nicht durch, aber probier mal ganz grob in der CSS Datei das dazu, am besten unten:
Das geht nicht, wenn ich da ganz unten ans Ende einfüge, dann ist die TAB-Leiste wieder über der Adressleiste, wo soll das denn rein genau in welche Datei ?
Also nochmal ich versuche s mal anders zu erklären.
Ich möchte das der Abstand der TABs zueinander rund 5px ist.
Ich möchte gerne, das über den TABs kein freier Raum ist
Ich möhte das unter jedem TAB kein freier Raum ist
Das wäre der Anfang weitere Dinge sage ich erstmal nicht um nicht wieder zu veriwrren heheheheaktuell ist es so in "MultiRowTabLiteforFx.uc"
CSS
Alles anzeigen// ==UserScript== // @name MultiRowTabLiteforFx.uc.js // @namespace Based on Alice0775's zzzz-MultiRowTab_LiteforFx48.uc.js // @description Mehrzeilige Tableiste - Experimentelle CSS Version // @include main // @compatibility Firefox 138+ // @version 2025/04/07 12:00 // ==/UserScript== "use strict"; MultiRowTabLiteforFx(); function MultiRowTabLiteforFx() { if (!window.gBrowser) { return; } // -- Config -- // Vergleichbarer CSS Code in userChrome.css Datei wird vorrangig behandelt! const // Mehrzeilige Tableiste Ein/Aus Anzahl der Tabzeilen MultiRowTab_OnOff_and_TabBar_Rows = -1 ,// [-1] = Mehrzeilige Tableiste aktiv unbegrenzte Anzahl von Zeilen. // 0 = Mehrzeilige Tableiste aus. // 1 = Mehrzeilige Tableiste aktiv. Standard = 1 Zeile. Bei Berührung // der Tableiste mit der der Maus, werden die zweite und die folgenden // Zeilen bis zur angegebenen Anzahl von Zeilen angezeigt. // 2 = Mehrzeilige Tableiste aktiv. Anzahl der Tabzeilen angeben. TabBar_Rows_on_MouseOver = 3 ,// Standard = 1 Zeile. Anzahl der Zeilen angeben, die angezeigt werden sollen, // wenn der Mauszeiger über die Tableiste bewegt wird. Voraussetzung: // „MultiRowTab_OnOff_and_TabBar_Rows“ auf „1“ setzen. TabBar_DisplayTime_on_MouseOver = 1 ,// Sie können die Anzeigezeit (Sekunden) festlegen, wann die zweite und die // folgenden Zeilen beim Mouseover angezeigt werden. Das Display zeigt den // eingestellten Wert(Sekunden) an und kehrt dann zur ersten Zeile zurück. // Position der Tab-Leiste. TabBar_Position = 1 ,// [0] = Standard // 1 = unter der Symbolleiste // 2 = unter dem Fenster // Positionen der Tab-Leiste und der Lesezeichen-Symbolleiste tauschen. // sofern die Position der Tab-Leiste unterhalb der Symbolleiste festgelegt ist. // Voraussetzung: "TabBar_Position" auf "1". Bookmark_Toolbar_Position = true ,// [true] = Menüleiste, Navigationsleiste, Lesezeichenleiste, Tableiste // false = Menüleiste, Navigationsleiste, Tableiste, Lesezeichensymbolleiste // Tab-Höhe „UI-Dichte“ UI_Density_Compact = 29 ,// Standard = 29 Pixelbei Kompakt UI_Density_Normal = 36 ,// Standard = 36 Pixel bei Normal UI_Density_Touch = 41 ,// Standard = 41 Pixel bei Touch // Tab-Breite Tab_Min_Width = 35 ,// Standard - Mindestwert = 76px Tab_Max_Width = 170 ,// Standard - Maxwert = 225px // Bei gleichen Werten bei Min und Max, wird die Tabbreite fixiert! // „Tab schließen“ Schaltfläche Tab_Close_Button = 2 ,// [0] = Standard // 1 = Ausgeblendet // 2 = Auf allen Tabs anzeigen // 3 = Nur bei Mausberührung anzeigen // 4 = Aktive Tabs werden immer angezeigt, inaktive Tabs // werden beim Mouseover angezeigt. *Standard für vertikalen Tab-Modus. // ProtonUI Erscheinungsbild der Tabs ändern Proton_Margins = true ,// [true] = Darstellung ProtonUI // Die Höhe der Tab-Leiste entspricht der Höhe der UI-Dichte plus dem Leerraum darüber // und darunter. // false = Darstellung wie bei browser.proton.enabled auf false, was man vor Firefox 90 // noch einstellen konnte. // Wenn der Leerraum um die Tabs auf 0 und die Höhe auf die UI-Dichte eingestellt // ist, ist sie 4 Pixel breiter und 8 Pixel niedriger als die Standardeinstellung. // Ränder auf der linken und rechten Seite der Tabs Tab_Separators = false ,// [false] = Nicht anzeigen // true = Anzeigen // Rahmen CSS wurde extrahiert und angepasst, an Aussehen wie bei browser.proton.enabled // auf false, was man vor Firefox 90 noch einstellen konnte. // Voraussetzung: „TabBar_Position“ auf „0“ setzen. TitleBar_Button_Autohide = false ,// [false] = Aktiviert // true = Deaktiviert // Äußeren Rahmen der Titelleistenschaltfläche [-□×] reduzieren und transparent machen. TitleBar_Button_DisplayTime = 0.6 ,// Dauer der Anzeige in Sekunden, nach der Rückkehr zur Originalgröße und dem Aufheben // der Transparenz per Mouseover angeben. // Tab-Leiste von Anfang an auf die angegebene Höhe einstellen. // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf „2“ oder höher setzen. Set_the_TabBar_to_the_Specified_Height = false ,// [false] = Die Tab-Leiste wird höher, wenn der nächsten Zeile weitere Tabs hinzugefügt werden. // true = Verwendung: Die Tab-Leiste wird von Anfang an auf die angegebene Höhe eingestellt // „.tabDropIndicator“, der beim Ziehen und Ablegen eines Tabs angezeigt wird, ersetzen. // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf einen anderen Wert als „0“ setzen. Tab_Drop_Indicator = false ,// [false] = Stecknadel Symbol 📍 // true = Rote Linie (2px × 29px) als Symbol // Position der angepinnten Tabs // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf einen Wert ungleich „0“ setzen. Separate_Tabs_and_PinnedTabs = false ,// [false] = Standard // true = Angeheftete Tabs von der Tab-Leiste lösen und in die darüber liegende // Zeile verschieben. Breite der angehefteten Tabs für die Position der // angehefteten Tabs „true“ anpassen. PinnedTab_Width = false ,// [false] = Kein Standard // true = Breite angehefteter Tabs anpassen, z. B. „Tab-Breite“. PinnedTab_Min_Width = 76 ,// Standard Mindestbreite = 76 Pixel PinnedTab_Max_Width = 225 ,// Standard Maximalbreite = 225 Pixel // Bei gleichen Werten ist die Breite fixiert. // Angeheftete Tab, Schließen Schaltfläche // Voraussetzung: „Separate_Tabs_and_PinnedTabs“ auf „true“ setzen. PinnedTab_Close_Button = 0 ,// [0] = Standard // 1 = auf allen Tabs sichtbar // 2 = auf Tab bei Mouseover anzeigen // 3 = Aktiver Tab immer sichtbar, inaktiver Tab bei Mouseover sichtbar // *Standard für vertikalen Tab-Modus. // Tab-Leisten-Ziehbereich Left_Drag_Area = 0 ,// Linker Ziehbereich Breite: Standard 40 Pixel Right_Drag_Area = 0 ,// Rechter Ziehbereich Breite: Standard 40 Pixel Maximize_Left_Drag_Area = false ,// true = Linken Ziehbereich bei maximiertem Fenster anzeigen. Standard ausgeblendet. Fullscreen_Drag_Area = false ,// true = Linken und rechten Ziehbereich bei Vollbild anzeigen. Standard ausgeblendet. // Wenn die Titelleiste angezeigt wird, funktioniert sie nicht als Drag-Bereich, selbst // wenn „.titlebar-spacer“ angezeigt wird. Daher habe ich dafür gesorgt, dass sie nichts bewirkt. // -- Config Ende -- css = ` #TabsToolbar:not([collapsed="true"]) { :root[uidensity="compact"] & { --tab-min-height: ${UI_Density_Compact}px; } :root:not([uidensity]) & { --tab-min-height: ${UI_Density_Normal}px; } :root[uidensity="touch"] & { --tab-min-height: ${UI_Density_Touch}px; } #tabbrowser-tabs { min-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px); ${MultiRowTab_OnOff_and_TabBar_Rows != 0 ? ` &[overflow] { padding-inline: 0 !important; & > #tabbrowser-arrowscrollbox { & > .tabbrowser-tab[pinned] { display: flex; margin-inline-start: 0 !important; position: static !important; } &::part(scrollbox) { padding-inline: 0; } } & + #new-tab-button { display: none; } } ${Tab_Drop_Indicator ? ` & > .tab-drop-indicator { background: url( data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAdCAIAAAAPVCo9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASSURBVBhXY3growJEQ5+SUQEAOb1EM8kwskcAAAAASUVORK5CYII= ) no-repeat center; } ` : ``} #tabbrowser-arrowscrollbox { &::part(scrollbox) { & > slot { flex-wrap: wrap; } ${MultiRowTab_OnOff_and_TabBar_Rows != -1 ? ` ${MultiRowTab_OnOff_and_TabBar_Rows == 1 ? ` ${TabBar_Rows_on_MouseOver == 0 || TabBar_Rows_on_MouseOver == 1 ? ` max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * 2); ` : ` max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${TabBar_Rows_on_MouseOver}); `} &:not(:hover) { max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) !important; ${Proton_Margins ? `scrollbar-width: none;` : ``} transition: all 0s ease-in-out ${TabBar_DisplayTime_on_MouseOver}s; } ` : ` ${Set_the_TabBar_to_the_Specified_Height ? ` min-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows}); & > slot { max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px); } ` : ` max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows}); `} `} overflow: hidden auto; & scrollbar { -moz-window-dragging: no-drag; } ` : ``} } &::part(overflow-start-indicator), &::part(overflow-end-indicator), &::part(scrollbutton-up), &::part(scrollbutton-down) { display: none; } ${Separate_Tabs_and_PinnedTabs ? ` &:has(> .tabbrowser-tab[fadein][pinned]) { &::part(scrollbox) { & > slot::after { display: flow-root list-item; content: ""; flex-basis: -moz-available; height: 0; overflow: hidden; } } } .tabbrowser-tab[fadein] { &:not([pinned]) { #tabbrowser-tabs[haspinnedtabs] & { &, & + :not(#tabs-newtab-button) { order: 1; } } } &[pinned] { .tab-background:after { content: "📌"; font-size: 11px; right: -2px; position: absolute; top: -2px; } ${PinnedTab_Width ? ` flex: 100 100; max-width: ${PinnedTab_Max_Width}px; min-width: ${PinnedTab_Min_Width}px; .tab-throbber, .tab-icon-pending, .tab-icon-image, .tab-sharing-icon-overlay, .tab-icon-overlay { margin-inline-end: 5.5px !important; } ${PinnedTab_Close_Button == 1 ? ` .tab-close-button { display: flex; } ` : PinnedTab_Close_Button == 2 ? ` .tab-close-button { display: none; } &:hover .tab-close-button { display: flex; } ` : PinnedTab_Close_Button == 3 ? ` &:not([selected]):hover, &[selected] { .tab-close-button { display: flex; } } ` : ``} ` : ``} } } ` : ``} #tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]):not([orient="vertical"]) > & { & > .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) { margin-inline-start: 0 !important; } } } ` : ``} } .tabbrowser-tab[fadein]:not([pinned]) { max-width: ${Tab_Max_Width}px; min-width: ${Tab_Min_Width}px; ${Tab_Close_Button == 1 ? ` .tab-close-button { display: none; } ` : Tab_Close_Button == 2 ? ` .tab-close-button { display: flex; } ` : Tab_Close_Button == 3 ? ` .tab-close-button { display: none; } &:hover .tab-close-button { display: flex; } ` : Tab_Close_Button == 4 ? ` &:not([selected]):hover { .tab-close-button { display: flex; } } ` : ``} } ${Tab_Separators ? ` .titlebar-spacer[type="pre-tabs"] { border-inline-end: 1px solid color-mix(in srgb, currentColor 20%, transparent); } .tabbrowser-tab { &::after, &::before { border-left: 1px solid color-mix(in srgb, currentColor 50%, transparent); height: calc(var(--tab-min-height) - 15%); margin-block: auto; } &:hover::after, &[multiselected]::after, #tabbrowser-tabs:not([movingtab]) &:has(+ .tabbrowser-tab:hover)::after, #tabbrowser-tabs:not([movingtab]) &:has(+ [multiselected])::after { height: 100%; } &::after, #tabbrowser-tabs[movingtab] &[visuallyselected]::before { display: flex; content: ""; } } ` : ``} ${Proton_Margins ? `` : ` .tabbrowser-tab, .toolbarbutton-1 { padding: 0; } .tabbrowser-tab, #tabs-newtab-button { height: var(--tab-min-height); } .tabbrowser-tab { .tab-background { box-shadow: none; margin-block: 0; } .tab-label-container { height: var(--tab-min-height); max-height: 24px; } .tab-close-button { height: 20px !important; padding-block: 3px !important; } &[usercontextid] > .tab-stack > .tab-background > .tab-context-line { margin-block-start: 1px !important; } } `} ${TabBar_Position == 0 ? ` .titlebar-buttonbox-container { height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px); } ${TitleBar_Button_Autohide ? ` & > .titlebar-buttonbox-container { background-color: color-mix(in srgb, currentColor 20%, transparent); position: fixed; right: 0; &:not(:hover) { height: 6px; .titlebar-button { padding: 0; } &,& .titlebar-button { opacity: 0; transition: all 0s ease-in-out ${TitleBar_Button_DisplayTime}s; } } } ` : ``} }` : ` ${TabBar_Position == 1 || TabBar_Position == 2 ? ` & > .titlebar-buttonbox-container { display: none; }} #nav-bar { &:not(.browser-titlebar) { :root[customtitlebar] #toolbar-menubar[autohide="true"] ~ &, :root[inFullscreen] #toolbar-menubar ~ & { & > .titlebar-buttonbox-container { display: flex; } } } .titlebar-button { padding-block: 0; } } ` : ``} body:has(> #navigator-toolbox:not([tabs-hidden])) { ${TabBar_Position == 1 ? ` script, toolbar:not(#TabsToolbar ${Bookmark_Toolbar_Position ? `` : `, #PersonalToolbar`}) { order: -1; } ` : TabBar_Position == 2 ? ` & > #fullscr-toggler[hidden] + tabbox, :root[inFullscreen] & > tabbox:hover { border-top: 0.01px solid var(--chrome-content-separator-color); } & > tabbox > #navigator-toolbox { border-block: none !important; } :root[inFullscreen] & { & > #navigator-toolbox { transition: none; &:has(~ tabbox:hover) { margin-top: 0 !important; } &:hover ~ tabbox > #navigator-toolbox { display: flex; } } & > tabbox:not(:hover) { border-top: 0.01px solid transparent; & > #navigator-toolbox { display: none; } } } ` : ``} } `} toolbar[id$="bar"].browser-titlebar { .titlebar-spacer { &[type="pre-tabs"] { width: ${Left_Drag_Area}px; } &[type="post-tabs"] { width: ${Right_Drag_Area}px; } ${Maximize_Left_Drag_Area ? ` :root[customtitlebar]:not([sizemode="normal"], [inFullscreen]) &[type="pre-tabs"] { display: flex; } ` : ``} ${Fullscreen_Drag_Area ? ` :root[customtitlebar][inFullscreen] & { display: flex; } ` : ``} } #navigator-toolbox[tabs-hidden] & { #new-tab-button { display: none; } } } `, sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService), uri = Services.io.newURI("data:text/css;charset=UTF=8," + encodeURIComponent(css)); ["0", "2", "dragend", "SSTabRestored", "TabAttrModified"].find(eventType => { if(!sss.sheetRegistered(uri, eventType)) sss.loadAndRegisterSheet(uri, eventType); if (MultiRowTab_OnOff_and_TabBar_Rows > 0) { gBrowser.tabContainer.addEventListener(eventType, (e) => { e.target.scrollIntoView({ behavior: "instant", block: "nearest" }) }) } }) if (TabBar_Position == 2) { document.body.appendChild( document.createXULElement("tabbox") ).appendChild( document.importNode(document.getElementById("navigator-toolbox")) ).appendChild( document.adoptNode(document.getElementById("TabsToolbar")) ) } gBrowser.tabContainer._getDropIndex = function(event) { let tabToDropAt = getTabFromEventTarget(event, false); const tabPos = gBrowser.tabContainer.getIndexOfItem(tabToDropAt); if (window.getComputedStyle(this).direction == "ltr") { let rect = tabToDropAt.getBoundingClientRect(); if (event.clientX < rect.x + rect.width / 2) return tabPos; else return tabPos + 1; } else { let rect = tabToDropAt.getBoundingClientRect(); if (event.clientX > rect.x + rect.width / 2) return tabPos; else return tabPos + 1; } }; // We set this to check if the listeners were added before let listenersActive = false; // This sets when to apply the fix (by default a new row starts after the 23th open tab, unless you changed the min-size of tabs) gBrowser.tabContainer.addEventListener("dragstart", () => { // Multiple tab select fix gBrowser.visibleTabs.forEach(t => t.style.transform = ""); // Event handling if (!listenersActive) { gBrowser.tabContainer.getDropEffectForTabDrag = function(){}; gBrowser.tabContainer._getDropEffectForTabDrag = function(){}; gBrowser.tabContainer.on_dragover = (dragoverEvent) => performTabDragOver(dragoverEvent); gBrowser.tabContainer._onDragOver = (dragoverEvent) => performTabDragOver(dragoverEvent); gBrowser.tabContainer.ondrop = (dropEvent) => performTabDropEvent(dropEvent); listenersActive = true; } }); } var lastKnownIndex = null; var lastGroupStart = null; var lastGroupEnd = null; /** * Gets the tab from the event target. * @param {*} event The event. * @returns The tab if it was part of the target or its parents, otherwise null */ function getTabFromEventTarget(event, { ignoreTabSides = false } = {}) { let { target } = event; if (target.nodeType != Node.ELEMENT_NODE) { target = target.parentElement; } let tab = target?.closest("tab") || target?.closest("tab-group"); const selectedTab = gBrowser.selectedTab; if (tab && ignoreTabSides) { let { width, height } = tab.getBoundingClientRect(); if ( event.screenX < tab.screenX + width * 0.25 || event.screenX > tab.screenX + width * 0.75 || ((event.screenY < tab.screenY + height * 0.25 || event.screenY > tab.screenY + height * 0.75) && gBrowser.tabContainer.verticalMode) ) { return selectedTab; } } if (!tab) { return selectedTab; } return tab; } /** * Performs the tab drag over event. * @param {*} event The drag over event. */ function performTabDragOver(event) { event.preventDefault(); event.stopPropagation(); let ind = gBrowser.tabContainer._tabDropIndicator; let effects = orig_getDropEffectForTabDrag(event); let tab; if (effects == "link") { tab = getTabFromEventTarget(event, true); if (tab) { if (!gBrowser.tabContainer._dragTime) gBrowser.tabContainer._dragTime = Date.now(); if (!tab.hasAttribute("pendingicon") && // annoying fix Date.now() >= gBrowser.tabContainer._dragTime + gBrowser.tabContainer._dragOverDelay) gBrowser.tabContainer.selectedItem = tab; ind.hidden = true; return; } } if (!tab) { tab = getTabFromEventTarget(event, false); } let newIndex = gBrowser.tabContainer._getDropIndex(event); if (newIndex == null) return; // Update the last known index and group position lastKnownIndex = newIndex; if (tab.nodeName == "tab-group" && !lastGroupStart) { lastGroupStart = tab.querySelector("tab:first-of-type")._tPos; lastGroupEnd = tab.querySelector("tab:last-of-type")._tPos; } let tabs = document.querySelectorAll("tab"); let ltr = (window.getComputedStyle(gBrowser.tabContainer).direction == "ltr"); let rect = gBrowser.tabContainer.arrowScrollbox.getBoundingClientRect(); let newMarginX, newMarginY; if (newIndex == tabs.length) { let tabRect = tabs[newIndex - 1].getBoundingClientRect(); if (ltr) newMarginX = tabRect.right - rect.left; else newMarginX = rect.right - tabRect.left; newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fix if (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+ newMarginY += rect.height / 2 - tabRect.height / 2; } else if (newIndex != null || newIndex != 0) { let tabRect = tabs[newIndex].getBoundingClientRect(); if (ltr) newMarginX = tabRect.left - rect.left; else newMarginX = rect.right - tabRect.right; newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fix if (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+ newMarginY += rect.height / 2 - tabRect.height / 2; } newMarginX += ind.clientWidth / 2; if (!ltr) newMarginX *= -1; ind.hidden = false; ind.style.transform = "translate(" + Math.round(newMarginX) + "px," + Math.round(newMarginY) + "px)"; // multirow fix ind.style.marginInlineStart = (-ind.clientWidth) + "px"; } /** * Performs the tab drop event. * @param {*} event The drop event. */ function performTabDropEvent(event) { let newIndex; let dt = event.dataTransfer; let dropEffect = dt.dropEffect; let draggedTab; if (dt.mozTypesAt(0)[0] == TAB_DROP_TYPE) { draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0); if (!draggedTab) { return; } } if (draggedTab && dropEffect != "copy" && draggedTab.container == gBrowser.tabContainer) { newIndex = gBrowser.tabContainer._getDropIndex(event); /* fix for moving multiple selected tabs and tab groups */ let selectedTabs = gBrowser.selectedTabs; if (lastGroupStart) { selectedTabs = [draggedTab?.closest("tab-group")]; if (lastKnownIndex >= lastGroupStart && lastKnownIndex <= lastGroupEnd) { newIndex = lastGroupStart; } else if (lastKnownIndex == lastGroupEnd + 1) { newIndex = lastGroupStart + 1; } } if (selectedTabs[selectedTabs.length - 1] == null){ newIndex = lastKnownIndex; } else if (newIndex > selectedTabs[selectedTabs.length - 1]._tPos + 1) newIndex--; else if (newIndex >= selectedTabs[0]._tPos) newIndex = -1; if (newIndex == -1) { newIndex = lastKnownIndex; } const tabToMoveAt = gBrowser.tabContainer.getItemAtIndex(newIndex); console.log("tabToMoveAt", tabToMoveAt); console.log("newIndex", newIndex); selectedTabs.forEach(t => gBrowser.moveTabBefore(t, tabToMoveAt)); // Restart global vars lastKnownIndex = null; lastGroupStart = null; lastGroupEnd = null; } } // copy of the original and overrided _getDropEffectForTabDrag method function orig_getDropEffectForTabDrag(event) { let dt = event.dataTransfer; let isMovingTabs = dt.mozItemCount > 0; for (let i = 0; i < dt.mozItemCount; i++) { // tabs are always added as the first type let types = dt.mozTypesAt(0); if (types[0] != TAB_DROP_TYPE) { isMovingTabs = false; break; } } if (isMovingTabs) { let sourceNode = dt.mozGetDataAt(TAB_DROP_TYPE, 0); if (XULElement.isInstance(sourceNode) && sourceNode.localName == "tab" && sourceNode.ownerGlobal.isChromeWindow && sourceNode.ownerDocument.documentElement.getAttribute("windowtype") == "navigator:browser" && sourceNode.ownerGlobal.gBrowser.tabContainer == sourceNode.container) { // Do not allow transfering a private tab to a non-private window // and vice versa. if (PrivateBrowsingUtils.isWindowPrivate(window) != PrivateBrowsingUtils.isWindowPrivate(sourceNode.ownerGlobal)) return "none"; if (window.gMultiProcessBrowser != sourceNode.ownerGlobal.gMultiProcessBrowser) return "none"; if (window.gFissionBrowser != sourceNode.ownerGlobal.gFissionBrowser) return "none"; return dt.dropEffect == "copy" ? "copy" : "move"; } } if (Services.droppedLinkHandler.canDropLink(event, true)) return "link"; return "none"; }
<========== soll so aussehen am Ende
<============== sieht aktuell leider so aus
----------------------------------------
ich bin ein TAB falsch Design
-----------------------------------------
0% Abstand über dem TAB und 0% Abstand unter dem TAB bitte bitte -
der Abstand der TAB ist nach oben und unten und die Breite kleiner machen
Sollte im Skript machbar sein:
Hier die Werte für deine Wünsche anpassen.
Wow das sieht richtig cool aus vielen DANK !!
Gern geschehen
Wo finde ich die Werte im alten Script damit ich die übernehmen kann sonst muss ich raten
170px lang und 35px hoch gefunden
Tab_Close_Button = 2
blue <= entfernt
red <= entfernt
Jetzt bruahc ich nur noch den Abstand der TAB der soll 0 sein oben und unten 0 un zueinender bitte 5px.mein aktuelles Script von "MultiRowTabLiteforFx.uc.js"
Spoiler anzeigen
// ==UserScript==
// Name MultiRowTabLiteforFx.uc.js
// Namespace Based on Alice0775's zzzz-MultiRowTab_LiteforFx48.uc.js
// @description Mehrzeilige Tableiste - Experimentelle CSS Version
// @include main
// @compatibility Firefox 138+
// @version 2025/04/07 12:00
// ==/UserScript==
"use strict";MultiRowTabLiteforFx();
function MultiRowTabLiteforFx() {
if (!window.gBrowser) { return; }// -- Config --
// Vergleichbarer CSS Code in userChrome.css Datei wird vorrangig behandelt!const // Mehrzeilige Tableiste Ein/Aus Anzahl der Tabzeilen
MultiRowTab_OnOff_and_TabBar_Rows = -1 ,// [-1] = Mehrzeilige Tableiste aktiv unbegrenzte Anzahl von Zeilen.
// 0 = Mehrzeilige Tableiste aus.
// 1 = Mehrzeilige Tableiste aktiv. Standard = 1 Zeile. Bei Berührung
// der Tableiste mit der der Maus, werden die zweite und die folgenden
// Zeilen bis zur angegebenen Anzahl von Zeilen angezeigt.
// 2 = Mehrzeilige Tableiste aktiv. Anzahl der Tabzeilen angeben.
TabBar_Rows_on_MouseOver = 3 ,// Standard = 1 Zeile. Anzahl der Zeilen angeben, die angezeigt werden sollen,
// wenn der Mauszeiger über die Tableiste bewegt wird. Voraussetzung:
// „MultiRowTab_OnOff_and_TabBar_Rows“ auf „1“ setzen.
TabBar_DisplayTime_on_MouseOver = 1 ,// Sie können die Anzeigezeit (Sekunden) festlegen, wann die zweite und die
// folgenden Zeilen beim Mouseover angezeigt werden. Das Display zeigt den
// eingestellten Wert(Sekunden) an und kehrt dann zur ersten Zeile zurück.// Position der Tab-Leiste.
TabBar_Position = 1 ,// [0] = Standard
// 1 = unter der Symbolleiste
// 2 = unter dem Fenster// Positionen der Tab-Leiste und der Lesezeichen-Symbolleiste tauschen.
// sofern die Position der Tab-Leiste unterhalb der Symbolleiste festgelegt ist.
// Voraussetzung: "TabBar_Position" auf "1".
Bookmark_Toolbar_Position = true ,// [true] = Menüleiste, Navigationsleiste, Lesezeichenleiste, Tableiste
// false = Menüleiste, Navigationsleiste, Tableiste, Lesezeichensymbolleiste// Tab-Höhe „UI-Dichte“
UI_Density_Compact = 29 ,// Standard = 29 Pixelbei Kompakt
UI_Density_Normal = 36 ,// Standard = 36 Pixel bei Normal
UI_Density_Touch = 41 ,// Standard = 41 Pixel bei Touch// Tab-Breite
Tab_Min_Width = 35 ,// Standard - Mindestwert = 76px
Tab_Max_Width = 170 ,// Standard - Maxwert = 225px
// Bei gleichen Werten bei Min und Max, wird die Tabbreite fixiert!// „Tab schließen“ Schaltfläche
Tab_Close_Button = 2 ,// [0] = Standard
// 1 = Ausgeblendet
// 2 = Auf allen Tabs anzeigen
// 3 = Nur bei Mausberührung anzeigen
// 4 = Aktive Tabs werden immer angezeigt, inaktive Tabs
// werden beim Mouseover angezeigt. *Standard für vertikalen Tab-Modus.// ProtonUI Erscheinungsbild der Tabs ändern
Proton_Margins = true ,// [true] = Darstellung ProtonUI
// Die Höhe der Tab-Leiste entspricht der Höhe der UI-Dichte plus dem Leerraum darüber
// und darunter.
// false = Darstellung wie bei browser.proton.enabled auf false, was man vor Firefox 90
// noch einstellen konnte.
// Wenn der Leerraum um die Tabs auf 0 und die Höhe auf die UI-Dichte eingestellt
// ist, ist sie 4 Pixel breiter und 8 Pixel niedriger als die Standardeinstellung.
// Ränder auf der linken und rechten Seite der Tabs
Tab_Separators = false ,// [false] = Nicht anzeigen
// true = Anzeigen
// Rahmen CSS wurde extrahiert und angepasst, an Aussehen wie bei browser.proton.enabled
// auf false, was man vor Firefox 90 noch einstellen konnte.
// Voraussetzung: „TabBar_Position“ auf „0“ setzen.
TitleBar_Button_Autohide = false ,// [false] = Aktiviert
// true = Deaktiviert
// Äußeren Rahmen der Titelleistenschaltfläche [-□×] reduzieren und transparent machen.
TitleBar_Button_DisplayTime = 0.6 ,// Dauer der Anzeige in Sekunden, nach der Rückkehr zur Originalgröße und dem Aufheben
// der Transparenz per Mouseover angeben.// Tab-Leiste von Anfang an auf die angegebene Höhe einstellen.
// Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf „2“ oder höher setzen.
Set_the_TabBar_to_the_Specified_Height = false ,// [false] = Die Tab-Leiste wird höher, wenn der nächsten Zeile weitere Tabs hinzugefügt werden.
// true = Verwendung: Die Tab-Leiste wird von Anfang an auf die angegebene Höhe eingestellt// „.tabDropIndicator“, der beim Ziehen und Ablegen eines Tabs angezeigt wird, ersetzen.
// Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf einen anderen Wert als „0“ setzen.
Tab_Drop_Indicator = false ,// [false] = Stecknadel Symbol 📍
// true = Rote Linie (2px × 29px) als Symbol// Position der angepinnten Tabs
// Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf einen Wert ungleich „0“ setzen.
Separate_Tabs_and_PinnedTabs = false ,// [false] = Standard
// true = Angeheftete Tabs von der Tab-Leiste lösen und in die darüber liegende
// Zeile verschieben. Breite der angehefteten Tabs für die Position der
// angehefteten Tabs „true“ anpassen.PinnedTab_Width = false ,// [false] = Kein Standard
// true = Breite angehefteter Tabs anpassen, z. B. „Tab-Breite“.PinnedTab_Min_Width = 76 ,// Standard Mindestbreite = 76 Pixel
PinnedTab_Max_Width = 225 ,// Standard Maximalbreite = 225 Pixel
// Bei gleichen Werten ist die Breite fixiert.// Angeheftete Tab, Schließen Schaltfläche
// Voraussetzung: „Separate_Tabs_and_PinnedTabs“ auf „true“ setzen.
PinnedTab_Close_Button = 0 ,// [0] = Standard
// 1 = auf allen Tabs sichtbar
// 2 = auf Tab bei Mouseover anzeigen
// 3 = Aktiver Tab immer sichtbar, inaktiver Tab bei Mouseover sichtbar
// *Standard für vertikalen Tab-Modus.// Tab-Leisten-Ziehbereich
Left_Drag_Area = 0 ,// Linker Ziehbereich Breite: Standard 40 Pixel
Right_Drag_Area = 0 ,// Rechter Ziehbereich Breite: Standard 40 Pixel
Maximize_Left_Drag_Area = false ,// true = Linken Ziehbereich bei maximiertem Fenster anzeigen. Standard ausgeblendet.
Fullscreen_Drag_Area = false ,// true = Linken und rechten Ziehbereich bei Vollbild anzeigen. Standard ausgeblendet.
// Wenn die Titelleiste angezeigt wird, funktioniert sie nicht als Drag-Bereich, selbst
// wenn „.titlebar-spacer“ angezeigt wird. Daher habe ich dafür gesorgt, dass sie nichts bewirkt.
// -- Config Ende --css = `
#TabsToolbar:not([collapsed="true"]) {
:root[uidensity="compact"] & {
--tab-min-height: ${UI_Density_Compact}px;
}
:root:not([uidensity]) & {
--tab-min-height: ${UI_Density_Normal}px;
}
:root[uidensity="touch"] & {
--tab-min-height: ${UI_Density_Touch}px;
}#tabbrowser-tabs {
min-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px);${MultiRowTab_OnOff_and_TabBar_Rows != 0 ? `
&[overflow] {
padding-inline: 0 !important;
& > #tabbrowser-arrowscrollbox {
& > .tabbrowser-tab[pinned] {
display: flex;
margin-inline-start: 0 !important;
position: static !important;
}
&::part(scrollbox) {
padding-inline: 0;
}
}
& + #new-tab-button {
display: none;
}
}${Tab_Drop_Indicator ? `
& > .tab-drop-indicator {
background: url(
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAdCAIAAAAPVCo9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASSURBVBhXY3growJEQ5+SUQEAOb1EM8kwskcAAAAASUVORK5CYII=
) no-repeat center;
}
` : ``}#tabbrowser-arrowscrollbox {
&::part(scrollbox) {
& > slot {
flex-wrap: wrap;
}${MultiRowTab_OnOff_and_TabBar_Rows != -1 ? `
${MultiRowTab_OnOff_and_TabBar_Rows == 1 ? `
${TabBar_Rows_on_MouseOver == 0TabBar_Rows_on_MouseOver == 1 ? `
max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * 2);
` : `
max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${TabBar_Rows_on_MouseOver});
`}
&:not(:hover) {
max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) !important;
${Proton_Margins ? `scrollbar-width: none;` : ``}
transition: all 0s ease-in-out ${TabBar_DisplayTime_on_MouseOver}s;
}
` : `
${Set_the_TabBar_to_the_Specified_Height ? `
min-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows});
& > slot {
max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px);
}
` : `
max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows});
`}
`}overflow: hidden auto;
& scrollbar {
-moz-window-dragging: no-drag;
}
` : ``}}
&::part(overflow-start-indicator),
&::part(overflow-end-indicator),
&::part(scrollbutton-up),
&::part(scrollbutton-down) {
display: none;
}${Separate_Tabs_and_PinnedTabs ? `
&:has(> .tabbrowser-tab[fadein][pinned]) {
&::part(scrollbox) {
& > slot::after {
display: flow-root list-item;
content: "";
flex-basis: -moz-available;
height: 0;
overflow: hidden;
}
}
}
.tabbrowser-tab[fadein] {
&:not([pinned]) {
#tabbrowser-tabs[haspinnedtabs] & {
&, & + :not(#tabs-newtab-button) {
order: 1;
}
}
}
&[pinned] {
.tab-background:after {
content: "📌";
font-size: 11px;
right: -2px;
position: absolute;
top: -2px;
}${PinnedTab_Width ? `
flex: 100 100;
max-width: ${PinnedTab_Max_Width}px;
min-width: ${PinnedTab_Min_Width}px;
.tab-throbber, .tab-icon-pending, .tab-icon-image, .tab-sharing-icon-overlay, .tab-icon-overlay {
margin-inline-end: 5.5px !important;
}${PinnedTab_Close_Button == 1 ? `
.tab-close-button {
display: flex;
}
` : PinnedTab_Close_Button == 2 ? `
.tab-close-button {
display: none;
}
&:hover .tab-close-button {
display: flex;
}
` : PinnedTab_Close_Button == 3 ? `
&:not([selected]):hover,
&[selected] {
.tab-close-button {
display: flex;
}
}
` : ``}` : ``}
}
}
` : ``}#tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]):not([orient="vertical"]) > & {
& > .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) {
margin-inline-start: 0 !important;
}
}}
` : ``}
}.tabbrowser-tab[fadein]:not([pinned]) {
max-width: ${Tab_Max_Width}px;
min-width: ${Tab_Min_Width}px;${Tab_Close_Button == 1 ? `
.tab-close-button {
display: none;
}
` : Tab_Close_Button == 2 ? `
.tab-close-button {
display: flex;
}
` : Tab_Close_Button == 3 ? `
.tab-close-button {
display: none;
}
&:hover .tab-close-button {
display: flex;
}
` : Tab_Close_Button == 4 ? `
&:not([selected]):hover {
.tab-close-button {
display: flex;
}
}
` : ``}}
${Tab_Separators ? `
.titlebar-spacer[type="pre-tabs"] {
border-inline-end: 1px solid color-mix(in srgb, currentColor 20%, transparent);
}
.tabbrowser-tab {
&::after,
&::before {
border-left: 1px solid color-mix(in srgb, currentColor 50%, transparent);
height: calc(var(--tab-min-height) - 15%);
margin-block: auto;
}
&:hover::after,
&[multiselected]::after,
#tabbrowser-tabs:not([movingtab]) &:has(+ .tabbrowser-tab:hover)::after,
#tabbrowser-tabs:not([movingtab]) &:has(+ [multiselected])::after {
height: 100%;
}
&::after,
#tabbrowser-tabs[movingtab] &[visuallyselected]::before {
display: flex;
content: "";
}
}
` : ``}${Proton_Margins ? `` : `
.tabbrowser-tab,
.toolbarbutton-1 {
padding: 0;
}
.tabbrowser-tab,
#tabs-newtab-button {
height: var(--tab-min-height);
}
.tabbrowser-tab {
.tab-background {
box-shadow: none;
margin-block: 0;
}
.tab-label-container {
height: var(--tab-min-height);
max-height: 24px;
}
.tab-close-button {
height: 20px !important;
padding-block: 3px !important;
}
&[usercontextid] > .tab-stack > .tab-background > .tab-context-line {
margin-block-start: 1px !important;
}
}
`}${TabBar_Position == 0 ? `
.titlebar-buttonbox-container {
height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px);
}${TitleBar_Button_Autohide ? `
& > .titlebar-buttonbox-container {
background-color: color-mix(in srgb, currentColor 20%, transparent);
position: fixed;
right: 0;
&:not(:hover) {
height: 6px;
.titlebar-button {
padding: 0;
}
&,& .titlebar-button {
opacity: 0;
transition: all 0s ease-in-out ${TitleBar_Button_DisplayTime}s;
}
}
}
` : ``}}` : `
${TabBar_Position == 1
TabBar_Position == 2 ? `
& > .titlebar-buttonbox-container {
display: none;
}}
#nav-bar {
&:not(.browser-titlebar) {
:root[customtitlebar] #toolbar-menubar[autohide="true"] ~ &,
:root[inFullscreen] #toolbar-menubar ~ & {
& > .titlebar-buttonbox-container {
display: flex;
}
}
}
.titlebar-button {
padding-block: 0;
}
}
` : ``}body:has(> #navigator-toolbox:not([tabs-hidden])) {
${TabBar_Position == 1 ? `
script, toolbar:not(#TabsToolbar ${Bookmark_Toolbar_Position ? `` : `, #PersonalToolbar`}) {
order: -1;
}
` : TabBar_Position == 2 ? `
& > #fullscr-toggler[hidden] + tabbox,
:root[inFullscreen] & > tabbox:hover {
border-top: 0.01px solid var(--chrome-content-separator-color);
}
& > tabbox > #navigator-toolbox {
border-block: none !important;
}
:root[inFullscreen] & {
& > #navigator-toolbox {
transition: none;
&:has(~ tabbox:hover) {
margin-top: 0 !important;
}
&:hover ~ tabbox > #navigator-toolbox {
display: flex;
}
}
& > tabbox:not(:hover) {
border-top: 0.01px solid transparent;
& > #navigator-toolbox {
display: none;
}
}
}
` : ``}
}`}
toolbar[id$="bar"].browser-titlebar {
.titlebar-spacer {
&[type="pre-tabs"] {
width: ${Left_Drag_Area}px;
}
&[type="post-tabs"] {
width: ${Right_Drag_Area}px;
}
${Maximize_Left_Drag_Area ? `
:root[customtitlebar]:not([sizemode="normal"], [inFullscreen]) &[type="pre-tabs"] {
display: flex;
}
` : ``}
${Fullscreen_Drag_Area ? `
:root[customtitlebar][inFullscreen] & {
display: flex;
}
` : ``}
}
#navigator-toolbox[tabs-hidden] & {
#new-tab-button {
display: none;
}
}
}`,
sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService),
uri = Services.io.newURI("data:text/css;charset=UTF=8," + encodeURIComponent(css));
["0", "2", "dragend", "SSTabRestored", "TabAttrModified"].find(eventType => {
if(!sss.sheetRegistered(uri, eventType)) sss.loadAndRegisterSheet(uri, eventType);
if (MultiRowTab_OnOff_and_TabBar_Rows > 0) {
gBrowser.tabContainer.addEventListener(eventType, (e) => {
e.target.scrollIntoView({ behavior: "instant", block: "nearest" })
})
}
})if (TabBar_Position == 2) {
document.body.appendChild(
document.createXULElement("tabbox")
).appendChild(
document.importNode(document.getElementById("navigator-toolbox"))
).appendChild(
document.adoptNode(document.getElementById("TabsToolbar"))
)
}gBrowser.tabContainer._getDropIndex = function(event) {
let tabToDropAt = getTabFromEventTarget(event, false);
const tabPos = gBrowser.tabContainer.getIndexOfItem(tabToDropAt);if (window.getComputedStyle(this).direction == "ltr") {
let rect = tabToDropAt.getBoundingClientRect();
if (event.clientX < rect.x + rect.width / 2)
return tabPos;
else
return tabPos + 1;
} else {
let rect = tabToDropAt.getBoundingClientRect();
if (event.clientX > rect.x + rect.width / 2)
return tabPos;
else
return tabPos + 1;
}
};// We set this to check if the listeners were added before
let listenersActive = false;// This sets when to apply the fix (by default a new row starts after the 23th open tab, unless you changed the min-size of tabs)
gBrowser.tabContainer.addEventListener("dragstart", () => {
// Multiple tab select fix
gBrowser.visibleTabs.forEach(t => t.style.transform = "");// Event handling
if (!listenersActive) {
gBrowser.tabContainer.getDropEffectForTabDrag = function(){};
gBrowser.tabContainer._getDropEffectForTabDrag = function(){};
gBrowser.tabContainer.on_dragover = (dragoverEvent) => performTabDragOver(dragoverEvent);
gBrowser.tabContainer._onDragOver = (dragoverEvent) => performTabDragOver(dragoverEvent);
gBrowser.tabContainer.ondrop = (dropEvent) => performTabDropEvent(dropEvent);
listenersActive = true;
}
});
}var lastKnownIndex = null;
var lastGroupStart = null;
var lastGroupEnd = null;/**
* Gets the tab from the event target.
* Param {*} event The event.
* @returns The tab if it was part of the target or its parents, otherwise null
*/
function getTabFromEventTarget(event, { ignoreTabSides = false } = {}) {
let { target } = event;
if (target.nodeType != Node.ELEMENT_NODE) {
target = target.parentElement;
}
let tab = target?.closest("tab")target?.closest("tab-group");
const selectedTab = gBrowser.selectedTab;
if (tab && ignoreTabSides) {
let { width, height } = tab.getBoundingClientRect();
if (
event.screenX < tab.screenX + width * 0.25
event.screenX > tab.screenX + width * 0.75
((event.screenY < tab.screenY + height * 0.25
event.screenY > tab.screenY + height * 0.75) &&
gBrowser.tabContainer.verticalMode)
) {
return selectedTab;
}
}
if (!tab) {
return selectedTab;
}
return tab;
}/**
* Performs the tab drag over event.
* Param {*} event The drag over event.
*/
function performTabDragOver(event) {
event.preventDefault();
event.stopPropagation();let ind = gBrowser.tabContainer._tabDropIndicator;
let effects = orig_getDropEffectForTabDrag(event);
let tab;
if (effects == "link") {
tab = getTabFromEventTarget(event, true);
if (tab) {
if (!gBrowser.tabContainer._dragTime)
gBrowser.tabContainer._dragTime = Date.now();
if (!tab.hasAttribute("pendingicon") && // annoying fix
Date.now() >= gBrowser.tabContainer._dragTime + gBrowser.tabContainer._dragOverDelay)
gBrowser.tabContainer.selectedItem = tab;
ind.hidden = true;
return;
}
}if (!tab) {
tab = getTabFromEventTarget(event, false);
}
let newIndex = gBrowser.tabContainer._getDropIndex(event);
if (newIndex == null)
return;// Update the last known index and group position
lastKnownIndex = newIndex;
if (tab.nodeName == "tab-group" && !lastGroupStart) {
lastGroupStart = tab.querySelector("tab:first-of-type")._tPos;
lastGroupEnd = tab.querySelector("tab:last-of-type")._tPos;
}let tabs = document.querySelectorAll("tab");
let ltr = (window.getComputedStyle(gBrowser.tabContainer).direction == "ltr");
let rect = gBrowser.tabContainer.arrowScrollbox.getBoundingClientRect();
let newMarginX, newMarginY;
if (newIndex == tabs.length) {
let tabRect = tabs[newIndex - 1].getBoundingClientRect();
if (ltr)
newMarginX = tabRect.right - rect.left;
else
newMarginX = rect.right - tabRect.left;
newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fixif (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+
newMarginY += rect.height / 2 - tabRect.height / 2;
} else if (newIndex != nullnewIndex != 0) {
let tabRect = tabs[newIndex].getBoundingClientRect();
if (ltr)
newMarginX = tabRect.left - rect.left;
else
newMarginX = rect.right - tabRect.right;
newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fixif (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+
newMarginY += rect.height / 2 - tabRect.height / 2;
}newMarginX += ind.clientWidth / 2;
if (!ltr)
newMarginX *= -1;ind.hidden = false;
ind.style.transform = "translate(" + Math.round(newMarginX) + "px," + Math.round(newMarginY) + "px)"; // multirow fix
ind.style.marginInlineStart = (-ind.clientWidth) + "px";
}/**
* Performs the tab drop event.
* Param {*} event The drop event.
*/
function performTabDropEvent(event) {
let newIndex;
let dt = event.dataTransfer;
let dropEffect = dt.dropEffect;
let draggedTab;
if (dt.mozTypesAt(0)[0] == TAB_DROP_TYPE) {
draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
if (!draggedTab) {
return;
}
}if (draggedTab && dropEffect != "copy" && draggedTab.container == gBrowser.tabContainer) {
newIndex = gBrowser.tabContainer._getDropIndex(event);/* fix for moving multiple selected tabs and tab groups */
let selectedTabs = gBrowser.selectedTabs;
if (lastGroupStart) {
selectedTabs = [draggedTab?.closest("tab-group")];
if (lastKnownIndex >= lastGroupStart && lastKnownIndex <= lastGroupEnd) {
newIndex = lastGroupStart;
} else if (lastKnownIndex == lastGroupEnd + 1) {
newIndex = lastGroupStart + 1;
}
}if (selectedTabs[selectedTabs.length - 1] == null){
newIndex = lastKnownIndex;
} else if (newIndex > selectedTabs[selectedTabs.length - 1]._tPos + 1)
newIndex--;
else if (newIndex >= selectedTabs[0]._tPos)
newIndex = -1;if (newIndex == -1) {
newIndex = lastKnownIndex;
}
const tabToMoveAt = gBrowser.tabContainer.getItemAtIndex(newIndex);
console.log("tabToMoveAt", tabToMoveAt);
console.log("newIndex", newIndex);
selectedTabs.forEach(t => gBrowser.moveTabBefore(t, tabToMoveAt));// Restart global vars
lastKnownIndex = null;
lastGroupStart = null;
lastGroupEnd = null;
}
}// copy of the original and overrided _getDropEffectForTabDrag method
function orig_getDropEffectForTabDrag(event) {
let dt = event.dataTransfer;let isMovingTabs = dt.mozItemCount > 0;
for (let i = 0; i < dt.mozItemCount; i++) {
// tabs are always added as the first type
let types = dt.mozTypesAt(0);
if (types[0] != TAB_DROP_TYPE) {
isMovingTabs = false;
break;
}
}if (isMovingTabs) {
let sourceNode = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
if (XULElement.isInstance(sourceNode) &&
sourceNode.localName == "tab" &&
sourceNode.ownerGlobal.isChromeWindow &&
sourceNode.ownerDocument.documentElement.getAttribute("windowtype") ==
"navigator:browser" &&
sourceNode.ownerGlobal.gBrowser.tabContainer == sourceNode.container) {
// Do not allow transfering a private tab to a non-private window
// and vice versa.
if (PrivateBrowsingUtils.isWindowPrivate(window) !=
PrivateBrowsingUtils.isWindowPrivate(sourceNode.ownerGlobal))
return "none";if (window.gMultiProcessBrowser !=
sourceNode.ownerGlobal.gMultiProcessBrowser)
return "none";if (window.gFissionBrowser != sourceNode.ownerGlobal.gFissionBrowser)
return "none";return dt.dropEffect == "copy" ? "copy" : "move";
}
}if (Services.droppedLinkHandler.canDropLink(event, true))
return "link";return "none";
} -
Wo finde ich denn jetzt die Einstellungen für
Auf die Schnelle eine kompl. neue userChrome.css Datei:
CSS
Alles anzeigen/*----------------------------------------*/ /* Megabar (Url-Bar) die Ecken abgerundet */ /*----------------------------------------*/ /* Adressleiste / Erhöhung wird verhindert */ #urlbar-background { background: #f8f8ff ! important; /* Hintergrund */ border: 1px solid #5badff !important; border-radius: 50px !important; } #urlbar[breakout][breakout-extend] { top: calc((var(--urlbar-toolbar-height) - var(--urlbar-height)) / 2) !important; left: 0 !important; width: 100% !important; } #urlbar[breakout][breakout-extend] > #urlbar-input-container { height: var(--urlbar-height) !important; padding-block: 0 !important; padding-inline: 0 !important; } #urlbar[breakout][breakout-extend][breakout-extend-animate] > #urlbar-background { animation-name: none !important; } #urlbar[breakout][breakout-extend] > #urlbar-background { box-shadow: none !important; } /* Suchleiste Ecken abrunden */ #searchbar { background: #f8f8ff ! important; /* Hintergrund */ border-radius: 50px !important; border: 1px solid #5badff !important; } /* -------------------------------------*/ /* Kontext-Menü / Einträge ausgeblendet */ /* -------------------------------------*/ #context-viewinfo, #textnotes_gaborjuhaszprojects_com-menuitem-_textnotes, #_lympha-menuitem-_lympha-ctx-btn { display: none !important; } #context_pinTab, #context_moveTabOptions, #context_reopenInContainer, #context_sendTabToDevice, #context-sendlinktodevice, #context-inspect-a11y, #context-openlink, #context-openlinkprivate, #context-bookmarklink, #context-inspect, #context-openlinkinusercontext-menu, #context-viewpartialsource-selection, #context-sep-sendlinktodevice, #inspect-separator, #context-sendpagetodevice, #context-viewbgimage, #context-selectall, #context-viewsource, #context-sep-sendpagetodevice, #context-sep-viewbgimage, #contentAreaContextMenu > menuseparator:nth-child(93), #context-sendimage, #context-setDesktopBackground { display: none !important; } #context_duplicateTab { order: -1 !important; } #context-openlinkintab { order: -1 !important; } #context-copylink { order: -1 !important; } #copyplaintext_eros_man-menuitem-_copyPlainText { order: -1 !important; } #context-copy { order: -1 !important; } #_5dd73bb9-e728-4d1e-990b-c77d8e03670f_-menuitem-_search_engine_menu { order: 20 !important; } #context-print-selection, #textnotes_gaborjuhaszprojects_com-menuitem-_textnotes-selection { display: none !important; } menuitem[label="Ein Schlüsselwort für diese Suche hinzufügen…"] { display: none !important; } /*-------------------------------------------------------*/ /* Trennstrich + Hintergrund für TAB geschlossen Button */ /*-----------------------------------------------------*/ #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action .toolbarbutton-badge-stack { background: #FF8F00 !important; border-radius: 35px !important; } #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action:hover .toolbarbutton-badge-stack { background-color: #FF0039 !important; border-radius: 35px !important; } #_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action { margin-left: 12px !important; margin-right: 12px !important; } /*--------------------------------------------*/ /* Ordnersymbole für Symbolleiste und Sidebar */ /*--------------------------------------------*/ @-moz-document url-prefix(chrome://browser/content/browser.xhtml), url("chrome://browser/content/places/places.xhtml") { .bookmark-item[container="true"]{ list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important; } } @-moz-document url("chrome://browser/content/places/bookmarksSidebar.xhtml") { treechildren::-moz-tree-image(container) { list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important; } } /**********************************************/ /* Anpassungen für MultiRowTabs.uc.js (START) */ /**********************************************/ .tabbrowser-tab[pinned] { flex-grow: 0 !important; min-width: 120px !important; } .tabbrowser-tab .tab-label { text-shadow: 1px 1px 0px #000000 !important; } .tab-background[selected], .tabbrowser-tab:hover > .tab-stack > .tab-background:not([selected]), .tabbrowser-tab:hover:not([selected]) :is(.tab-label,.tab-icon-stack), .tabbrowser-tab:hover > .tab-stack > .tab-background[multiselected]:not([selected]), .tab-background:not([selected]), .tab-background[multiselected]:not([selected]) { filter: initial !important; } .tab-sharing-icon-overlay, .tab-icon-overlay:not([pinned]), .tab-icon-overlay[soundplaying] { transform: scale(1.0) !important; } #TabsToolbar #tabs-newtab-button > image { min-height: initial !important; max-height: initial !important; min-width: initial !important; max-width: initial !important; } #TabsToolbar #tabs-newtab-button > image { padding: 7px !important; } /*Aktiver Tab Hintergrund orange*/ tab.tabbrowser-tab[selected] stack.tab-stack vbox.tab-background { background: rgb(240,152,0) !important; box-shadow: none !important; border-radius: 30px !important; } /*Aktiver Tab hover Hintergrund rot*/ tab.tabbrowser-tab[selected]:hover stack.tab-stack vbox.tab-background { background-color: red !important; } /*Aktiver Tab hover Schrift weiß*/ tab.tabbrowser-tab .tab-content[selected]:hover { color:white !important; } /*Inaktiver Tab Hintergrund beige*/ tab.tabbrowser-tab:not([selected]) stack.tab-stack vbox.tab-background { background: rgb(195,157,116) !important; box-shadow: none !important; border-radius: 30px !important; } /*Inaktiver Tab hover Hintergrund blau*/ tab.tabbrowser-tab:not([selected]):hover stack.tab-stack vbox.tab-background { background: blue !important; } /*Inaktiver Tab hover Schrift weiß*/ tab.tabbrowser-tab .tab-content:not([selected]):hover { color: white !important; } /*Neuer Tabbutton weiss*/ #TabsToolbar #tabs-newtab-button { fill: white !important; } #TabsToolbar { background: rgb(62,75,84)!important; } /*********************************************/ /* Anpassungen für MultiRowTabs.uc.js (ENDE) */ /*********************************************/
Ab Zeile 139 ist nur für die Tabs.
Wow das sieht richtig cool aus vielen DANK !!
Jetzt muss ich irgendwie noch finden, wo der Abstand der TAB ist nach oben und unten und die Breite kleiner machen 😅 Hast du da einen TIpp wo ich das finden kann udn der Hintergrudn auch braun warte ich zeige ...
kein Hoover Effekt da ist was blau irgendwie wenn ich auf einen TAB zeige udn mal rot.<===== das ist mein Originla von FF137
hellbruan = C39D74
und der Hintergrund ist auch das gleiche Holzdesign -
Ich möchte CODe hier posten wie geht das möchte nicht immer alles umwandeln udn kopieren udn so das ist umständlich Ich möchte gerne den CODE reinstellen wie ander eauch hier im Forum
userChrome.css
Spoiler anzeigen
/*----------------------------------------*/
/* Megabar (Url-Bar) die Ecken abgerundet */
/*----------------------------------------*/
/* Adressleiste / Erhöhung wird verhindert */
#urlbar-background {
background: #f8f8ff ! important; /* Hintergrund */
border: 1px solid #5badff !important;
border-radius: 50px !important; }
#urlbar[breakout][breakout-extend] {
top: calc((var(--urlbar-toolbar-height) - var(--urlbar-height)) / 2) !important;
left: 0 !important;
width: 100% !important; }
#urlbar[breakout][breakout-extend] > #urlbar-input-container {
height: var(--urlbar-height) !important;
padding-block: 0 !important;
padding-inline: 0 !important; }
#urlbar[breakout][breakout-extend][breakout-extend-animate] > #urlbar-background {
animation-name: none !important; }
#urlbar[breakout][breakout-extend] > #urlbar-background {
box-shadow: none !important;
}
/* Suchleiste Ecken abrunden */
#searchbar {
background: #f8f8ff ! important; /* Hintergrund */
border-radius: 50px !important;
border: 1px solid #5badff !important;
}
/* -------------------------------------*/
/* Kontext-Menü / Einträge ausgeblendet */
/* -------------------------------------*/
#context-viewinfo,
#textnotes_gaborjuhaszprojects_com-menuitem-_textnotes,
#_lympha-menuitem-_lympha-ctx-btn {
display: none !important;
}
#context_pinTab,
#context_moveTabOptions,
#context_reopenInContainer,
#context_sendTabToDevice,
#context-sendlinktodevice,
#context-inspect-a11y,
#context-openlink,
#context-openlinkprivate,
#context-bookmarklink,
#context-inspect,
#context-openlinkinusercontext-menu,
#context-viewpartialsource-selection,
#context-sep-sendlinktodevice,
#inspect-separator,
#context-sendpagetodevice,
#context-viewbgimage,
#context-selectall,
#context-viewsource,
#context-sep-sendpagetodevice,
#context-sep-viewbgimage,
#contentAreaContextMenu > menuseparator:nth-child(93),
#context-sendimage,
#context-setDesktopBackground {
display: none !important;
}
#context_duplicateTab {
order: -1 !important;
}
#context-openlinkintab {
order: -1 !important;
}
#context-copylink {
order: -1 !important;
}
#copyplaintext_eros_man-menuitem-_copyPlainText {
order: -1 !important;
}
#context-copy {
order: -1 !important;
}
#_5dd73bb9-e728-4d1e-990b-c77d8e03670f_-menuitem-_search_engine_menu {
order: 20 !important;
}
#context-print-selection,
#textnotes_gaborjuhaszprojects_com-menuitem-_textnotes-selection {
display: none !important;
}
menuitem[label="Ein Schlüsselwort für diese Suche hinzufügen…"] {
display: none !important;
}
/*-------------------------------------------------------*/
/* Trennstrich + Hintergrund für TAB geschlossen Button */
/*-----------------------------------------------------*/
#_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action .toolbarbutton-badge-stack {
background: #FF8F00 !important;
border-radius: 35px !important;
}
#_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action:hover .toolbarbutton-badge-stack {
background-color: #FF0039 !important;
border-radius: 35px !important;
}
#_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action {
margin-left: 12px !important;
margin-right: 12px !important;
}
/*--------------------------------------------*/
/* Ordnersymbole für Symbolleiste und Sidebar */
/*--------------------------------------------*/
@-moz-document url-prefix(chrome://browser/content/browser.xhtml),
url("chrome://browser/content/places/places.xhtml") {
.bookmark-item[container="true"]{
list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important;
}
}
@-moz-document url("chrome://browser/content/places/bookmarksSidebar.xhtml") {
treechildren::-moz-tree-image(container) {
list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAd5JREFUeNqMU79rFUEQ/vbuodFEEkzAImBpkUabFP4ldpaJhZXYm/RiZWsv/hkWFglBUyTIgyAIIfgIRjHv3r39MePM7N3LcbxAFvZ2b2bn22/mm3XMjF+HL3YW7q28YSIw8mBKoBihhhgCsoORot9d3/ywg3YowMXwNde/PzGnk2vn6PitrT+/PGeNaecg4+qNY3D43vy16A5wDDd4Aqg/ngmrjl/GoN0U5V1QquHQG3q+TPDVhVwyBffcmQGJmSVfyZk7R3SngI4JKfwDJ2+05zIg8gbiereTZRHhJ5KCMOwDFLjhoBTn2g0ghagfKeIYJDPFyibJVBtTREwq60SpYvh5++PpwatHsxSm9QRLSQpEVSd7/TYJUb49TX7gztpjjEffnoVw66+Ytovs14Yp7HaKmUXeX9rKUoMoLNW3srqI5fWn8JejrVkK0QcrkFLOgS39yoKUQe292WJ1guUHG8K2o8K00oO1BTvXoW4yasclUTgZYJY9aFNfAThX5CZRmczAV52oAPoupHhWRIUUAOoyUIlYVaAa/VbLbyiZUiyFbjQFNwiZQSGl4IDy9sO5Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVORK5CYII=") !important;
}
}/**********************************************/
/* Anpassungen für MultiRowTabs.uc.js (START) */
/**********************************************/.tabbrowser-tab[pinned] {
flex-grow: 0 !important;
min-width: 120px !important;
}
.tabbrowser-tab .tab-label {
text-shadow: 1px 1px 0px #000000 !important;
}.tab-background[selected],
.tabbrowser-tab:hover > .tab-stack > .tab-background:not([selected]),
.tabbrowser-tab:hover:not([selected]) :is(.tab-label,.tab-icon-stack),
.tabbrowser-tab:hover > .tab-stack > .tab-background[multiselected]:not([selected]),
.tab-background:not([selected]),
.tab-background[multiselected]:not([selected])
{
filter: initial !important;
}.tab-sharing-icon-overlay, .tab-icon-overlay:not([pinned]), .tab-icon-overlay[soundplaying] {
transform: scale(1.0) !important;
}
#TabsToolbar #tabs-newtab-button > image {
min-height: initial !important;
max-height: initial !important;
min-width: initial !important;
max-width: initial !important;
}
#TabsToolbar #tabs-newtab-button > image {
padding: 7px !important;
}/*********************************************/
/* Anpassungen für MultiRowTabs.uc.js (ENDE) */
/*********************************************/MultiRowTab_Firefox107.js
Spoiler anzeigen
// ==UserScript==
// Name MultiRowTabLiteforFx.uc.js
// Namespace Based on Alice0775's zzzz-MultiRowTab_LiteforFx48.uc.js
// @description Multi-Row tabs experimental version with embedded CSS, Lite version
// @include main
// @compatibility Firefox138+
// @version 2025/04/07 12:00
// ==/UserScript==
"use strict";
MultiRowTabLiteforFx();
function MultiRowTabLiteforFx() {
if (!window.gBrowser) { return; }
// -- Config --
// If you write similar CSS, “userChrome.css” will take priority
const // Multi-Row tab, On/Off Number of tabs in tab bar
MultiRowTab_OnOff_and_TabBar_Rows = -1 ,// [-1] = Multi-Row tab, On Unlimited number of columns
// 0 = Multi-Row tab Off
// 1 = Multi-Row tab On Normally, one tier is used and the second and subsequent tiers are displayed up to the specified number of tiers when the tab bar is moused over. *Specify the number of rows with “TabBar_Rows_on_MouseOver”.
// 2~ = Multi-Row tab On Specify the number of columns
TabBar_Rows_on_MouseOver = 3 ,// Specify the number of tiers you want to display when you mouse over the tab bar, usually one tier. Prerequisite: “MultiRowTab_OnOff_and_TabBar_Rows” is set to “1”.
TabBar_DisplayTime_on_MouseOver = 1 ,// You can set the display time (in seconds) when the second and subsequent rows are displayed on mouse-over. The display will return to the first Row after displaying the set number of seconds.
// Tab bar position
TabBar_Position = 1 ,// [0] = Above Toolbar Default
// 1 = Under the toolbar
// 2 = Under Site Content
// For people who want to swap the position of the tab bar and bookmark toolbar after setting the tab bar position below the toolbar.
// Prerequisite: “TabBar_Position” is set to “1”.
Bookmark_Toolbar_Position = true ,// [true] = Menu bar, navigation bar, bookmark bar, tab bar
// false = Menu bar, navigation bar, tab bar, bookmark bar
// Tab Height UI Density
UI_Density_Compact = 29 ,// Default 29px, Compact
UI_Density_Normal = 36 ,// Default 36px, Normal (set here your own Tab Height)
UI_Density_Touch = 41 ,// Default 41px, Touch
// Tab Width
Tab_Min_Width = 212 ,// Default 76px, Min.
Tab_Max_Width = 212 ,// Default 225px, Max.
// If both values are the same, the width will be fixed.
// Close Tab button
Tab_Close_Button = 0 ,// [0] = Default
// 1 = Hidden
// 2 = Show in all tabs
// 3 = Display tabs with mouse over
// 4 = Active tabs are always visible, inactive tabs are shown on mouse-over *Default for vertical tab mode.
// Tab Appearance ProtonUI
Proton_Margins = true ,// [true] = ProtonUI Default
// false = Make it look like it did when “browser.proton.enabled” was set to “false” in the Firefox 90 or earlier settings.
// The space around the tabs is set to 0 and the UI density height is set to 0, so the tabs are 4px wider horizontally and 8px lower in height than the default.
// Borders next to tabs
Tab_Separators = false ,// [false] = Do not show
// true = Show
// The CSS of the border that could be displayed when “browser.proton.enabled” was set to “false” in Firefox 90 or earlier is extracted and adjusted.
// Hide the title bar button [-□×] and use the wider width of the tab bar for it.
// Prerequisite: “TabBar_Position” is set to “0”.
TitleBar_Button_Autohide = false ,// [false] = Not used
// true = Use Normally, the outer frame of the title bar button [-□×] is made small and transparent; if you want to display it, return the trigger area (36px x 6px) in the upper right corner of the tab bar to its original size with a mouseover to remove transparency.
TitleBar_Button_DisplayTime = 0.6 ,// You can set the display time (in seconds) after the transparency is released by returning it to its original size on mouse over. The image will be displayed for the set number of seconds before it is hidden.
// Set the tab bar to the height of the specified number of columns from the beginning.
// Prerequisite: “MultiRowTab_OnOff_and_TabBar_Rows” is set to “2” or higher.
Set_the_TabBar_to_the_Specified_Height = false ,// [false] = Not used
// true = Use The tab bar is set to the height of the specified number of columns from the beginning, and tabs are lined up as usual, starting from the upper left corner.
// Replacement of “.tabDropIndicator” that displays tabs during drag & drop movement
// Prerequisite: Set “MultiRowTab_OnOff_and_TabBar_Rows” to something other than “0”.
Tab_Drop_Indicator = false ,// [false] = No Pin icon Default
// true = Red line icon(2px×29px)
// Pinning tab position
// Prerequisite: Set “MultiRowTab_OnOff_and_TabBar_Rows” to something other than “0”.
Separate_Tabs_and_PinnedTabs = false ,// [false] = Default
// true = Move pinned tabs to a line that can be separated from and above the row of tabs.
// Adjust width of pinned tabs
// Prerequisite: Set “Separate_Tabs_and_PinnedTabs” to “true”.
PinnedTab_Width = false ,// [false] = Not default
// true = The width of the pinned tabs can be adjusted to match the width of the tabs.
PinnedTab_Min_Width = 76 ,// Default 76px Min.
PinnedTab_Max_Width = 225 ,// Default 225px Max.
// If both values are the same, the width will be fixed.
// Pinned tabs Close tab button
// Prerequisite: Set “Separate_Tabs_and_PinnedTabs” to “true”.
PinnedTab_Close_Button = 0 ,// [0] = Default
// 1 = Show in all tabs
// 2 = Show tabs on mouse over
// 3 = Active tabs are always visible, inactive tabs are shown on mouse-over *Vertical tab mode is the default.
// Drag area on tab bar
Left_Drag_Area = 0 ,// Default 40px left drag area
Right_Drag_Area = 0 ,// Default 40px right drag area
Maximize_Left_Drag_Area = false ,// [false] = Default
// true = When the window is maximized, the left drag area, which is hidden, can be displayed.
Fullscreen_Drag_Area = false ,// [false] = Default
// true = The left and right drag areas that are hidden when in full-screen mode can be displayed.
// When the title bar is displayed, “.titlebar-spacer” does not function as a drag area.
// -- Config End --css = `
#TabsToolbar:not([collapsed="true"]) {
:root[uidensity="compact"] & {
--tab-min-height: ${UI_Density_Compact}px;
}
:root:not([uidensity]) & {
--tab-min-height: ${UI_Density_Normal}px;
}
:root[uidensity="touch"] & {
--tab-min-height: ${UI_Density_Touch}px;
}#tabbrowser-tabs {
min-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px);${MultiRowTab_OnOff_and_TabBar_Rows != 0 ? `
&[overflow] {
padding-inline: 0 !important;
& > #tabbrowser-arrowscrollbox {
& > .tabbrowser-tab[pinned] {
display: flex;
margin-inline-start: 0 !important;
position: static !important;
}
&::part(scrollbox) {
padding-inline: 0;
}
}
& + #new-tab-button {
display: none;
}
}${Tab_Drop_Indicator ? `
& > .tab-drop-indicator {
background: url(
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAdCAIAAAAPVCo9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASSURBVBhXY3growJEQ5+SUQEAOb1EM8kwskcAAAAASUVORK5CYII=
) no-repeat center;
}
` : ``}#tabbrowser-arrowscrollbox {
&::part(scrollbox) {
& > slot {
flex-wrap: wrap;
}${MultiRowTab_OnOff_and_TabBar_Rows != -1 ? `
${MultiRowTab_OnOff_and_TabBar_Rows == 1 ? `
${TabBar_Rows_on_MouseOver == 0TabBar_Rows_on_MouseOver == 1 ? `
max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * 2);
` : `
max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${TabBar_Rows_on_MouseOver});
`}
&:not(:hover) {
max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) !important;
${Proton_Margins ? `scrollbar-width: none;` : ``}
transition: all 0s ease-in-out ${TabBar_DisplayTime_on_MouseOver}s;
}
` : `
${Set_the_TabBar_to_the_Specified_Height ? `
min-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows});
& > slot {
max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px);
}
` : `
max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows});
`}
`}overflow: hidden auto;
& scrollbar {
-moz-window-dragging: no-drag;
}
` : ``}}
&::part(overflow-start-indicator),
&::part(overflow-end-indicator),
&::part(scrollbutton-up),
&::part(scrollbutton-down) {
display: none;
}${Separate_Tabs_and_PinnedTabs ? `
&:has(> .tabbrowser-tab[fadein][pinned]) {
&::part(scrollbox) {
& > slot::after {
display: flow-root list-item;
content: "";
flex-basis: -moz-available;
height: 0;
overflow: hidden;
}
}
}
.tabbrowser-tab[fadein] {
&:not([pinned]) {
#tabbrowser-tabs[haspinnedtabs] & {
&, & + :not(#tabs-newtab-button) {
order: 1;
}
}
}
&[pinned] {
.tab-background:after {
content: "📌";
font-size: 11px;
right: -2px;
position: absolute;
top: -2px;
}${PinnedTab_Width ? `
flex: 100 100;
max-width: ${PinnedTab_Max_Width}px;
min-width: ${PinnedTab_Min_Width}px;
.tab-throbber, .tab-icon-pending, .tab-icon-image, .tab-sharing-icon-overlay, .tab-icon-overlay {
margin-inline-end: 5.5px !important;
}${PinnedTab_Close_Button == 1 ? `
.tab-close-button {
display: flex;
}
` : PinnedTab_Close_Button == 2 ? `
.tab-close-button {
display: none;
}
&:hover .tab-close-button {
display: flex;
}
` : PinnedTab_Close_Button == 3 ? `
&:not([selected]):hover,
&[selected] {
.tab-close-button {
display: flex;
}
}
` : ``}` : ``}
}
}
` : ``}#tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]):not([orient="vertical"]) > & {
& > .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) {
margin-inline-start: 0 !important;
}
}}
` : ``}
}.tabbrowser-tab[fadein]:not([pinned]) {
max-width: ${Tab_Max_Width}px;
min-width: ${Tab_Min_Width}px;${Tab_Close_Button == 1 ? `
.tab-close-button {
display: none;
}
` : Tab_Close_Button == 2 ? `
.tab-close-button {
display: flex;
}
` : Tab_Close_Button == 3 ? `
.tab-close-button {
display: none;
}
&:hover .tab-close-button {
display: flex;
}
` : Tab_Close_Button == 4 ? `
&:not([selected]):hover {
.tab-close-button {
display: flex;
}
}
` : ``}}
${Tab_Separators ? `
.titlebar-spacer[type="pre-tabs"] {
border-inline-end: 1px solid color-mix(in srgb, currentColor 20%, transparent);
}
.tabbrowser-tab {
&::after,
&::before {
border-left: 1px solid color-mix(in srgb, currentColor 50%, transparent);
height: calc(var(--tab-min-height) - 15%);
margin-block: auto;
}
&:hover::after,
&[multiselected]::after,
#tabbrowser-tabs:not([movingtab]) &:has(+ .tabbrowser-tab:hover)::after,
#tabbrowser-tabs:not([movingtab]) &:has(+ [multiselected])::after {
height: 100%;
}
&::after,
#tabbrowser-tabs[movingtab] &[visuallyselected]::before {
display: flex;
content: "";
}
}
` : ``}${Proton_Margins ? `` : `
.tabbrowser-tab,
.toolbarbutton-1 {
padding: 0;
}
.tabbrowser-tab,
#tabs-newtab-button {
height: var(--tab-min-height);
}
.tabbrowser-tab {
.tab-background {
box-shadow: none;
margin-block: 0;
}
.tab-label-container {
height: var(--tab-min-height);
max-height: 24px;
}
.tab-close-button {
height: 20px !important;
padding-block: 3px !important;
}
&[usercontextid] > .tab-stack > .tab-background > .tab-context-line {
margin-block-start: 1px !important;
}
}
`}${TabBar_Position == 0 ? `
.titlebar-buttonbox-container {
height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px);
}${TitleBar_Button_Autohide ? `
& > .titlebar-buttonbox-container {
background-color: color-mix(in srgb, currentColor 20%, transparent);
position: fixed;
right: 0;
&:not(:hover) {
height: 6px;
.titlebar-button {
padding: 0;
}
&,& .titlebar-button {
opacity: 0;
transition: all 0s ease-in-out ${TitleBar_Button_DisplayTime}s;
}
}
}
` : ``}}` : `
${TabBar_Position == 1
TabBar_Position == 2 ? `
& > .titlebar-buttonbox-container {
display: none;
}}
#nav-bar {
&:not(.browser-titlebar) {
:root[customtitlebar] #toolbar-menubar[autohide="true"] ~ &,
:root[inFullscreen] #toolbar-menubar ~ & {
& > .titlebar-buttonbox-container {
display: flex;
}
}
}
.titlebar-button {
padding-block: 0;
}
}
` : ``}body:has(> #navigator-toolbox:not([tabs-hidden])) {
${TabBar_Position == 1 ? `
script, toolbar:not(#TabsToolbar ${Bookmark_Toolbar_Position ? `` : `, #PersonalToolbar`}) {
order: -1;
}
` : TabBar_Position == 2 ? `
& > #fullscr-toggler[hidden] + tabbox,
:root[inFullscreen] & > tabbox:hover {
border-top: 0.01px solid var(--chrome-content-separator-color);
}
& > tabbox > #navigator-toolbox {
border-block: none !important;
}
:root[inFullscreen] & {
& > #navigator-toolbox {
transition: none;
&:has(~ tabbox:hover) {
margin-top: 0 !important;
}
&:hover ~ tabbox > #navigator-toolbox {
display: flex;
}
}
& > tabbox:not(:hover) {
border-top: 0.01px solid transparent;
& > #navigator-toolbox {
display: none;
}
}
}
` : ``}
}`}
toolbar[id$="bar"].browser-titlebar {
.titlebar-spacer {
&[type="pre-tabs"] {
width: ${Left_Drag_Area}px;
}
&[type="post-tabs"] {
width: ${Right_Drag_Area}px;
}
${Maximize_Left_Drag_Area ? `
:root[customtitlebar]:not([sizemode="normal"], [inFullscreen]) &[type="pre-tabs"] {
display: flex;
}
` : ``}
${Fullscreen_Drag_Area ? `
:root[customtitlebar][inFullscreen] & {
display: flex;
}
` : ``}
}
#navigator-toolbox[tabs-hidden] & {
#new-tab-button {
display: none;
}
}
}`,
sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService),
uri = Services.io.newURI("data:text/css;charset=UTF=8," + encodeURIComponent(css));
["0", "2", "dragend", "SSTabRestored", "TabAttrModified"].find(eventType => {
if(!sss.sheetRegistered(uri, eventType)) sss.loadAndRegisterSheet(uri, eventType);
if (MultiRowTab_OnOff_and_TabBar_Rows > 0) {
gBrowser.tabContainer.addEventListener(eventType, (e) => {
e.target.scrollIntoView({ behavior: "instant", block: "nearest" })
})
}
})if (TabBar_Position == 2) {
document.body.appendChild(
document.createXULElement("tabbox")
).appendChild(
document.importNode(document.getElementById("navigator-toolbox"))
).appendChild(
document.adoptNode(document.getElementById("TabsToolbar"))
)
}gBrowser.tabContainer._getDropIndex = function(event) {
let tabToDropAt = getTabFromEventTarget(event, false);
const tabPos = gBrowser.tabContainer.getIndexOfItem(tabToDropAt);if (window.getComputedStyle(this).direction == "ltr") {
let rect = tabToDropAt.getBoundingClientRect();
if (event.clientX < rect.x + rect.width / 2)
return tabPos;
else
return tabPos + 1;
} else {
let rect = tabToDropAt.getBoundingClientRect();
if (event.clientX > rect.x + rect.width / 2)
return tabPos;
else
return tabPos + 1;
}
};// We set this to check if the listeners were added before
let listenersActive = false;// This sets when to apply the fix (by default a new row starts after the 23th open tab, unless you changed the min-size of tabs)
gBrowser.tabContainer.addEventListener("dragstart", () => {
// Multiple tab select fix
gBrowser.visibleTabs.forEach(t => t.style.transform = "");// Event handling
if (!listenersActive) {
gBrowser.tabContainer.getDropEffectForTabDrag = function(){};
gBrowser.tabContainer._getDropEffectForTabDrag = function(){};
gBrowser.tabContainer.on_dragover = (dragoverEvent) => performTabDragOver(dragoverEvent);
gBrowser.tabContainer._onDragOver = (dragoverEvent) => performTabDragOver(dragoverEvent);
gBrowser.tabContainer.ondrop = (dropEvent) => performTabDropEvent(dropEvent);
listenersActive = true;
}
});
}var lastKnownIndex = null;
var lastGroupStart = null;
var lastGroupEnd = null;/**
* Gets the tab from the event target.
* Param {*} event The event.
* @returns The tab if it was part of the target or its parents, otherwise null
*/
function getTabFromEventTarget(event, { ignoreTabSides = false } = {}) {
let { target } = event;
if (target.nodeType != Node.ELEMENT_NODE) {
target = target.parentElement;
}
let tab = target?.closest("tab")target?.closest("tab-group");
const selectedTab = gBrowser.selectedTab;
if (tab && ignoreTabSides) {
let { width, height } = tab.getBoundingClientRect();
if (
event.screenX < tab.screenX + width * 0.25
event.screenX > tab.screenX + width * 0.75
((event.screenY < tab.screenY + height * 0.25
event.screenY > tab.screenY + height * 0.75) &&
gBrowser.tabContainer.verticalMode)
) {
return selectedTab;
}
}
if (!tab) {
return selectedTab;
}
return tab;
}/**
* Performs the tab drag over event.
* Param {*} event The drag over event.
*/
function performTabDragOver(event) {
event.preventDefault();
event.stopPropagation();let ind = gBrowser.tabContainer._tabDropIndicator;
let effects = orig_getDropEffectForTabDrag(event);
let tab;
if (effects == "link") {
tab = getTabFromEventTarget(event, true);
if (tab) {
if (!gBrowser.tabContainer._dragTime)
gBrowser.tabContainer._dragTime = Date.now();
if (!tab.hasAttribute("pendingicon") && // annoying fix
Date.now() >= gBrowser.tabContainer._dragTime + gBrowser.tabContainer._dragOverDelay)
gBrowser.tabContainer.selectedItem = tab;
ind.hidden = true;
return;
}
}if (!tab) {
tab = getTabFromEventTarget(event, false);
}
let newIndex = gBrowser.tabContainer._getDropIndex(event);
if (newIndex == null)
return;// Update the last known index and group position
lastKnownIndex = newIndex;
if (tab.nodeName == "tab-group" && !lastGroupStart) {
lastGroupStart = tab.querySelector("tab:first-of-type")._tPos;
lastGroupEnd = tab.querySelector("tab:last-of-type")._tPos;
}let tabs = document.querySelectorAll("tab");
let ltr = (window.getComputedStyle(gBrowser.tabContainer).direction == "ltr");
let rect = gBrowser.tabContainer.arrowScrollbox.getBoundingClientRect();
let newMarginX, newMarginY;
if (newIndex == tabs.length) {
let tabRect = tabs[newIndex - 1].getBoundingClientRect();
if (ltr)
newMarginX = tabRect.right - rect.left;
else
newMarginX = rect.right - tabRect.left;
newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fixif (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+
newMarginY += rect.height / 2 - tabRect.height / 2;
} else if (newIndex != nullnewIndex != 0) {
let tabRect = tabs[newIndex].getBoundingClientRect();
if (ltr)
newMarginX = tabRect.left - rect.left;
else
newMarginX = rect.right - tabRect.right;
newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fixif (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+
newMarginY += rect.height / 2 - tabRect.height / 2;
}newMarginX += ind.clientWidth / 2;
if (!ltr)
newMarginX *= -1;ind.hidden = false;
ind.style.transform = "translate(" + Math.round(newMarginX) + "px," + Math.round(newMarginY) + "px)"; // multirow fix
ind.style.marginInlineStart = (-ind.clientWidth) + "px";
}/**
* Performs the tab drop event.
* Param {*} event The drop event.
*/
function performTabDropEvent(event) {
let newIndex;
let dt = event.dataTransfer;
let dropEffect = dt.dropEffect;
let draggedTab;
if (dt.mozTypesAt(0)[0] == TAB_DROP_TYPE) {
draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
if (!draggedTab) {
return;
}
}if (draggedTab && dropEffect != "copy" && draggedTab.container == gBrowser.tabContainer) {
newIndex = gBrowser.tabContainer._getDropIndex(event);/* fix for moving multiple selected tabs and tab groups */
let selectedTabs = gBrowser.selectedTabs;
if (lastGroupStart) {
selectedTabs = [draggedTab?.closest("tab-group")];
if (lastKnownIndex >= lastGroupStart && lastKnownIndex <= lastGroupEnd) {
newIndex = lastGroupStart;
} else if (lastKnownIndex == lastGroupEnd + 1) {
newIndex = lastGroupStart + 1;
}
}if (selectedTabs[selectedTabs.length - 1] == null){
newIndex = lastKnownIndex;
} else if (newIndex > selectedTabs[selectedTabs.length - 1]._tPos + 1)
newIndex--;
else if (newIndex >= selectedTabs[0]._tPos)
newIndex = -1;if (newIndex == -1) {
newIndex = lastKnownIndex;
}
const tabToMoveAt = gBrowser.tabContainer.getItemAtIndex(newIndex);
console.log("tabToMoveAt", tabToMoveAt);
console.log("newIndex", newIndex);
selectedTabs.forEach(t => gBrowser.moveTabBefore(t, tabToMoveAt));// Restart global vars
lastKnownIndex = null;
lastGroupStart = null;
lastGroupEnd = null;
}
}// copy of the original and overrided _getDropEffectForTabDrag method
function orig_getDropEffectForTabDrag(event) {
let dt = event.dataTransfer;let isMovingTabs = dt.mozItemCount > 0;
for (let i = 0; i < dt.mozItemCount; i++) {
// tabs are always added as the first type
let types = dt.mozTypesAt(0);
if (types[0] != TAB_DROP_TYPE) {
isMovingTabs = false;
break;
}
}if (isMovingTabs) {
let sourceNode = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
if (XULElement.isInstance(sourceNode) &&
sourceNode.localName == "tab" &&
sourceNode.ownerGlobal.isChromeWindow &&
sourceNode.ownerDocument.documentElement.getAttribute("windowtype") ==
"navigator:browser" &&
sourceNode.ownerGlobal.gBrowser.tabContainer == sourceNode.container) {
// Do not allow transfering a private tab to a non-private window
// and vice versa.
if (PrivateBrowsingUtils.isWindowPrivate(window) !=
PrivateBrowsingUtils.isWindowPrivate(sourceNode.ownerGlobal))
return "none";if (window.gMultiProcessBrowser !=
sourceNode.ownerGlobal.gMultiProcessBrowser)
return "none";if (window.gFissionBrowser != sourceNode.ownerGlobal.gFissionBrowser)
return "none";return dt.dropEffect == "copy" ? "copy" : "move";
}
}if (Services.droppedLinkHandler.canDropLink(event, true))
return "link";return "none";
}Oh Himmel.
Nimm dieses Skript, ich habe für Dich Zeile 35 umgestellt.
Die Tab-Leiste sollte damit unter der Symbolleiste sein.Danke das geht auch Leiste ist nun wieder unten. Vielen Dank !!!
Wo finde ich denn jetzt die Einstellungen für
runde TAB
länge TAB
höhe TAB
💖😇 -
Letzteres sind eben die dedizierten Profile. Es wird zwar in den beiden Ini was hinterlegt, aber es gibt auch noch eine Sperre im Profil. Upgrade ja, Downgrade nein.
LocalAppData ist schon länger nicht mehr notwendig. Es gab Zeiten, da hat manche Erweiterung dort auch Daten abgelegt, das ist aber eine Ewigkeit her.
Sein Problem ist das automatische Update, was ihm derzeit ganz schnell die Nutzung der Scripte verhagelt. Wie hat Brokenheart es neckisch beschrieben?
Zitatder Hamster braucht es wirklich "mundgerecht"
Ich habe FF138 jetzt drauf und das ist nicht schlimm im virtuellen Windows da kann es machen was es will udn ich schrote das Ding, jetzt solange, bis es macht, was ich will.
Das FF hat zu machen was ich will, ob es will, oder nicht.
Ich brauche das alte Design nur noch zurück und das reinkopierne ging gut, also alles läuft wie gewohnt. -
Hallo GermanFreme82
Ne das schaff ich nicht. Ich brauche auch immer Hilfe....
Ändere in Zeile 35 bei TabBar_Position die 0 auf 1, starte Firefox neu mit Cache leeren
dann müsste die Tableiste wieder unten sein.
Mfg.
EndorGibt es nicht diese Zeile finde ich nicht
userChrome.css
Zeile 35: /* Kontext-Menü / Einträge ausgeblendet */TabBar_Position = 1 ,// [0] = Above Toolbar Default
// 1 = Under the toolbar
// 2 = Under Site Content
??? Das auf 1 jaJetzt ist die leiste wieder unten aber es fehlt das DEsign.