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

2023-11-29

过去我总是使用下划线来定义class and idHTML 中的属性。在过去的几年里,我改用破折号,主要是为了使自己与社区趋势,不一定是因为它对我有意义。

我一直认为破折号有更多的缺点,但我没有看到它的好处:

代码完成和编辑

大多数编辑器将破折号视为单词分隔符,因此我无法通过 Tab 键切换到所需的符号。说班级是“featured-product“,我必须自动完成”featured",输入连字符,然后完成 "product".

带下划线“featured_product" 被视为一个单词,因此可以一步填写。

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

(更一般地说,我认为类和 id 是tokens,所以对我来说,令牌应该如此容易地在连字符上分割是没有意义的。)

算术运算符的歧义

使用破折号会破坏对象属性访问表单元素在 JavaScript 中。这只能使用下划线:

form.first_name.value='Stormageddon';

(诚​​然,我自己不会以这种方式访问​​表单元素,但在决定将破折号与下划线作为通用规则时,请考虑有人可能会这样做。)

像这样的语言Sass(特别是在整个Compass框架)已决定将破折号作为标准,即使对于变量名称也是如此。他们最初也在开始时使用下划线。事实上,它的解析方式不同让我觉得很奇怪:

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

跨语言变量命名不一致

以前,我曾经写过underscored_names用于 PHP、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使用小写字母和连字符分隔符并且XML模式使用骆驼肠衣。

一般来说,您会发现采用感觉和看起来最适合您所使用的语言的风格比尝试将自己的风格硬塞到每种不同的语言中要好。由于您无法避免使用本机库和语言构造,因此无论您是否喜欢,您的风格都会被本机风格“污染”,因此尝试几乎是徒劳的。

