LINUX.ORG.RU

Ещё вопрос по firefox: как переопределить «внутренний» стиль браузера?

 ,


0

1

Здравствуйте.

В firefox есть «внутренние» стили: chrome://activity-stream/content/css/activity-stream.css, например, различные resource:// и т.д.

Вчера гуглил и нагуглил, что можно в этот (предварительно сохранённый и отредактированный мной по своему вкусу) для примера activity-stream.css вписать хитрый комментарий, начинающиеся с '//# sourceURL=', содержащий вышеуказанный путь, и положить полученное в пользовательский профайл, то пользовательский activity-stream.css будет перекрывать браузерный. Более подробно нагуглить не очень получается.

Буду рад подсказке. Спасибо за внимание.

★★★★★

Последнее исправление: piyavking (всего исправлений: 4)

Тоже не совсем понял, что вам нужно, но вероятно userChrome.css.

https://www.userchrome.org/how-create-userchrome-css.html

TLDR:

  • В about:config сменить toolkit.legacyUserProfileCustomizations.stylesheets на true.
  • Создать файл chrome/userChrome.css, внутри директории вашего профиля.
  • Прописать там нужные стили.
piezoelement
()
Ответ на: комментарий от piezoelement

Нет, это не про юзерхромы, это глубже. Я хочу переопределять не стили внешних страниц, а внутренние стили браузера.

Вот есть, например, awesome, его дефолтный конфиг лежит в /etc/xdg/awesome, и, если я в ~/.config/awesome не создам ничего пользовательского, то awesome запустится «по-дефолту».

Но если я нашаманю пользовательский конфиг, то awesome плюнет на установки «по умолчанию», и будет запускаться с подхватом пользовательских.

То же самое примерно я хочу провернуть с браузером (аналог awesome) и его стилями и скриптами (которые, в отличие от примера с awesome, не лежат где-то в /etc, а динамически генерятся).

Вместо

chrome://activity-stream/content/css/activity-stream.css

я хочу иметь

~/.mozilla/.../мой_профайл/путь/который/я/не/знаю/activity-stream.css

который будет перекрывать предыдущий activity-stream.css безо всяких костылей типа впиливания !important в userContent.css (не userChrome, userChrome переквашивает интерфейс, а мне надо контент).

Гугль даёт основания полагать, что это осуществимо, но из-за засоренности ответов всеразличными юзерхром-рецептами до грязных подробностей мне просто не докопаться...

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от dmitry237

Это внешний вид контента. Контента служебных страниц, например, а также часть элементов контента внешних интернет-страниц - не все вещи можно выправить юзерконтентом, отображение каких-то элементов жёстко генерится браузером.

Например, в «родном» activity-stream.css на about:newtab мне нужно убить box-shadow на элементе определённого стиля, в котором есть строчка

box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);

Этот стиль я могу переопределить в userContent.css, описав там его со строчкой «box-shadow: none !important», и вроде вот оно счастье, но box-shadow элемента при наведении я этим !important тоже убью, а оно мне не надо.

А вот подложить файрфоксу свой activity-stream.css, в котором на месте вышеупомянутой строчки будет безо всякого "!important"

box-shadow: none;

полностью делает то, что мне надо. Я могу поредактировать этот activity-stream.css прямо в браузере, и на этот конкретный его сеанс получить нужный мне вид, но изменения не сохраняются. Отсюда и вопрос.

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от piyavking

Этот стиль я могу переопределить в userContent.css, описав там его со строчкой «box-shadow: none !important», и вроде вот оно счастье, но box-shadow элемента при наведении я этим !important тоже убью, а оно мне не надо.

А ты переопредели правильно.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

А ты напиши, как правильно, я и переопределю. Да, из приведённого в примере положения я как-то вырулил юзерконтентом, зацепившись за другие вещи, но прогнозирую ситуации, когда мне это не удастся. А заменой внутреннего стиля это делается легко, приятно, и наверняка. И матчасть дальше грызть не надо, а то у меня от неё изжога уже. Так что я продолжаю хотеть, чего хочу - юзерконтент тут не вывозит, две недели убеждался и убедился.

piyavking ★★★★★
() автор топика
Ответ на: комментарий от t184256

Большое спасибо, твои сообщения существенно продвинули меня в моём вопросе. Просьба некоторое время не писать - опасаюсь перелететь через цель, тише едешь - дальше будешь...

piyavking ★★★★★
() автор топика
Ответ на: комментарий от piyavking

Надо учитывать состояние твоего селектора

но box-shadow элемента при наведении я этим !important тоже убью

например :focus :hover и т.д. То есть дописать ещё к твоему элементу блок ниже с состоянием фокуса(я так понял), тоже с !important. Аналог, как пример из моего userChrome.css

/* Граница адресной панели в фокусе */
#urlbar[focused=true]:not([suppress-focus-border]) > #urlbar-background {
  border: none !important; /* def var(--focus-outline) */
/*  border-color: transparent !important; def var(--toolbar-field-focus-border-color) */
}
/* Граница адресной панели не в фокусе */
#urlbar-background, #searchbar {
  border: 0px solid var(--toolbar-field-border-color) !important; /* def 1px */
}
/* Тень адресной панели в фокусе */
#urlbar[focused=true] > #urlbar-background {
  box-shadow: none !important; /* def 0 1px 3px rgba(0, 0, 0, 0.23) */
}
Ну или как вариант, копировать содержимое твоего activity-stream.css в userContent.css, и играть с ним как хочешь с !important и прочим.

