Html 允许我在子块内使用父块中的元素吗?

Html 允许我在子块内使用父块中的元素吗?,html,css,bem,Html,Css,Bem,我想知道,根据边界元法,我是否可以拥有以下结构: .block1 .block1__element1 .block2 .block1__element2 <-- ?? <div class="head"> <div class="head__user"></div> <div class="head__nav"> <div class="menu"> // <-- ?

我想知道,根据边界元法,我是否可以拥有以下结构:

.block1
  .block1__element1
    .block2
       .block1__element2 <-- ??
<div class="head">
  <div class="head__user"></div>
  <div class="head__nav">
    <div class="menu">
       // <-- ???
    </div>
  </div>
</div>
.block1
.块1__元素1
.区块2

.block1__元素2我认为这种变体是允许的:

<div class="head">
  <div class="head__nav">
    <div class="menu">
       <div class="head__user"></div>
    </div>
  </div>
</div>
然而,在边界元法中,该块结构始终表示为一个元素的平面列表:

范例

<div class="block">
    <div class="block__elem1">
        <div class="block__elem2">
            <div class="block__elem3"></div>
        </div>
    </div>
</div>
.block {}
.block__elem1 {}
.block__elem2 {}
.block__elem3 {}
<div class="block">
    <div class="block__elem1">
        <div class="block__elem2"></div>
    </div>
    <div class="block__elem3"></div>
</div>
这允许您更改块的DOM结构,而无需更改每个单独元素的代码:

范例

<div class="block">
    <div class="block__elem1">
        <div class="block__elem2">
            <div class="block__elem3"></div>
        </div>
    </div>
</div>
.block {}
.block__elem1 {}
.block__elem2 {}
.block__elem3 {}
<div class="block">
    <div class="block__elem1">
        <div class="block__elem2"></div>
    </div>
    <div class="block__elem3"></div>
</div>

块的结构发生变化,但元素及其名称的规则保持不变

我理解这一点,因为关于BEM中元素的HTML结构只有一条规则:元素必须在其块内(不管有多深)


我可以想象的一个可能的问题是使用一些格式。但是如果你不需要它,我想没有问题。

我已经用了一段时间了,从我得到的信息来看,不推荐也不打算这样使用它。您可以将不同的BEM元素相互嵌套,如
菜单块
嵌入
头块
,但
菜单块
项不应超出其父
菜单块
,如不应将
菜单块
放在
头块
的顶部。这有意义吗?:)

要说明这一点,有两种方法。这里需要注意的是,这取决于项目的规模和构建方式(基于组件?)。如果你没有一个大的项目,并且没有做或者重复使用菜单,那么你可以用两种方式来做。假设你的菜单有大量的html/css,我会像#1那样做

这不正确

<div class="head">
  <div class="head__user"></div>
  <div class="head__nav">

    <div class="menu">
       <div class="head__something"></div>
    </div>

  </div>
</div>

推荐解决方案
基于。现在你可以把你自己的头球设计切成块,下面这个匹配吗

<div class="head">
  <div class="head__user"></div>
  <div class="head__nav">
    <div class="menu">
       <div class="menu__something"><img src="" class="menu__image" /></div>
    </div>
  </div>
</div>


我会考虑将潜在的代码<代码>头/某物>代码>简单地>代码>某物,然后提供多个修改。e、 g.

something--head
something--menu

<div class="head">
  <div class="head__user"></div>
  <div class="head__nav">
    <div class="menu">
     <div class="something--menu" />
    </div>
  </div>
  <div class="something--head" />
</div>
<div class="head">
  <div class="head__user"></div>
  <div class="menu">
    <div class="something--menu" />
  </div>
  <div class="something--head">for those cases where you want <code>something</code> directly descending from <code>head</code></div>
</div>

你说的块元素是什么意思?像什么?你能提供一个HTML示例吗?请具体一点,添加一些代码或启发性的图片,以便更好地理解。我已经更新了问题,谢谢你的反馈。他们必须从
菜单开始。\uuuuuu
检查我下面的答案,因为它可能会清除你的一些想法。@Dejan.S不,他们不必这样做。你能在中给我介绍一下吗?第一个例子是正确的,而最后一个例子不是,它看起来像是元素中的一个元素,命名为:)。请检查。@SergeyDenisov我不是在元素中创建元素,而是在元素中创建
head\uuuuuu menu\uuuu something
,如果在主块中创建,则在某一点上有次要的“块类型”。所以这是正确的。但正如我在回答中所说,建议是1。这是一种黑客行为。是的,您的命名是有效的,但是
.head\uu菜单-某个元素取决于
。head\uu菜单
元素,它是不正确的。@SergeyDenisov它实际上不依赖于任何东西,它只是一个命名,以便清楚地看到您的元素属于什么。在现实生活中,您的块将包含超过3个div,假设这3个div中都有
a
,您如何正确命名它们?如果不是由他们自己制作成独立的区块,@SergeyDenisov完全有道理,这也是我工作的方式。