属性选择器是 CSS 中一种强大的选择器,它允许我们根据元素的属性及属性值来选择特定的元素,从而实现精准的样式控制。
它主要的应用场景是,为表单字段设置统一样式、模块化CSS以避免命名冲突、标识表单控件的不同交互状态、定制多语言环境下的文本展示、响应不同媒体查询条件等。
好,那我们一起来看看它的 7 个常见用法吧。
- [type] {
- /* 选择所有带有 'type' 属性的元素 */
- }
-
- [href="https://www.example.com"]
- {
- /* 选择href属性值完全等于指定URL的元素 */
- }
-
- [href^="https://"]
- {
- /* 选择href属性值以'https://'开始的元素 */
- }
-
- [href$='.pdf'] {
- /* 选择href属性值以'.pdf'结束的元素 */
- }
-
- [title*='hello'] {
- /* 选择title属性值包含'hello'字符串的元素 */
- }
-
注意:其实这个词也不必也写完整,但如果从易读性和精准匹配来说,根据上下文写完整比较好。- [class~='active'] {
- /* 选择class属性值中包含'active'单词的元素 */
- }
-
- [lang|='en'] {
- /* 选择lang属性值以'en'开始或等于'en'的元素 */
- }
-
以上属性的,代码如下:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Attribute Selectors Example</title>
- <style>
- /* 存在选择器:选择所有div带有 'data-info' 属性的元素 */
- div[data-info] {
- border: 1px solid #333;
- padding: 5px;
- }
-
- /* 开始匹配选择器:选择 'href' 属性值以 'https://' 开始的 <a> 元素 */
- a[href^="https://"]
- {
- color: #11cdd4;
- }
- /* 完全匹配选择器:选择 'href' 属性值完全等于指定 URL 的 <a> 元素 */
- a[href="https://www.example.com"]
- {
- color: #e02339;
- }
-
- /* 结束匹配选择器:选择 'href' 属性值以 '.pdf' 结束的 <a> 元素 */
- a[href$='.pdf'] {
- font-style: italic;
- }
-
- /* 包含匹配选择器:选择 'class' 属性值包含 'highlight' 的元素 */
- p[class*='highlight'] {
- background-color: yellow;
- }
-
- /* li的词匹配选择器:选择 'class' 属性值中包含 'active' 单词的元素 */
- li[class~='active'] {
- font-weight: bold;
- border-bottom: 5px solid #15be02;
- }
-
- /* 前缀匹配选择器:选择 'lang' 属性值以 'fr' 开始的元素 */
- [lang|='fr'] {
- border-bottom: 5px solid #665aec;
- }
-
- /* 额外样式:仅为了演示 */
- body {
- font-family: Arial, sans-serif;
- }
- ul {
- list-style: none;
- }
- a {
- text-decoration: none;
- margin-right: 10px;
- }
- p {
- margin: 10px 0;
- }
- /* 完全匹配选择器:选择 'type' 属性值完全等于 text 的元素 */
- input[type='text'] {
- background-color: #11cdd4;
- line-height: 30px;
- }
- </style>
- </head>
- <body>
- <!-- 存在选择器 -->
- <div data-info="some data">这段文本包含 data-info 属性。</div>
- <p data-info="some data">这段文本包含 data-info 属性,但不是div。</p>
-
- <!-- 完全匹配选择器 -->
- <a href="https://www.example.com">Example.com</a>
-
- <!-- 开始匹配选择器 -->
- <a href="https://www.google.com">Google</a>
- <a href="http://www.google.com">Google (http)</a>
-
- <!-- 结束匹配选择器 -->
- <a href="https://www.example.com/document.pdf">PDF Document</a>
-
- <!-- 包含匹配选择器 -->
- <p class="some highlight text">这段文本的类名包含 'highlight'。</p>
- <div class="highlight">这段文本的类名包含 'highlight',但不是p标签,所以不起效。</div>
-
- <!-- 词匹配选择器 -->
- <ul>
- <li class="item active">活动项</li>
- <li class="item">非活动项</li>
- <li class="active item">另一个活动项</li>
- </ul>
-
- <!-- 前缀匹配选择器 -->
- <p lang="en-US">这是一段英文文本。</p>
- <p lang="en-GB">这也是一段英文文本。</p>
- <p lang="fr">这是法文文本,符合前缀匹配。</p>
-
- <div>
- <input type="text" name="name" placeholder="这是姓名" />
- <input type="text" name="phone" placeholder="这是电话" />
- <input type="email" name="mail" placeholder="这是邮箱" />
- </div>
- </body>
- </html>
-
效果如下:
属性选择器的作用包括但不限于: