当前位置: 首页 > 知识库问答 >
问题:

如何在CSS中构建否定属性选择器?

经炜
2023-03-14

我正在尝试(可能有点鲁莽)在CSS中重现Douglas Crockford所说的底部值。

什么是底值?

在Javascript中,底部值为undefinednull

我可以使用自定义数据属性:

data-my-custom-attribute=""

并且我可以给它一个null值(使用Unicodeu+2400):

data-my-custom-attribute="␀"

在CSS中,我可以引用任何为空的自定义数据属性:

[data-my-custom-attribute="␀"] {

  [... CSS PROPERTIES HERE...]

}

接下来,我要部署一个与此JavaScript相当的:

if (myCustomAttribute !== null) { ... }

但我似乎不能引用任何非空的自定义数据,因为如下所示:

[data-my-custom-attribute!="␀"] {

  [... CSS PROPERTIES HERE...]

}

无效且无效。

已确定:

  • [data-my-custom-attribute!=“”]

不起作用,我突然想到:

  • [data-my-custom-attribute]:不([data-my-custom-attribute=“”])

实际上是有效的(如果没有其他问题,我会坚持这样做)。

工作示例:

null

div {
  display: inline-block;
  width: 100px;
  height: 100px;
  margin-right: 12px;
}

.rectangle {
  display: block;
  width: 450px;
  height: 60px;
  margin-top: 12px;
  background-color: orange;
}

[data-my-custom-attribute="red"] {
  background-color: red;
}

[data-my-custom-attribute="yellow"] {
  background-color: yellow;
}

[data-my-custom-attribute="blue"] {
  background-color: blue;
}

[data-my-custom-attribute="␀"] {
  border-radius: 0;
  background-color: black;
}

[data-my-custom-attribute]:not([data-my-custom-attribute="␀"]) {
  border-radius: 50%;
}
html lang-html prettyprint-override"><div data-my-custom-attribute="red"></div>
<div data-my-custom-attribute="yellow"></div>
<div data-my-custom-attribute="blue"></div>
<div data-my-custom-attribute="␀"></div>

<div class="rectangle"></div>

null

然而,

[data-my-custom-attribute]:not([data-my-custom-attribute="␀"])

感觉又尴尬又冗长。真的没有更好的了吗?

共有1个答案

巩子实
2023-03-14

不幸的是,没有更简洁的方法了。即使是jQuery的[att!=val]选择器(这些年来一直是jQuery独有的)也不要求属性匹配,所以您仍然需要将其与[att]配对。

我知道这是对底部值概念的实验,但为了完整性起见,我要补充一点,在HTML(以及扩展到CSS)中,最接近空属性值的东西要么是空字符串(自定义数据属性的默认值),要么是完全缺少该属性。实现所需结果的惯用方法是选择空字符串或完全省略属性,并在CSS中分别使用相应的[data-my-custom-attribute=“”]:not([data-my-custom-attribute])选择器,在JS中分别使用if(myCustomAttribute===“”)if(myDiv.dataset)===false)

 类似资料:
  • 问题内容: 做这样的事情的语法是什么: 基本上,我想选择具有属性和属性的元素: 元件如以下应该 没有 被选择: 问题答案: 简单会很好。它实际上在标准文档中有很好的描述: 可以使用多个属性选择器来引用元素的多个属性,甚至可以多次引用同一属性。 在此,选择器匹配所有SPAN元素,这些元素的“ hello”属性的值恰好为“ Cleveland”,而其“再见”属性的值恰好为“ Columbus”: 附带

  • 具有特定属性的HTML元素样式 具有特定属性的HTML元素样式不仅仅是class和id。 注意:IE7和IE8需声明!DOCTYPE才支持属性选择器!IE6和更低的版本不支持属性选择器。 属性选择器 下面的例子是把包含标题(title)的所有元素变为蓝色:[title] { color:blue; } 属性和值选择器 下面的实例改变了标题title='runoob'元素的边框样式:[title=r

  • 问题内容: 是否可以通过CSS5的HTML5数据属性(例如)来选择元素? 问题答案: 如果您想使用属性选择器,请确定为什么: 我可以链接到文档中介绍各种可用于各种场景的属性选择器。请注意,尽管自定义数据属性是“新的HTML5功能”, 浏览器通常在支持非标准属性方面没有任何问题,因此您应该能够使用属性选择器对其进行过滤;和 您也不必担心CSS验证,因为CSS不在乎非命名空间的属性名称,只要它们不破坏

  • 我正在尝试选择一些不在我的中的属性。这可能吗? 如何从中获取CatId和持久属性? 如果我将它们添加到组中,就像,那么我的结果就会混乱。 我可以使用获得其他属性,如,但这些属性不是计算值。 数据示例: 希望将结果按如下方式分组:

  • 我有这个密码 此代码显示所有类别。我有 如何使ifadd attribute selected to select(在映射函数中)

  • 问题内容: 我需要在CSS中使用属性选择器来更改不同颜色和图像上的链接,但是它不起作用。 我有这个HTML: 而这个CSS: 为什么背景不是红色的? 问题答案: 在href后面使用$。这将使属性值匹配字符串的结尾。