spawn_sp ★★★★
()
Ответ на: комментарий от spawn_sp

Спасибо за новые названия, выглядит обнадёживающее, покручу, спасибо!

Вот ещё '//# sourceURL=' овладею и тогда буду практически счастлив некоторое время)

piyavking ★★★★★
() автор топика
Ответ на: комментарий от piyavking

Или можно так расписать, в виде дерева, нет, лучше газовой трубы (актуально для меня, были тут две тёлки с горгаза, весь мозг вынесли, техобслуга блин :) ). Есть труба 1 с вентилем, из неё растёт труба 2 без вентиля которую тебе надо перекрыть и растёт труба 3 с вентилем которую надо оставить с газом. Ты перекрыл трубу 1, так как труба 2 без вентиля, газ пропал в 2 и 3. Чтобы оставить трубу 3 с газом, нужно переварить её до вентиля на трубе 1 (в твоём случае сделать запись по новой, для трубы 3 в userContent.css). Здесь труба 2 - твой элемент который хочешь изменить, труба 3 - твой элемент в фокусе который менять не хочешь. Или вариант труб последовательный, так правильней. Или просто труба 3 использует, наследует значение box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15); из трубы 2, которое ты изменил на box-shadow: none; и имеет запись что то типа труба 3[focused=true] { box-shadow: var(--труба 2-shadow-size) } ;) .

spawn_sp ★★★★
()
Последнее исправление: spawn_sp (всего исправлений: 1)
Ответ на: комментарий от piyavking

Ты вроде определился с этим //# sourceURL=chrome://activity-stream/content/css/activity-stream.css или не работает?. Есть ещё вариант, кладёшь свой activity-stream.css рядом с userContent.css как обычно в профиле. В userContent.css пишешь правило @import "activity-stream.css";, удобно, что бы не загромождать userContent.css, я для LOR так сделал.

spawn_sp ★★★★
()
Ответ на: комментарий от spawn_sp

Ты вроде определился с этим //# sourceURL=chrome://activity-stream/content/css/activity-stream.css или не работает?

нет, так и не определился. ни с синтаксисом, ни с каталогом...

Есть ещё вариант, кладёшь свой activity-stream.css рядом с userContent.css как обычно в профиле. В userContent.css пишешь правило @import «activity-stream.css»;, удобно, что бы не загромождать userContent.css, я для LOR так сделал.

попробую, спасибо! и что, у тебя твой activity-stream.css перебивает «родной браузерный» без !important?

piyavking ★★★★★
() автор топика
Последнее исправление: piyavking (всего исправлений: 2)
Ответ на: комментарий от spawn_sp

--поразмыслив

Делать инклюд в userContent.css не поможет. Чтобы перебить активити-стрим юзерконтентом, нужен !important, что в самом юзерконтенте, что в инклюде...

piyavking ★★★★★
() автор топика
Ответ на: комментарий от piyavking

Да верно, с '!important' использую, просто удобно, не по твоему вопросу. Я кое что увидел через F12, толком не смотрел раньше из-за не надобностью. Запустил 'about:preferences', выбрал рандомно 'toolbarbutton.css' и потом 'widgets.css' для разнообразия, увидел твой искомый '//# sourceURL='. Для 'widgets.css' это 'chrome://global/content/widgets.css', для 'toolbarbutton.css' показал 'chrome://global/skin/toolbarbutton.css'. То есть, например, кладёшь 'toolbarbutton.css' в каталог 'chrome' так как 'chrome://' в адресе, пишешь ему твой хитрый комментарий '//# sourceURL=chrome://global/skin/toolbarbutton.css', пробуешь менять значения. Если бы был адрес например 'resource://global/skin/toolbarbutton.css', то нужно было бы создать каталог 'resource', по аналогии как делал для 'chrome' и положить в него 'toolbarbutton.css'. Адрес увидел просто правым кликом в крайней левой колонке по любому '.css', строка 'Copy URL'. Вот думаю так, пробуй.

spawn_sp ★★★★
()
Ответ на: комментарий от piyavking

Проверил, не работает хитрый комментарий, только с '!important'. И полностью создавал директорию из адреса '/chrome/browser/skin/preferences/preferences.css' и сразу в '/chrome' пробовал. Что то с ним непорядок.

spawn_sp ★★★★
()
Ответ на: комментарий от piyavking

Посмотрел мельком по сайтам, на счёт !important, много статей, споров, типа зачем он нужен и без него было бы неплохо. Повышает приоритет селекторам, разработчики вовсю его используют, в коде заложено. У себя увидел, внимания не обращал раньше, в оригинальных .css, вот пока не менял ничё в preferences.css а он есть:

.indent {
  /* This should match the checkboxes/radiobuttons' width and inline margin,
     such that when we have a toggle with a label followed by another element
     with this class, the other element's text aligns with the toggle label. */
  margin-inline-start: 22px !important;
}
И с директориями, и с именами файлов userChrome userContent наверное так просто не выйдет подсовывать другие, прописаны где то, не вникал. Браузерная WebIDE увидела(появился слева в колонке .css-ок Style Editor) мой preferences.css, только после @import в userContent, то есть появились два - мой и оригинальный, был один, по другому не понимает, смотрит только в свои задуманные userChrome и userContent.

spawn_sp ★★★★
()