负面的CSSselect器
是否有某种“负面的”CSSselect器?
例如,当我在CSS中编写以下代码行时,具有类classname的标记中的所有input字段都将具有红色背景。
.classname input {background: red;}
如何select具有class classname标签外的所有input字段?
目前的浏览器CSS支持,你不能。
较新的浏览器现在支持它 – 请参阅Sam的答案了解更多信息。
(请参阅其他答案的CSS的替代品。)
如果在JavaScript / jQuery中可以接受,你可以这样做:
$j(':not(.classname)>input').css({background:'red'});
Mozilla支持否定式伪类 :
:not(.classname) input {background: red;}
另见: http : //developer.mozilla.org/en/Mozilla_CSS_support_chart
请注意,negation伪类位于“ select器级别3推荐标准”中 ,可用于最新版本的Firefox,Chrome和Safari(至less)。 下面的示例代码。
<html> <head> <title>Negation pseudo class</title> <style type="text/css"> div { border: 1px solid green; height: 10px; } div:not(#foo) { border: 1px solid red; } </style> </head> <body> <div id="foo"></div> <div id="bar"></div> <div id="foobar"></div> </body> </html>
难道你不是通过将“全局”背景设置为红色,然后使用类名来改变其他的?
input { background: red; } .classname input { background: white; }
我会这样做
input { /* styles outside of .classname */ } .classname input { /* styles inside of .classname, overriding above */ }
没有办法select与CSS匹配的元素的父母。 你将不得不使用JavaScript来select它们。
从你的问题,我假设你有标记,看起来或多或less像这样:
<form class="formclassname"> <div class="classname"> <input /> <!-- Your rule matches this --> <input /> <!-- Your rule matches this --> </div> <input /> <!-- You want to select this? --> <input /> <!-- You want to select this? --> </form>
一种select是将一个类添加到一个更高的元素中,比如说<form>
,然后编写一个规则来设置表单的所有input。 IE:
.formclassname input { /* Some properties here... */ }
要么
.formclassname > input { /* Some properties here... */ }
如果你想根据它们不在具有特定类的元素内select它们,那么不用运用JavaScript就可以了。
我认为最接近你能得到的只是一个声明只影响直系后裔
这个代码例如只会影响input字段直接在div类与“maincontent”
div.maincontent > input { // do something }
input有点烦人,因为与大多数其他html元素不同,并不一定会将所有css属性重置为默认值。
如果样式是非关键的(即很好有,但不影响function),我会使用jQuery来获取所有input数组,检查他们的父母,然后只在外部的那些div上执行样式。 就像是:
$('input').each(function() { if($(this).closest('.classname') == false) { // apply css styles } });
(顺便说一句,我不是jQuery的专家,所以上面可能会有一些错误,但原则上这样的事情应该工作)