为什么 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 属性首选破折号? 的相关文章

  • php中的条件格式化html表与时间戳比较

    echo table style width 100 tr echo td Order td echo td Destination td echo td Location td echo td Status td echo td Time
  • 对一组复选框使用 HTML5“必需”属性?

    使用支持 HTML5 的较新浏览器 例如 FireFox 4 时 并且表单字段具有属性required required 并且表单字段为空 空白 然后点击提交按钮 浏览器检测到 必填 字段为空 并且不提交表单 相反 浏览器会显示一条提示 要
  • 使用deployJava.runApplet来定位特定元素

    经过多年成功维护一个使用旧有的小程序 嵌入Java小程序的方法 我们无法捂住耳朵唱 啦啦啦 不再了 是时候使用 deployJava runApplet 当我使用点击处理程序触发此方法时 此处通过 jQuery 在按钮上使用事件侦听器 但这
  • 使用 CSS 自定义字体?

    我见过一些在其网站上使用自定义字体的新网站 除了常规的 Arial Tahoma 等 他们支持大量的浏览器 如何做到这一点 同时 如果可能的话 还会阻止人们免费下载该字体 一般来说 您可以使用自定义字体 font face在你的 CSS 中
  • CSS设置默认滚动位置

    有没有办法将滚动位置设置为默认值 我知道如何在 javascript 中做到这一点 例如使用 jquery div divWithScroll attr scrollTop 200 但我只想用CSS来做 我不知道是否可行 不 CSS 中没有
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • 来自 JSON 的 Angular 8 动态表单

    我正在尝试从 JSON 模式递归生成动态表单 但我正在努力解决找不到表单控件的问题 这是代码示例 我收到这个错误 错误错误 找不到名称为 createdAt 的控件 我尝试了不同的方法 但仍然存在问题 我知道我错过了一些东西 所以请帮忙 任
  • 在网页上的文本框中键入内容时删除所有空格

    我如何在用户打字时即时删除输入到文本框中的空格 function var txt myTextbox var func function txt val txt val replace s g txt keyup func blur fun
  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • 防止浮动换行,直到元素达到最小宽度

    我有可变宽度的 HTML 布局 内容左侧有一个固定宽度的菜单 div 可变宽度 由 css max width 和 min width 设置 对于非常窄的浏览器窗口 我希望内容包裹在菜单下方 我目前通过设置来实现这一点float left在
  • 动画进度元素值

    我有一个progress元素 该元素如下所示 div class container div div div
  • 如何将此 HTML 表格布局解决方案转换为浮动 div 解决方案?

    我经常需要列出各种尺寸的项目images在左边和text在右边 像这样 替代文本 http www deviantsart com upload 7s01l5 png http www deviantsart com upload 7s01
  • 如何使用canvas.toDataURL()将画布保存为图像?

    我目前正在构建一个 HTML5 Web 应用程序 Phonegap 本机应用程序 我似乎不知道如何将画布保存为图像canvas toDataURL 有人可以帮我吗 这是代码 有什么问题吗 我的画布被命名为 canvasSignature J
  • HTML2canvas 和 Canvas2image,下载的屏幕截图不显示我的 HTML 图像

    我一直在开发一个 HTML 页面 我想将其转换为图像 我一直在使用 html2canvas 和 canvas2image 脚本并采用此代码http jsfiddle net 8ypxW 3 http jsfiddle net 8ypxW 3
  • 如何通过php获取网页的Open Graph协议?

    PHP 有一个简单的命令来获取网页的元标记 get meta tags 但这仅适用于具有名称属性的元标记 然而 开放图谱协议如今变得越来越流行 从网页获取 opg 值的最简单方法是什么 例如 我看到的基本方法是通过 cURL 获取页面并使用
  • iOS7 中“-webkit-overflow-scrolling: touch” 最初的屏幕外元素被破坏

    既然转基因种子已经发布了 我们现在可以谈谈了 看起来 iOS7 中的 webkit overflow scrolling touch 已损坏 最初不在屏幕上的元素的触摸事件不会触发 或者在某些情况下只是不可靠 这是一个例子
  • JavaScript 中数组的 HTML 数据列表值

    我有一个简单的程序 它必须从服务器上的文本文件中获取值 然后将数据列表填充为输入文本字段中的选择 为此 我想要采取的第一步是我想知道如何动态地将 JavaScript 数组用作数据列表选项 我的代码是
  • 在d3.js中将2D形状转换为3D,并根据ANGULAR中的值调整高度

    我正在使用 d3 js v6 创建以下 2D 图表表示的 3D 图表 这个圆圈中有多个正方形 每个正方形都根据值分配了一种颜色 值越大 正方形越暗 现在我想将其转换为 3D 形状 其中当值变高时 只有特定正方形的高度会增加 因此结果在某种程
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we

随机推荐

  • 替换 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 中的属性 在过去的几年里 我改用破折号 主要是为了使自己与社区趋势 不一定是因为它对我有意义 我一直认为破折号有更多的缺点 但我没有看到它的好处 代码完成和编辑 大多数编辑器将破折