我的建议是不要跨语言寻找最喜欢的风格,而是让自己熟悉每种语言并学会喜欢它的所有怪癖。 CSS 的怪癖之一是关键字和标识符以小写形式书写并用连字符分隔。就我个人而言,我发现这在视觉上非常吸引人,并且认为它适合全小写(尽管没有连字符)HTML.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 CSS 选择器/HTML 属性首选破折号? 的相关文章

  • 为什么在 HTML 中使用 onClick() 是一种不好的做法?

    我多次听说使用 JavaScript 事件 例如onClick 在 HTML 中是一种不好的做法 因为它不利于语义 我想知道以下代码有什么缺点以及如何修复 a href link a 你可能正在谈论不引人注目的 JavaScript htt
  • 在 IE 8 及以下版本中动态添加 @font-face 规则

    我使用 IE stylesheet addRule 方法添加 font face 规则 但是 符号对于该方法的 选择器 参数来说是不允许的字符 因此我收到 无效参数 错误 s addrule font face font family Fo
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • 如何使用 javascript 或 jquery 生成 CSS 路径?

    关于如何生成元素的 CSS 路径有什么建议吗 CSS 路径是识别特定元素所需的 css 选择器的路径 例如 如果我的 html 是 div div class bar ul li 1 li li 2 li li span class sel
  • 从 Bootstrap 中删除字形

    如何从 bootstrap 3 中删除所有字形实例 看起来它已经大量嵌入到 css 文件中了 我正在努力使文件大小尽可能最小 只需简单地克隆引导程序https github com twbs bootstrap sass https git
  • 按下按钮时应用不同的样式

    有没有办法在按下按钮时将样式应用于按钮 如果我有一种风格样式 xml
  • 在 javascript/jquery 中将光标更改为等待

    当调用函数时 如何让光标更改为此加载图标以及如何将其更改回 javascript jquery 中的普通光标 在你的 jQuery 中使用 body css cursor progress 然后又恢复正常 body css cursor d
  • CSS 中的像素与像素密度

    我对 HTML 和 CSS 非常陌生 我突然想到 当决定某个东西是 5px 时 比如说 由于像素的物理尺寸取决于密度 所以 5px 在 100 ppi 的屏幕上看起来肯定比在 300 ppi 的屏幕上看起来更大ppi 这是正确的吗 如果是
  • 垂直对齐复选框标签? [复制]

    这个问题在这里已经有答案了 我有这样的复选框
  • 每 3 秒重复一次动画

    我正在使用 WOW js 和 animate css 现在我正在将 CSS 运行到 Infinite 我想知道如何让我的课程运行 3 秒停止并再次开始到无限 My html img src images fork png class for
  • 禁用引导列上的滚动

    我正在尝试禁用引导列上的滚动 这是我的代码 div class container fluid h 100 div class row h 100 div class col 4 h 100 bg dark fixed div div cl
  • 在 iPhone 3GS 与 iPhone 4 上为 Mobile Safari 嵌入 HTML5 视频

    我在服务器上的 mp4 文件中有 H 264 AAC 编码的视频 mime 类型的视频 mp4 添加到 Web 服务器 IIS 7 并且我有一个带有视频标签的页面
  • 使用 JavaScript 使链接保持活动状态并在单击时显示悬停效果

    I am struggling to make this work I d like to make it where if O F is clicked the hover state stays active if another li
  • 如何设置菜单按钮和菜单项的样式

    我尝试更改菜单按钮中的样式 我可以更改菜单按钮样式 但不能更改其菜单项 无论我尝试什么 菜单按钮内的菜单项都保持不变 menu button fx background color black menu button label fx ba
  • HTML 中部分着色的阿拉伯语单词

    我不会说阿拉伯语 但我需要我们网站上对阿拉伯语的具体支持 我需要将部分阿拉伯语单词放在 span 与单词其他部分的风格不同 当我输入两个字符时 and 它们被组合成word 但是当我使用 HTML 标记时 span span 这些字母在输出
  • 现在 CSS3 供应商前缀有多必要? [复制]

    这个问题在这里已经有答案了 我只是想知道现在在 CSS 中指定 webkit moz ms 或 o 等供应商前缀在多大程度上仍然有必要 如果我理解正确的话 opera 切换到了 webkit 所以会删除 o 对吗 IE 在 IE10 中不再
  • 避免响应式页面的重复内容

    我目前正在做一个涉及响应式设计的项目 整个布局应该使用HTML和CSS来实现 我知道可以使用 java 脚本将内容从一个列布局移动到另一列布局 而无需复制内容 但是使用 HTML 和 CSS 是否可以实现相同的效果 以下面的例子为例 它会在
  • 我可以使用 jQuery 打开下拉列表吗

    对于 HTML 中的下拉列表
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • CSS 是否有不等于选择器?

    CSS中有类似 不等于 的东西吗 例如 我有以下代码 input 但对于某些输入 我需要将其作废 我想通过将类 reset 添加到输入标签来做到这一点 例如

