当前位置: 首页 > 面试题库 >

为什么在CSS选择器/ HTML属性中首选使用破折号?

逄烨
2023-03-14
问题内容

过去,我一直使用下划线在HTML中定义 id 属性。在过去的几年中,我改用破折号,主要是为了使自己适应社区中的趋势,而不一定是因为这对我来说很有意义。

我一直认为破折号有更多弊端,但我看不出这样做的好处:

代码完成和编辑

大多数编辑器都将破折号视为单词分隔符,因此我无法浏览所需的符号。假设课程为“ featured-product”,我必须自动完成“
featured”,输入连字符,然后完成“ product”。

带下划线的“ featured_product”被视为一个单词,因此可以一步完成。

这同样适用于浏览文档。单词跳动或双击类名会被连字符打断。

(更一般而言,我将类和id视为 令牌 ,因此对令牌而言,令牌应该很容易拆分对我来说没有任何意义。)

算术运算符的歧义

使用破折号会中断对象属性对JavaScript中表单元素的访问。只有下划线才有可能:

form.first_name.value='Stormageddon';

(不可否认,我本人不是以这种方式访问​​表单元素的,但是在将破折号和下划线作为通用规则时,请考虑可能有人使用。框架中)已经以破折号作为标准,甚至对于变量名也是如此。他们最初也使用下划线。这被不同地解析的事实令我感到奇怪:

$list-item-10
$list-item - 10

与跨语言的变量命名不一致

以前,我曾经用underscored_namesPHP,ruby,HTML / CSS和JavaScript
编写变量。这是方便且一致的,但是再次为了“适合”我现在使用:

  • dash-case 在HTML / CSS中
  • camelCase 在JavaScript中
  • underscore_case 在PHP和ruby中

这实际上并没有给我带来太大的困扰,但是我想知道为什么它们似乎如此故意地错位了。至少使用下划线可以保持一致性

var featured_product = $('#featured_product'); // instead of
var featuredProduct = $('#featured-product');

所以我问:为什么社区几乎普遍使用破折号,并且有什么理由超过下划线?

在开始时有一个相关的问题,但我认为这不是(或 不应该
)只是一个品味问题。我想了解一下,如果确实只是出于口味问题,为什么我们都同意这个约定。


问题答案:

代码完成

我猜破折号是解释为标点符号还是不透明标识符取决于选择的编辑器。但是,根据个人喜好,我更喜欢能够在CSS文件中的每个单词之间切换,并且如果它们之间用下划线分隔并且没有停顿的话,会很烦人。

另外,使用连字符允许您利用| =属性选择器,该选择器选择包含文本的任何元素,并可以选择后面跟一个破折号:

span[class|="em"] { font-style: italic; }

这将使以下HTML元素具有斜体字体样式:

<span class="em">I'm italic</span>
<span class="em-strong">I'm italic too</span>

算术运算符的歧义

我想说的是,通过JavaScript中的点符号访问HTML元素是一个错误而不是功能。这是从可怕的JavaScript实现的早期开始就构成的可怕结构,实际上并不是一个好习惯。对于如今使用JavaScript所做的大多数事情,无论如何,您都想使用[CSS选择器从DOM中获取元素,这使得整个点符号变得毫无用处。您想要哪一个?

var firstName = $('#first-name');
var firstName = document.querySelector('#first-name');
var firstName = document.forms[0].first_name;

我发现前两个选项更为可取,尤其是因为'#first-name'可以将其替换为JavaScript变量并动态构建。我还发现它们在眼睛上更令人愉快。

Sass在其对CSS的扩展中启用算术的事实并不真正适用于CSS本身,但我确实理解(并接受)Sass遵循CSS的语言样式($变量的前缀除外,这一事实当然应该一直@)。如果Sass文档的外观和感觉像CSS文档,则它们需要遵循与CSS相同的样式,即使用破折号作为分隔符。在CSS3中,算术仅限于该calc函数,这表明在CSS本身中,这不是问题。

与跨语言的变量命名不一致

所有语言(作为标记语言,编程语言,样式语言或脚本语言)都有自己的样式。您可以在XML之类的语言组的子语言中找到它,例如XSLT使用带连字符分隔符的小写字母,而XMLSchema使用驼峰式。

通常,您会发现,采用一种感觉和外观对您正在编写的语言最“原生”的样式比尝试将自己的样式塞入每种不同的语言要好。由于无法避免使用本机库和语言构造,因此无论您是否喜欢,您的样式都会被本机样式“污染”,因此即使尝试也不用。

我的建议是不要在所有语言中找到喜欢的样式,而要使自己在每种语言中都处于家中,并学会热爱它的所有怪癖。CSS的一个怪癖是关键字和标识符以小写形式并由连字符分隔。就个人而言,我觉得这在视觉上非常吸引人,并认为它与全小写(尽管没有连字符)的HTML都适合。



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

  • 问题内容: 我找到了一个响应式电子邮件模板的示例,其中有诸如此类的CSS选择器: 如果与以下内容完全相同,为什么要使用此语法: 它对移动浏览器或其他任何影响吗? 问题答案: 该语法是属性选择。 这将选择带有的任何标签。但是,它 不会选择具有的(例如。它仅与_ 该属性完全匹配。 您可能需要阅读必须记住的30个CSS选择器。对于任何有前途的Web开发人员来说,这都是无价之宝。

  • 问题内容: 我找到了这个CSS代码,然后运行它来查看其功能,并在页面上概述了每个元素, 有人可以解释一下Asterisk *在CSS中的作用吗? 问题答案: 这是一个通配符,这意味着它将选择DOM中该部分内的所有元素。 例如,如果我要对整个页面上的每个元素应用边距,则可以使用: 您还可以在子选择中使用它,例如,以下内容将为段落标记内的所有元素添加边距: 您的示例正在做一些CSS欺骗,将连续的边框和

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

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

  • 问题内容: 实际上可以从网站开发中完全避免使用类。 我的问题是,与类选择器相比,数据选择器的效率如何? 一个简单的示例是比较对带有的元素与vs与的元素的查询。 该选择将检查值作为一个整体对String类应该被拆分。考虑到这一点,数据属性应该更快。 因此,为解决问题,在CSS的情况下,我们最好使用类选择器还是数据选择器?并且从javascript的角度来看,它会比?更有效。 问题答案: 我不会说这是