2010-05-08 1 views
1

Я пишу сценарий greasemonkey, который добавляет sticky notes к веб-сайтам. Поскольку иногда на некоторых сайтах используются довольно странные правила стиля, липкие заметки иногда оказываются испорченными (или, по крайней мере, не похожими на то, что я хочу, чтобы они смотрели).Игнорировать правила стиля документа в одном элементе

Есть ли способ сказать, что «под этим элементом не применяются общие шаблоны»? Так что правила, связанные с именами тегов, не применяются, но правила, связанные с определенными классами и идентификаторами, все еще существуют. Или у кого-нибудь есть лучшая идея о том, как обеспечить, чтобы только стили применялись к липким заметкам?

ответ

3

AFAIK, это на самом деле невозможно.

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

+1

Ну, в этом случае мне нужно будет переопределить все элементы HTML с нуля, потому что некоторые страницы переопределяют базовый стиль даже для элементов, таких как элементы списка. – panzi

+0

Да, действительно, у вас тоже будет. Это единственный способ, которым вы ели уверены, что элементы стилизованы так, как должны. Iirc, компоненты, такие как Lightbox, используют эту же стратегию. – Ikke

2

Вы пробовали ключевое слово «! Important»?

Он переопределяет иерархию наследования CSS.

+0

Это можно применить только к стилям, которые я явно использую. Я хочу, чтобы настройки по умолчанию были сброшены, поэтому мне не нужно переопределять их вручную. Например. на google.com даже элементы списка стилизованы (нет патронов, нет отступов). И на элементах списка stackoverflow, кажется, сосредоточено. В принципе, мне нужно будет воссоздать все элементы HTML с нуля. – panzi

+0

Спасибо большое! Очень полезно! –

+0

@ Мишель Привет. Как я могу сделать! Важный внутри стилизованный элемент? Возможно ли это или только во внешних правилах CSS? –

0

Это звучит просто как проблема специфики css для меня, не так ли? Похоже, вы должны просто сделать ваши правила css более конкретными и устойчивыми (не ретранслировать по существующим правилам, ожидать изменения по умолчанию и писать нужные вам правила).

Вот некоторые ссылки, чтобы прочитать о CSS специфичностью:

0

Это действительно проблема специфичности. Я предполагаю, что у вас есть ваши липкие заметки в одном элементе div#stickyContainer, и в этом случае вам следует применить переопределение свойств CSS к элементам по тому факту, что они принадлежат этому элементу, и убедитесь, что вы сбросили все.

То есть, в div#stickContainer div.sticky { ... } убедитесь, что вы установили каждый CSS свойство к тому, что вы хотели бы быть, даже если вы просто установив их в обычном браузере по умолчанию, и включают в себя !important ключевое слово следующее каждая директива.

0

Поместите код, который вы хотите освободить от правил CSS в отдельном документе, и используйте <iframe src='[location]' />. Это то, что мы делаем для примеров HTML в сообщениях в блогах.

+0

Это все JavaScript без серверного компонента.Думаю, я мог бы попытаться создать пустой iframe и начать манипулировать его содержимым. Или только для Firefox (который сценарий в любом случае) я просто мог кодировать все в гигантских 'data:' -URL. (Не все браузеры поддерживают гигантские данные: '-URLs.) – panzi