随机推荐

  • 替换 snprintf(3) 的 C++ 习惯用法是什么?

    我有一些 C 代码 在解析某个文件头失败时需要生成错误消息 在这种情况下 我需要确保标头中的某个 4 字节字段是 OggS 如果不是 则返回一条错误消息 例如 invalid capture pattern FooB waiting Ogg
  • jQuery: text() 和 html() 之间有什么区别?

    jQuery 中的 text 和 html 函数有什么区别 div html a href example html Link a b hello b vs div text a href example html Link a b hel
  • 转换unicode

    我有一个UITextField输入一个unicode值 当我点击UIButton需要将其转换并显示在UILabel 下面的代码对我来说工作正常 我的代码中的unicode NSString str NSString stringWithUT
  • 范围解析运算符和常量

    我们来看下面的代码 include
  • 类型擦除类型擦除,“有什么”问题吗?

    所以 假设我想使用类型擦除来键入擦除 我可以为变体创建伪方法 以实现自然的 pseudo method print auto self auto os os lt lt self std variant
  • 删除多维数组

    在 C FAQ 中 16 16 给出了以下示例 void manipulateArray unsigned nrows unsigned ncols typedef Fred FredPtr FredPtr matrix new FredP
  • MVC3 和 Code First 迁移 - “自数据库创建以来,支持‘blah’上下文的模型已发生变化”

    我使用 Entity Framework Code First 开始我的项目 当我准备好后 我将数据库和代码上传到我的主机提供商 一切顺利 我需要向我的一个类添加一个新字段 并且我不想丢失数据库中的数据 因此 我尝试关注一些有关使用 Cod
  • 如何使用 jQuery 更改元素的同级文本而不更改 html?

    我试图仅替换文本 但不触及任何其他标签 p a href login php i class fa fa sign in i Login a p p each function this text this text replace Log
  • 无法使用 MRTK v2.0.0-RC1 进行构建

    我曾尝试在 Unity 2018 3 10f1 上构建新 MRTK 版本 2 0 0 RC1 的场景示例 但每次每个示例都会出现构建错误 其中显示 找不到类型或命名空间名称 HandJointKind 您是否缺少 using 指令或程序集引
  • 在Python中,我可以调用导入模块的main()吗?

    在Python中我有一个modulemyModule py 我在其中定义了一些函数和一个main 它需要一些命令行参数 我通常从 bash 脚本中调用这个 main 现在 我想把一切都放进一个小package 所以我想也许我可以将我的简单b
  • 日期时间到数字以及向后转换

    R 中的日期 时间我有这个日期 2016 10 29 15 00 00 我想将其转换为数字并向后转换为我的相同日期和时间 我用它来将其转换为数字 as numeric as POSIXct 2016 10 29 15 00 00 我怎样才能
  • 如何在pyspark中使用多行选项将数据帧保存到json文件中

    在 Pyspark 中 我想将数据帧保存为 json 文件 但格式如下 说这是我的数据框 gt gt gt rdd1 show f1 f2 AAAAAAAAAA 99999 BBBBBBBBB 99999 CCCCCCCCC 99999 如
  • 在 FirebaseDatabase.getReference() 中获取 NPE

    我在应用程序启动时在生产版本中获得 NPE 并且在使用 adb 重新安装后仅获得一次 NPE Caused by java lang NullPointerException Attempt to invoke interface meth
  • 使用 DecorlatedJitterBackoff 的最大重试次数

    我正在使用 polly DecorlatedJitterBackoff 策略来重试 http 请求 我的用例是 当 timeSpan 达到 300 秒时 它应该每 300 秒重试 int maximum 次数 我正在尝试使用以下代码来实现此
  • 将 JPanel 中的 JLabel 定位在图像下方

    我想将给定示例中的文本移动到图像和形状下方 请帮我做一下 package test import java awt BasicStroke import java awt Graphics import java awt Graphics2
  • RestSharp 身份验证器遵循 302 重定向

    我正在尝试使用 RestSharp 向 API 发出请求 通过将请求重定向到登录服务器 使用基本凭据进行身份验证 获取 cookie 然后重定向回 API 来保护此 API 恐怕我无法控制这个 所以请求的顺序是 Request Respon
  • Swift:使用 WKWebView 的 createPdf 创建 pdf

    Edit 在找到问题 2 的解决方案后 并且给人的印象是问题 1 没有简单的 开箱即用的解决方案 我决定关闭这个问题 而专门针对分页问题创建另一个问题 我有两个问题WKWebViews createPDF configuration com
  • Threejs 拖动点

    我必须生成大量可以单独拖动的对象 此外 这些物体仅限于平面形状 例如矩形或圆形 起初 我使用简单的 CircleGeometries 将其放置在另一个几何图形 平面 内 拖动它们也很容易 但正如预期的那样 大约 200000 个它们的性能非
  • VSTS Microsoft 托管代理:虚拟机大小

    根据https github com MicrosoftDocs vsts docs blob master docs pipelines agents hosted mdMicrosoft 托管代理的虚拟机大小为 目前使用 Microso
  • 为什么 CSS 选择器/HTML 属性首选破折号?

    过去我总是使用下划线来定义class and idHTML 中的属性 在过去的几年里 我改用破折号 主要是为了使自己与社区趋势 不一定是因为它对我有意义 我一直认为破折号有更多的缺点 但我没有看到它的好处 代码完成和编辑 大多数编辑器将破折