- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我刚读过 Scalable and Modular Architecture for CSS这让我开始思考一些事情。 Snook 的两个原则是:
因此这意味着使用语义类名而不是依赖非语义元素类型来定位。例如,我可能不是以 .someClass-title
为目标,而是以 .someClass-title
为目标,这样如果 h5 被换成其他东西,事情就不会中断。
就我个人而言,我发现在元素的名称中编码元素的层次结构有点令人不快(即使它在语义上是正确的)。我更喜欢做 .someClass .title
。但是要使用像标题一样通用的类,您需要接受此类将在许多不同的上下文中使用。
如果我知道同一个类将被选择器中的前一个元素命名空间,那么在完全不同的上下文中使用同一个类会有什么问题吗?
例如,假设我的站点中有三个不同的位置,其中一类“标题”是有意义的:
HTML
<header class="pageHeader">
<h1 class="title">Some Title</h1>
</header>
...
<article class="leadArticle>
<h3 class="title">Some Article Title</h3>
</article>
...
<ul class="productPreviews">
<li class="product">
<h5 class="title">Some Product Name</h5>
</li>
</ul>
CSS
.pageHeader .title
{
}
.leadArticle .title
{
}
.productPreview .product .title
{
}
编辑:作为 Alohci他在下面的回答中提到, header 标签并非没有语义,所以这可能不是最好的使用示例。
显然,在这些上下文中,我可能会做一些与 title 完全不同的事情,但是 title 对于它的模块命名空间来说是绝对有意义的,而且我从来没有任何打算将 title 用作通用选择器。
这似乎符合所有条件。它语义丰富,与实现完全分离。例如,如果将最后一个示例更改为一个 ol 或一堆 div,则不会破坏任何内容,如果标题被包裹在一个 div 中,它仍然会被定位。
这对我来说很有意义,但我还没有看到这种方法被广泛使用,我想知道为什么。一个明显的缺点是您在选择器中链接类,但我认为这比为每个类名命名空间更可取。
最佳答案
我更喜欢使用像 .title 这样的类,而不是只选择 h5 元素,因为我觉得它进一步将 HTML 与 CSS 分离。如果出于某种原因,您决定 h4 或 h6 更适合文档大纲,或其他一些元素/原因,则如果您选择元素 (h5) 与选择类 (.标题)。
这就是为什么我更喜欢将 ALL THE THINGS 与元素选择器进行分类,因为标记可能会随着时间而改变。如果您在一个较小的网站上工作,没有看到很多更新,这可能不是一个问题,尽管了解这一点是件好事。
至于在完全不同的上下文中使用同一个类是否有任何问题,如果你知道它会被选择器中的前一个元素命名空间,我对此有不同的看法。
一方面,我想到了一些问题,例如,如果没有父选择器,.title 的用途/含义/作用可能是空的。 (.pageHeader .title) 虽然我认为 .title 是一个非常好的类名,但其他开发人员可能很难理解它的含义来自父选择器,例如 .pageHeader .title
另一个问题是,如果您将 .title 类用于模块中“标题”的多个实例,则可能会遇到问题。基本思想是,如果试图在模块中扩展 .title 的可重用性,则提供的本地作用域后代选择器有时会过于严格。我设置了一个代码演示来展示我在说什么 here .
另一方面,后代选择器是最常用的选择器之一,特别是为了它们的作用域目的。
Tim Murtaugh,他是 A List Apart 的开发人员之一(不确定他是否是首席开发人员)他的大部分 styles 使用后代选择器在他的个人网站上。
我最近一直在探索这个和 BEM,并且同意你的结论,“这比命名每个类名更可取。”
与 .pageHeader__title{...} 相比,我更喜欢 .pageHeader .title{...} 但在某些情况下,一种方法在某种情况下可能比另一种方法更有利。
与大多数事情一样,这取决于情况,但我认为如果您不让嵌套太深并且考虑如何使用它们,后代选择器是提供局部范围样式的强大且好的解决方案,同时还提供全局范围样式的解决方案。
例如:
/* Globally scoped styles for all .title(s) */
.title{
font-family: serif;
font-weight: bold;
}
/* Locally scoped styles for individual .title(s) */
.pageHeader .title {
color: #f00;
}
.leadArticle .title {
color: #00f;
}
.productPreview .product .title {
color: #0f0;
}
关于css - SMACSS、语义类名和嵌套元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12150444/
我有一个名为 main.css 的 css 文件和另一个名为 style.css 的文件。我怎样才能在 main.css 中做到这一点? .someClass { //apply rules to
在更新我的 css 之前,我在 Login.css 中有以下内容: body { background-image: url('./pictures/fond.png'); bac
我的 share point 2013 核心 css 和我的 css 之间存在 css 冲突。所以我想把我所有的类都放在 div #s4-workspace 下但是我搜索了一种方法来将所有类分组到这个
我知道您可以覆盖 jsp 页面从 jsp 包含 CSS 文件(即全局 CSS 文件)继承的 CSS 属性。 但是,如果元素中的某个属性弄乱了特定页面,而我不想只使用内联 CSS 在该页面中使用它怎么办
我刚刚发现了 initial-scale 元属性。 以前,我一直在使用 default.css 来定义我所有的样式和大小(用于字体和元素),以便它们在桌面计算机的屏幕上显示得很好。然后,如果您使用的是
我正在尝试使用 LESS CSS 来编写我的 CSS。我已经按顺序导入了 style.less 和 less.js 文件。 现在我想提取 LESS 生成的 CSS。有什么办法可以做到吗?我不想使用脚本
我想知道是否有任何一种软件可以读取大量内联样式中的 HTML 文档并将所有这些样式转换为外部 css 文件。如果只有一页,我可以手动完成。但是有100页。有人有想法吗? 最佳答案 就像有人说的那样,“
当我想从 Styled Components 迁移到 CSS Modules 时,出现了以下问题。 假设我有以下样式组件,它接受动态参数 offset和一个动态 CSS 字符串 theme : con
有没有办法将 CSS 类定义为与另一个类相等?例如,如果我有一个类: .myClass{ background-color: blue; } 有没有一种方法可以将第二个类定义为与 myClas
我正在尝试制作一组按钮,这些按钮贴在页面底部并且由固定的空间隔开。我正在使用 angularJS 的 ng-repeat 指令通过 ajax 请求获取数据,然后我用它来显示按钮。 我的问题在于让按
浏览器是否在加载 CSS 文件时解析 CSS?还是在整个 CSS 文件被浏览器下载后才进行解析?不同浏览器的做法有区别吗?我在哪里可以找到这种底层信息? 这个问题不是 Load and executi
这个问题在这里已经有了答案: Can a CSS class inherit one or more other classes? (29 个答案) 关闭 3 年前。 标题有点乱,我给大家看一下。假
我遇到了最奇怪的问题...... 在最简单的形式中,我有一个包含以下内容的 index.html 文件: (在尝试确定根本原因的过程中,我已经大大减少了它) 当我查看页面的源代码时,我得到以下信息:
我正在使用 Mindscape Workbench 来最小化我的 scss 文件。我的页面设置为使用 *.min.css 文件。在随机时间,min 文件不会与系统的其余部分一起发布。 我有很多 css
请告诉我 CSS 框架和 CSS 网格之间的区别。 最佳答案 CSS 框架也可以是 CSS 网格框架。 CSS 网格框架用于构建 CSS 布局。有一些框架除了构建布局还有其他用途,例如 Hartija
我有无法从页面中删除或更改的 original.css 文件。原始.css table { border-collapse: collapse; border-spacing: 0;
我以前使用 bootstrap css import 很好。 但是我正在尝试使用 CSS 模块,所以我添加了几行。 { test: /\.css$/, use:
有没有办法在 css 选择器中创建一个 css 组。 例如: .SectionHeader { include: .foo; include: .bar; include: .
今天我学习了 CSS 中的两个概念,一个是 CSS 定位(静态、相对、绝对、固定),另一个是 CSS Margin,它定义了元素之间的空间。 假设我想移动一个元素,这是最好的方法吗?因为这两个概念似乎
var paths = { css: './public/apps/user/**/*.css' } var dest = { css: './public/apps/user/css/' } /
我是一名优秀的程序员,十分优秀!