Удалить / сбросить унаследованный CSS от элемента
Я знаю, что этот вопрос задавался ранее, но прежде чем пометить его как дубликат, я хочу сказать вам, что моя ситуация немного отличается от того, что я обнаружил в Интернете.
Я строю и встраиваю скрипт, который люди могут разместить на своих сайтах. Этот скрипт создает div с определенной шириной / высотой и некоторой информацией в нем.
Моя проблема в том, что некоторые сайты объявляют стили для div, которые наследуются и моим div.
например:
div{
background-color:red;
}
так что если я не установлю какой-либо цвет фона для моего div, он будет показывать красный, даже если я этого не хочу.
Единственное решение, которое я нашел, - это переписать как можно больше свойств CSS, таким образом, мой div будет отображаться именно так, как я хочу. Проблема с этим решением состоит в том, что существует слишком много свойств CSS для перезаписи, и я хочу, чтобы мой сценарий был настолько легким, насколько это возможно.
Так что мой вопрос, если вы знаете другое решение моей проблемы. Это может быть в css/javascript /jQuery.
Спасибо
8 ответов
"Сброс" стилей для определенного элемента невозможен, вам придется перезаписать все стили, которые вам не нужны / не нужны. Если вы сделаете это с помощью css напрямую или с помощью jquery для применения стилей, это будет зависеть от того, что вам будет проще (но я не буду рекомендовать использовать для этого javascript/jquery, так как это совершенно не нужно).
Если ваш div - это своего рода "виджет", который может быть включен в другие сайты, вы можете попробовать заключить его в iframe. это "сбросит" стили, потому что его содержимое является другим документом, но, возможно, это повлияет на работу вашего виджета (или, возможно, полностью его нарушит), поэтому это может оказаться невозможным в вашем случае.
Только установите соответствующие / важные свойства CSS.
Пример (измените только те атрибуты, которые могут привести к тому, что ваш div будет выглядеть совершенно иначе):
background: #FFF;
border: none;
color: #000;
display: block;
font: initial;
height: auto;
letter-spacing: normal;
line-height: normal;
margin: 0;
padding: 0;
text-transform: none;
visibility: visible;
width: auto;
word-spacing: normal;
z-index: auto;
Выберите очень специфический селектор, такой как div#donttouchme
, <div id="donttouchme"></div>
, Кроме того, вы можете добавить `! Важное перед каждой точкой с запятой в объявлении. Ваши клиенты намеренно пытаются испортить вашу планировку, когда эта опция не работает.
Вы можете попробовать перезаписать CSS и использовать авто
Я не думаю, что это будет работать именно с цветом, но я столкнулся с проблемой, когда у меня было родительское свойство, такое как
.parent {
left: 0px;
}
и тогда я смог просто определить моего ребенка с чем-то вроде
.child {
left: auto;
}
и это эффективно "сбросить" свойство.
Технически то, что вы ищете, это неустановленное значение в CSS:
Ключевое слово unset CSS сбрасывает свойство до унаследованного значения, если оно наследуется от своего родителя, и до его начального значения, если нет. Другими словами, он ведет себя как ключевое слово inherit в первом случае и как ключевое слово initial во втором случае. Его можно применить к любому свойству CSS, включая сокращение all.
.customClass {
/* specific attribute */
color: unset;
}
.otherClass{
/* unset all attributes */
all: unset;
/* then set own attributes */
color: red;
}
В качестве альтернативы:
если возможно, рекомендуется инкапсулировать класс или идентификатор в своего рода пространство имен:
.namespace .customClass{
color: red;
}
<div class="namespace">
<div class="customClass"></div>
</div>
из-за специфики селектора это повлияет только на ваши собственные классы
Это проще сделать на "языках сценариев препроцессора", таких как SASS, с возможностью вложения:
.namespace{
.customClass{
color: red
}
}
Попробуйте это: создать равнину div
без какого-либо стиля или содержания за пределами красного div
, Теперь вы можете использовать цикл над всеми стилями равнины div
и назначьте тогда свой внутренний div
сбросить все стили.
Конечно, это не работает, если кто-то назначает стили всем div
s (т.е. без использования класса. CSS будет div { ... }
).
Обычное решение таких проблем - дать div
отличный класс. Таким образом, веб-дизайнеры сайтов могут настроить стиль вашего div
вписаться в остальную часть дизайна.
Вы можете использовать эту опцию ниже.
<style>
div:not(.no_common_style){
background-color:red;
}
</style>
теперь, если они где-то, где вы не хотите применять стиль по умолчанию, вы можете использовать класс no_common_style в качестве класса. например:
<div class="no_common_style">
It will not display in red
</div>
Пока они являются такими атрибутами, как классы и идентификаторы, вы можете удалить их с помощью модификаторов классов javascript/jQuery.
document.getElementById("MyElement").className = "";
Невозможно удалить определенный тег CSS, кроме как переопределить его (или использовать другой элемент).
Из того, что я понимаю, вы хотите использовать div, который наследует не от вашего класса. Как упоминалось в предыдущем ответе, вы не можете полностью сбросить наследование div. Однако, что работало для меня с этой проблемой, так это использование другого элемента, который встречается не часто и, конечно, не используется на текущей html-странице. Хороший пример - использовать вместо того, чтобы настраивать его так, чтобы он выглядел так же, как ваш идеал.
area { background-color : red; }
Одним из простых подходов было бы использовать !important
модификатор в css, но он может быть переопределен таким же образом от пользователей.
Может быть, решение может быть достигнуто с помощью jquery путем обхода всего DOM, чтобы найти ваши (пере) определенные классы и удаления / форсирования стилей CSS.