”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 我如何编写 CSS 选择器

我如何编写 CSS 选择器

发布于2024-11-06
浏览:275

How I write CSS selectors

有很多 CSS 方法,但我讨厌它们。有些多(顺风等),有些少(BEM、OOCSS 等)。但归根结底,它们都有缺陷。

当然,人们使用这些方法有充分的理由,并且解决的许多问题我也遇到过。因此,在这篇文章中,我想写下我自己的关于如何保持 CSS 组织的指南。

这不是一个任何人都可以开始使用的完整描述的 CSS 方法。也许它可以通过一些额外的工作变成一个,但这篇文章的目的只是展示我在编写 CSS 时如何做出这些决定。

内置元素

根据经验,我尝试尽可能多地使用内置元素类型,并尽可能少地使用额外的内容。

需要上千种不同类型的按钮,这表明设计可能在更深层次上存在问题,因此,虽然在某些情况下,我觉得 CSS 是惰性的,直到使用特定于框架的类为止。 ,在大多数情况下,当按钮只是 并且看起来像一个没有任何进一步魔法的按钮时,我认为它是理想的。

div.btton 应该变成按钮

自定义元素

并非所有设计元素都具有语义上合适的 HTML 等效项,对于这些情况,我通常采用自定义元素。

我还没有看到很多在没有任何附带 javascript 的情况下使用自定义元素名称的实例,但它已被证明是编写清晰的 HTML 的一个令人惊讶的可靠选择,而且看起来也符合我想要的方式。

随着时间的推移,在设计方面完全独立的元素也更有可能开发出只能使用 JavaScript 实现的需求,这为您提供了一条清晰的路径来实现那些不需要对 HTML 进行任何更改也不需要进行任何更改的需求。 CSS。

div.vsep 应该变成垂直分隔符

课程

类应该充当现有节点名称的修饰符,而不是全新的元素类型,并且通常对不同的元素类型具有相似但不同的效果。

危险按钮是按钮。危险

属性

修改元素的某些方法并不是类有用的简单开/关开关,而是更像键值对。

在这些情况下,具有匹配选择器的自定义属性几乎每次使用它们时都被证明是最佳选择。与带连字符的类不同,它们在语法级别上显示哪个是属性,哪个是值,使编辑器更容易突出显示它们,更容易人眼快速解析,并且更容易使用 JavaScript 进行交互。

对于我们这些仍然希望 attr() 函数有一天能够进入 CSS 的人来说,这不仅仅是内容,这也是面向未来的额外一层。

ID

根据定义,ID 在文档中是唯一的。因此,任何针对特定 ID 的规则都将受到限制,并且如果后来发现lage 上应该存在多个这种类型的元素,则可能需要重构。

因此,应谨慎使用 ID,并且只有在一个文档中包含多个元素没有意义时才应使用 ID。

在实用性和可读性方面相对于类的好处相当小,因此当无法识别元素和样式之间明确的一对一关系时,选择类通常是最好的主意。

内联CSS

任何现实世界的应用程序在某些时候都会有一些元素,只需要单独调整,以使它们在出现的上下文中更加美观。

在这些情况下,样式属性是正确的选择。任何使用它被认为是不好的做法的原因都适用于任何类型的内联样式,包括实用程序类。问题不在于属性,而在于混合样式和标记。

内联样式的样式和类之间的一个区别是,一个表示目的,允许使用纯 CSS 并且大多是通用的,而另一个则不然。

简单地说,width: 100px 具有普遍定义的含义,而 .width-100 可以表示任何含义。

实用程序类

在极少数情况下,特定于元素的样式变得如此复杂,以至于显式内联它们会损害可读性,甚至是不可能的(例如,如果它需要媒体查询)。

在这些情况下,实用程序类基本上是唯一的选择,即使它们很丑陋。

在理想的世界中,这些可以与特定的 mixin 类分开处理,我什至考虑过使用前缀来更容易地区分它们,但最终没有找到一个好的方法来使它们不难看。

