多个类可以使用逗号分配给元素吗?

问题描述:

我刚刚在一个网站上讨论这个问题,即时通讯工作..它的东西之前没有见过,无法在任何地方找到任何解释,所以希望有人能解释。多个类可以使用逗号分配给元素吗?

所以我特地翻过了在下面的格式标记有2班的元素:

<div class = "class1, class2"></div> 

我从来没有见过分配给元素像这样多个类..它看起来像一个选择对我来说..我希望他们能够加入这样的:(无逗号)

<div class = "class1 class2"></div> 

这是有效的CSS刚才我从来没有遇到翻过还是我刚刚发现在页面上稍显怪异的错误?

+0

没有错误。 **第二选项**是有效的,它总是这样做的。 – nicael

+0

对不起,你的意思是添加这样的选择器

有效吗? – Ash
+0

“必须具有一个值,该值是由代表该元素所属的各种类的**空格分隔**标记组成的”http://www.w3.org/TR/html5/dom.html#classes –

根据规格,第一个是无效:

类= CDATA列表[CS]该属性分配一个类名称或一组 类名的元素。任何数量的元素都可以被分配到相同的类名或名称 。 多个类名称必须用 空格字符分隔。

第二个是有效的。

参考

class attribute

的例子是不正确的语法。可接受的标记应该如下

<div class = "class1 class2"></div> 

现在逗号分隔是在样式表

.class1, class2 { 
    some styling 
} 

可接受但是,这是用于处理类比显示的示例完全不同。

我想补充的额外信息一点点比迄今为止其他答案:

  1. 正确的语法(每个人都在说)是第二 - 用空格分开。
  2. 如果您使用第一个(以逗号分隔),那么后面紧跟逗号的类将不会应用,但其他任何类将会使用。例如:

<div class="class1, class2">

适用类2只到div。

<div class="class1 class2,">

适用class1的唯一

<div class="class1 , class2">

成功申请两个类

<div class="class1,class2">

负载既不

请注意,此延伸超过两个类:class="class1 class2, class3"适用的Class1和CLASS3,例如。

它发现您尝试添加的任何类名包含无效或未转义的特殊字符(请参阅Herehere)将不会加载,但不会阻止其他有效的类名加载。因为类是空格分隔的,所以DOM将"class1, class2"解释为两个类class1,class2,并且确定class1,无效,因为,是CSS中的特殊字符。

您可以使用data- *属性将类分配给用逗号分隔的任何元素,然后使用一些JavaScript自动指定删除逗号的类。从技术上讲,你存储在数据类属性(假设)中的类是一个整体字符串。你抓住该字符串使用字符串的split方法来存储从n-between中移除逗号的类名,并运行for循环来将值赋予rea类的'class'属性。

这里的剧本我coded-

//helper function which returns all the elements matching the selector passed as the argument 
function $$(selector) { 
    var elements= document.querySelectorAll(selector); 
    return [].slice.call(elements); 
} 

//select all elements having [data-classes] attribute and the do the stuff 
$$("[data-classes]").forEach(function(el) { 
    var dataClasses= el.getAttribute("data-classes"); 
    var classes= dataClasses.split(","); 

    for(var i=0; i<classes.length; i++) { 
    el.classList.add(classes[i]); 
    } 
}); 

现在,你可以不喜欢这个 -

<button data-classes="button,button-large,button-fancy">You Button</button> 

(包括逗号/类名之间没有空格)

注意:确保该脚本包含在<head>中的所有内容的顶部,以便它在加载页面时运行的第一件事情,即使在所有CSS之前文件。