从元素中移除/重置继承的CSS
remove / reset inherited css from an element
我知道以前有人问过这个问题,但在把它标记为重复之前,我想告诉你,我的情况和我在网上找到的有点不同。
我正在构建和嵌入脚本,人们可以把它放在他们的网站。这个脚本创建了一个具有一定宽度/高度和一些信息的div。
我的问题是,一些网站声明的div样式继承了我的div。
例如:div{
background-color:red;
}
如果我没有为div设置背景色,它就会显示红色即使我不想这样
我唯一的解决方案是覆盖尽可能多的css属性,这样我的div将完全显示我想要的。这个解决方案的问题是有太多的css属性要覆盖,我希望我的脚本尽可能轻。
所以我的问题是你是否知道我的问题的另一个解决方案。可以是css/javascript/jQuery。
谢谢
"Resetting"特定元素的样式是不可能的,你必须覆盖所有你不想要/不需要的样式。如果你直接使用CSS或使用JQuery来应用样式(取决于哪种对你来说更容易,但我不建议使用JavaScript/JQuery,因为这是完全不必要的)。
如果div是某种"widget"它可以包含在其他站点中,您可以尝试将其包装到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并使用auto
我不认为这将与颜色具体工作,但我遇到了一个问题,我有一个父属性,如
.parent {
left: 0px;
}
然后我可以用
这样的东西来定义我的child.child {
left: auto;
}
,它有效地"重置"属性。
从技术上讲,您要查找的是未设置的值与速记属性all:
unset CSS关键字将一个属性重置为它从父属性继承的值,否则重置为它的初始值。换句话说,它的行为在第一种情况下类似于inherit关键字,在第二种情况下类似于initial关键字。它可以应用于任何CSS属性,包括CSS简写all.
.customClass {
/* specific attribute */
color: unset;
}
.otherClass{
/* unset all attributes */
all: unset;
/* then set own attributes */
color: red;
}
你也可以使用初始值,这将默认为浏览器的初始值。
.otherClass{
/* unset all attributes */
all: initial;
/* then set own attributes */
color: red;
}
作为替代:
如果可能的话,最好将类或id封装在某种命名空间中:
.namespace .customClass{
color: red;
}
<div class="namespace">
<div class="customClass"></div>
</div>
因为选择器的特殊性,这只会影响你自己的类
在"预处理器脚本语言"中更容易实现这一点。例如具有嵌套功能的SASS:
.namespace{
.customClass{
color: red
}
}
试试这个:创建一个普通的div
,没有任何风格或红色div
之外的内容。现在你可以在普通div
的所有样式上使用循环,并将其分配给内部div
来重置所有样式。
当然,如果有人给所有div
分配样式(即不使用类),这就行不通了。CSS应该是div { ... }
).
div
提供一个不同的类。这样,网站的网页设计师就可以调整div
的样式,以适应其余的设计。
只要是类和id之类的属性,就可以通过javascript/jQuery的类修饰符来删除它们。
document.getElementById("MyElement").className = "";
没有办法删除特定的标签CSS,除了覆盖它们(或使用另一个元素)。
您可以使用下面的选项。
<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>
根据我的理解,您想使用继承自您的类的div。正如前面的回复所提到的,您不能完全重置div继承。然而,对我来说,解决这个问题的方法是使用另一个元素——一个不常用的元素,当然也不会在当前的html页面中使用。一个很好的例子,就是使用而不是定制它,让它看起来像你理想的样子。
area { background-color : red; }
一种简单的方法是在css中使用!important
修饰符,但是用户可以用同样的方式覆盖它。
也许一个解决方案可以通过jquery实现遍历整个DOM来找到你(重新)定义的类和删除/强制css样式。
- Javascript:创建不继承css的元素
- 如何继承 css 动画
- 如何创建一个独立的 DOM 元素?一个不从父母那里继承 css 等
- JQuery/CSS 父子继承噩梦
- 我应该如何处理这个 CSS 继承难题
- 如何继承祖父母CSS而不是父CSS
- 如何使用JavaScript获得元素的实际继承CSS
- 如何使用Javascript获取继承的CSS值
- javascript appendchild,它不继承父级的css
- CSS文本框宽度从具有最大宽度的父容器继承
- 从Webix中的视图继承CSS
- CSS交叉继承
- 在js中检查CSS color属性是否接受'继承'价值
- Shadow DOM元素可以继承CSS吗?
- 是否有一个(polyfill)代码重置所有继承的CSS属性上的给定元素
- 如何在css中继承类
- 从元素中移除/重置继承的CSS
- 获取从中继承CSS规则的元素
- 继承图像宽度(css)
- JS组件可以继承CSS样式吗