我喜欢在实用程序类前面加上 a 前缀来表示它们向元素添加某种功能,与普通类相反,它指定元素的类型。


就是这样。当然,没有两个项目是相同的,有时必须稍微调整规则才能保持实用,但总的来说,这是我决定如何使屏幕上的事物看起来某种方式的框架。

你有什么想法?你讨厌它吗?你觉得有道理吗?在评论中让我知道吗?

版本声明 本文转载于:https://dev.to/darkwiiplayer/how-i-write-css-selectors-kfd?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • SAML、OAuth 与 OpenID Connect
    SAML、OAuth 与 OpenID Connect
    这篇文章最初发布在我的博客上。使用以下链接查看原始来源: SAML、OAuth 与 OpenID Connect ...
    编程 发布于2024-11-06
  • 在空数据集上使用 MySQL 的 SUM 函数时如何返回“0”而不是 NULL?
    在空数据集上使用 MySQL 的 SUM 函数时如何返回“0”而不是 NULL?
    当不存在任何值时如何从 MySQL 的 SUM 函数中检索“0”MySQL 中的 SUM 函数提供了一种方便的方法来聚合数值价值观。但是,当查询期间没有找到匹配的行时,SUM 函数通常返回 NULL 值。对于某些用例,可能更希望返回“0”而不是 NULL。利用 COALESCE 解决问题此问题的解决...
    编程 发布于2024-11-06
  • 免费接龙
    免费接龙
    很久以前,在同一个星系中,我开始尝试制作 Freecell,作为学习 Angular 1.3 的一种方式。 我已经走了这么远,然后我就被其他事情分散了注意力,就像副项目一样。 我最近有一些空闲时间(我知道,我也没想到),所以我想我应该再试一次。 我基本上是从头开始,因为我对 Angular 1.3 ...
    编程 发布于2024-11-06
  • 为什么 PHP 中的函数调用不能使用属性默认值?
    为什么 PHP 中的函数调用不能使用属性默认值?
    无法在 PHP 属性默认值中调用函数[问题]尽管有编程经验,但新手PHP 中的属性默认错误令我困惑。代码:class Foo { public $path = array( realpath(".") ); }产生语法错误。但是,以下内容可以无缝运...
    编程 发布于2024-11-06
  • 弃用 `ereg_replace` 后,如何将多个空格替换为单个空格?
    弃用 `ereg_replace` 后,如何将多个空格替换为单个空格?
    用单个空格替换多个空格:弃用 ereg_replace虽然使用 ereg_replace 用单个空格替换多个空格可能看起来很简单,但它已被弃用。因此,您在尝试使用它时可能会遇到错误。本文提出了一种替代解决方案。迁移到 preg_replace()要替换 ereg_replace,请切换到 preg_...
    编程 发布于2024-11-06
  • 如何开始自由职业?
    如何开始自由职业?
    您是否正在努力通过 Upwork 赚钱?别担心!我曾经去过那里,我来这里是为了分享我将这些挣扎转化为成功的旅程。凭借奉献精神和正确的方法,您可以开始在 Upwork 上赚钱,并打开通往一系列机会的大门。让我们深入探讨最大化您的收入潜力的关键步骤。 掌握技巧游戏 在 Upwork 上取...
    编程 发布于2024-11-06
  • 如何将 8 个字符作为打包单精度浮点数加载到 __m256 变量中?
    如何将 8 个字符作为打包单精度浮点数加载到 __m256 变量中?
    将 8 个字符从内存加载到 __m256 变量中作为打包单精度浮点数为了优化高斯模糊算法,您寻求用 __m256 内在变量替换浮点缓冲区的使用。本问题旨在确定此任务的最佳指令。AVX2 架构说明:利用 PMOVZX 将字符零扩展为 32 位256b 寄存器中的整数。使用 VCVTDQ2PS 就地转换...
    编程 发布于2024-11-06
  • 如何在Python中查找字符串中子字符串的第n次出现?
    如何在Python中查找字符串中子字符串的第n次出现?
    查找字符串中某个子字符串第 n 次出现识别某个子字符串第 n 次出现对应的索引为各种编程场景中经常出现的任务。在Python中,没有专门为此目的而设计的内置函数。但是,可以采用多种方法来实现此结果。一种简单的方法是使用循环来迭代字符串并计算子字符串的出现次数。起始索引被初始化为第一次出现的结果,循环...
    编程 发布于2024-11-06
  • 编程语言解释
    编程语言解释
    ? 注意:缩略图是使用生成的 ComfyUI 帮助下的 Flux Schnell 模型; 本文是在 NI - 自然智能 的帮助下撰写的 ? 没有时间阅读? - 观看我们创建的视频: 集会 ? 最初所有程序都是用二进制编写的 - 所谓的汇编 编程语言。你从字面上指示CPU在内做什么 ...
    编程 发布于2024-11-06
  • Go Context — TODO() 与 Background() 不再令人困惑!
    Go Context — TODO() 与 Background() 不再令人困惑!
    在 Go 中,上下文包有助于管理请求范围的值、取消信号和截止日期。 启动上下文的两种常见方法是 context.TODO() 和 context.Background()。 尽管它们的行为相似,但它们的目的不同。 上下文.背景() 当您不需要任何特殊处理(例如取消或截止日期)...
    编程 发布于2024-11-06
  • 如何检测 CMake 中的 C++11 编译器支持?
    如何检测 CMake 中的 C++11 编译器支持?
    CMake 中 C 11 编译器支持的检测概述在本指南中,我们探索自动检测编译器是否支持 C 11 的方法CMake,提供对最新和以前 CMake 版本的全面分析。CMake 3.1.0 及更高版本CMake 3.1.0 版本引入了一个强大的功能:检测编译器。这是通过 cmake_minimum_r...
    编程 发布于2024-11-06
  • 基于属性的测试:深入探讨现代测试方法
    基于属性的测试:深入探讨现代测试方法
    基于属性的测试是一种强大的测试方法,它侧重于软件的属性或特征,而不是特定的输入输出情况。与手动定义特定测试用例的传统测试不同,基于属性的测试会自动生成各种输入来验证某些属性是否始终成立。这种方法可以更广泛地探索潜在场景,使其成为发现隐藏错误并确保稳健的软件行为的有效方法。 测试方法的演变 从传统的...
    编程 发布于2024-11-06
  • 为开发人员和安全团队提供主动的 AppSec 持续漏洞管理
    为开发人员和安全团队提供主动的 AppSec 持续漏洞管理
    现代软件开发环境中哪些日益增长的网络安全风险让 CISO 忙碌? 开发人员和安全团队面临着越来越多的威胁,从复杂的开源和供应商控制的供应链攻击到 AI 生成的代码引入的漏洞,例如提示注入和 GitHub Copilot 的代码安全性差。现代应用程序通常严重依赖开源组件(例如在 npm、PyPI 或 ...
    编程 发布于2024-11-06
  • 如何使用 React 对 MeteorJS 中的 Bootstrap Spacing 实用程序类进行故障排除?
    如何使用 React 对 MeteorJS 中的 Bootstrap Spacing 实用程序类进行故障排除?
    在 Bootstrap 中使用间距实用程序类在 Bootstrap 中,间距实用程序类允许您轻松控制元素周围的间距。但是,如果您在使用它们时遇到问题,这里有一个指南可以帮助您解决。更新的间距语法(Bootstrap 4 和 5)Bootstrap 4 引入了间距实用程序类的简化语法:边距:m{sid...
    编程 发布于2024-11-06
  • 如何在Python中设置子进程的工作目录?
    如何在Python中设置子进程的工作目录?
    如何在Python中设置子进程的工作目录在Python中,subprocess.Popen()函数允许您在Py​​thon中执行命令子进程。一个常见的要求是指定子进程的工作目录。问题:如何使用 subprocess.Popen() 设置子进程的工作目录? 答案:要指定工作目录,请使用 subproc...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3