我正在努力围绕BEM命名约定。我被困在这里。我可能会误会,让我们看看。
我有一个侧边栏导航和一个内容导航。
<div class="sidebar">
<ul class="sidebar__nav">
<li class="nav__item"><a href="#" class="nav__link">LINK</a></li>
<li class="nav__item"><a href="#" class="nav__link">LINK</a></li>
</ul>
</div>
<div class="content">
<ul class="content__nav">
<li class="nav__item"><a href="#" class="nav__link">LINK</a></li>
<li class="nav__item"><a href="#" class="nav__link">LINK</a></li>
</ul>
</div>
现在,如果我设置.nav__item样式,我将遇到一个问题,它们同时出现在我的两个导航中,并且不应具有相同的样式。我应该在这里做一些嵌套,还是将块和元素命名错误?
CSS中的嵌套示例:
.content__nav .nav__item { background: Red; }
还是我应该这样命名:
<li class="content__nav__item"><a href="#" class="content__nav__link">LINK</a></li>
你能帮我吗?
关于如何编写BEM类的方法有很多变体,因此请注意,这是多个相互竞争的标准。它起初是一组宽松的准则。自发布此答案以来,Yandex大大改进了其官方标准(这是一个很大的进步)。。
在这一点上,我使用“ Atomic OOBEMITLESS”,它实际上只是表示类是模块化和命名空间的,选择器的特异性低,状态可以用允许CSS缩放的类来切换,从而可以在CSS预处理器之上使代码更简洁,更具表现力。
综上所述,我将使用以下BEM标准:
连字符的类名作为块:
foo-bar
块名,__
后跟元素的带连字符的类名:
foo-bar__fizz-buzz
块或元素名,接着--
,接着为改性剂连字符的类名:
foo-bar--baz
,foo-bar--baz__fizz-buzz
,foo-bar__fizz-buzz--qux
BEM缩写形式: block-name__element-name--modifier-name
您的示例中有三个不同的块:
sidebar
,其中包含一个sidebar__nav
元素content
,其中包含一个content__nav
元素nav
,其中包含nav__item
和nav__link
元素的sidebar
和content
块似乎是相同的块上的变化,并且可以被表示为.region.region-- sidebar
和.region.region--content
。
该nav
块在ul
元素上是隐式的,您应该使其明确:
<ul class="nav"><!-- could be content__nav or sidebar__nav as well if you choose -->
<li class="nav__item"><a href="#" class="nav__link">LINK</a></li>
<li class="nav__item"><a href="#" class="nav__link">LINK</a></li>
</ul>
一旦指定ul
元素为一个nav
块,就nav
可以修改该块了:
<ul class="nav nav--content">
<li class="nav__item nav--content__item"><a href="#" class="nav__link nav--content__link">LINK</a></li>
<li class="nav__item nav--content__item"><a href="#" class="nav__link nav--content__link">LINK</a></li>
</ul>
设置完CSS类之后,对 所有 nav__item
元素进行样式设置就很简单:
.nav__item {
...styles here...
}
并为内容nav__item
元素覆盖这些样式是:
.nav--content__item {
...styles here...
}
关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变化。 “内部模块”现在称做“命名空间”。 “外部模块”现在则简称为“模块”,这是为了与ECMAScript 2015里的术语保持一致,(也就是说 module X { 相当于现在推荐的写法 namespace X {)。 这篇文章将概括介绍在TypeScript里使用模块与命名空间来组织代码的方法。 我们也会谈及
关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变化。 “内部模块”现在称做“命名空间”。 “外部模块”现在则简称为“模块”,这是为了与ECMAScript 2015里的术语保持一致,(也就是说 module X { 相当于现在推荐的写法 namespace X {)。 介绍 这篇文章将概括介绍在TypeScript里使用模块与命名空间来组织代码的方法。 我们也
If you’re writing your HTML and CSS code in OOCSS-style, Yandex’s BEM style specifically, you will like this filter. It provides some aliases and automatic insertions of common block and element names
postcss-bem-linter 是一个用于 postcss 的 BEM linter 工具。 有了这个插件,你可以通过对照一组 BEM 风格的约定,来检查样式表的有效性;可以使用预设模式(目前是 SUIT 和 BEM),或插入你自己的;如果发现CSS不遵循规定的约定,该插件将有提示警告,
这是一个非常基本的问题,但实际上我从来没有自己定义过名称空间。我正在尝试将我的基于Qt的库中的类分组在各种名称空间中(并且还允许更容易的扩展而不发生名称冲突)。例如,主类(也表示库)属于顶级命名空间: 这个使用了一组其他名称空间和类,这些名称空间和类是在的头文件中定义的,这些头文件包含在的头文件中: 其中Manager.h包含 和configurator.h包含 类的内容在这里并不重要。 在编译时
问题内容: 我知道这个问题已经被问过多次了。我已经阅读了所有内容,但无法解决问题。以下是我的目录结构。 在main.py中,我将导入以下内容。 当我在Windows中执行代码时,它工作得很好。但是在Linux中,出现以下错误。 我还阅读了有关模块和包的官方python文档。 问题答案: 您的包裹结构还可以。您的导入声明很好。唯一缺少的是该软件包在中是可见的,该位置是可以解析import语句的位置列