CSS属性选择器不起作用


99

我需要在CSS中使用属性选择器来更改不同颜色和图像上的链接,但是它不起作用。

我有这个HTML:

<a href="/manual.pdf">A PDF File</a>

而这个CSS:

a {
     display: block;
     height: 25px;
     padding-left: 25px;
     color:#333;
     font: bold 15px Tahoma;
     text-decoration: none;
 }
 a[href='.pdf'] { background: red; }

为什么背景不是红色的?


14
+1是因为我不知道a [attribute ='AttributeName']
SpaceBeers 2012年

7
@SpaceBeers,那就是element[attribute_name="attribute_value"]
JMM 2012年

Answers:


193

在href后面使用$。这将使属性值匹配字符串的结尾。

a[href$='.pdf'] { /*css*/ }

JSFiddle:http : //jsfiddle.net/UG9ud/

E[foo]        an E element with a "foo" attribute (CSS 2)
E[foo="bar"]  an E element whose "foo" attribute value is exactly equal to "bar" (CSS 2)
E[foo~="bar"] an E element whose "foo" attribute value is a list of whitespace-separated values, one of which is exactly equal to "bar" (CSS 2)
E[foo^="bar"] an E element whose "foo" attribute value begins exactly with the string "bar" (CSS 3)
E[foo$="bar"] an E element whose "foo" attribute value ends exactly with the string "bar" (CSS 3)
E[foo*="bar"] an E element whose "foo" attribute value contains the substring "bar" (CSS 3)
E[foo|="en"]  an E element whose "foo" attribute has a hyphen-separated list of values beginning (from the left) with "en" (CSS 2)

来源:http : //www.w3.org/TR/selectors/


1
匹配字符串结尾的属性值。听起来像奖金!!
2015年

6
这个答案比w3schools对选择器有更好的解释。
杰夫(

1

接受的答案(使用a[href$='.pdf'])假定pdf链接始终以结尾.pdf。情况不一定如此,因为链接可能具有查询字符串或哈希片段,例如带有UTM跟踪代码或页码,在这种情况下,这些链接将不匹配。实际上,对于大多数链接,情况可能取决于您的应用程序。

<a href="/manual.pdf?utm_source=homepage">A PDF File</a>
<a href="/manual.pdf#page=42">A PDF File</a>

如果您想确保在这些情况下也可以应用规则,则可以.pdf使用

a[href*='.pdf']

但是,这将匹配一些不太可能但意外的事情,例如subdomain our.pdf.domain.com/a-page。但是我们可以进一步缩小范围,因为我们知道我们只会将其与具有查询字符串或哈希片段的pdf匹配使用。如果将这三种情况结合起来,我们应该匹配所有pdf链接。

a[href$='.pdf'], a[href*='.pdf?'], a[href*='.pdf#'] {
    background: red;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.