在的上下文中.NET MVC(但也可以应用于其他类似技术),让我们:

  1. 视图树,例如页面视图FileUploadPage及其子部分视图FileDropZone,其在根 node 上具有标识其视图"类型"的类:

文件上传页面.cshtml:

<div class="view-fileuploadpage">
    <h2>File upload page view</h2>
    @Html.Partial("FileDropZone")
</div>

飞碟区.CSHTML:

<div class="view-filedropzone">
    File drop zone partial view
</div>
  1. 我只想将一些CSS规则应用于视图自身的元素,而不是全局的:

这样地:

.view-fileuploadpage h2 {
    /* Spécific to the view FileUploadPage */
}

但是NOT个像这样:

h2 {
    /* Global, not what I want */
}

我喜欢这种方式,因为它可以防止不必要的全局 Select 器对CSS中其他页面的干扰.

但是,这有一个问题:特定于视图的CSS规则适用于视图本身的元素,但也适用于作为子视图包含的任何其他视图.在上面的示例中,视图FileDropZone继承了假定特定于视图FileUploadPage的规则,这是不希望的结果.

So my question is : how can I make the CSS rules that are supposed to be specific to my views own elements NOT apply to the child views as well ?

我可以在 Select 器中使用"direct child"操作符来指定要设置样式的元素的完整"路径",如下所示:

.view-fileuploadpage > h2 {
    /* Applies to the h2 of the view FileUploadPage */
    /* DOes NOT apply to any h2 that would exist in a child view of FileUploadPage */
}

但这会使代码难以维护,因为每次在视图中移动或修改标记时,都必须更新 Select 器.

我在JavaScript和查询 Select 器方面遇到了完全相同的问题,但我想找到CSS的解决方案也可以解决JavaScript问题.

非常感谢.

推荐答案

您可以使用:not()伪类取消 Select 特定子级中的孙子.

.view-fileuploadpage h2:not(.file-drop-zone *):not(.more-children *){
  color: #f00;
  } 

这将为所有h2个元素指定 colored颜色 ,:not() Select 器中所述类中的元素除外.

CSS文件需要更新为新的子类(如果有的话).

最好的解决方案是包装view-fileuploadpage或父div中不应获得样式的所有内容,并将此包装的类用作单个 Select 器.这样,文件将不需要不断更新,所有future 的子代和子代都将添加到包装器中.

因此,不是:

    <div class='view-fileuploadpage-one'>
      <h2>Container</h2>
      <p>...</p>
     
      <div class='file-drop-zone'>
        <h2>file drop zone</h2>
        ...
      </div>
    
      <div class='more-children'>
        <h2>More children</h2>
        ...
      </div>
   </div>

您可以 Select :

 <div class='view-fileuploadpage-two'>
    <h2>Container</h2>
    <p>...</p>
    <div class='content-wrapper'>
    <!--   this wrapper will contain everything else -->
      <div class='file-drop-zone'>
        ...
      </div>

      <div class='more-children'>
        ...
      </div>
    </div>
   </div>
  </div>

这或多或少是:

<div class='view-fileuploadpage-two'>
    ...
  <div class='content-wrapper'>
    ...
  </div>
</div>

请看我对this pen的 idea .

Html相关问答推荐

CSS Flex行之间的空间很大

XPATH text()函数遇到困难

css网格区域的布局不展开,也不显示滚动条

如何防止SVG图标出现断行?

Select 包含iframe的图形<><>

浏览器是在调整大小还是在全屏上交换视频源?

水平行中按钮的垂直偏移

使用单个粗体字符串向段落添加页边空白

仅 Select 悬停的级别,而不 Select 其父级或子级

如何从通过 find-each 方法(在 Rails 应用程序中)生成的列表创建下拉菜单?

如何保持块扩展以填充视口?

为什么即使我点击其他地方,我的 contenteditable="true" 也会被激活?

获取链接到功能的网页表单

如何在 flex 项目中忽略子元素的宽度

两个span,一个在div居中,好像没有另一个,另一个在右边

高度大于页面高度和页面大于覆盖的 CSS 覆盖

在 html 邮箱的左侧和右侧制作多个元素很热门吗?

如何突出显示 .qmd html 文件中的特定代码行

用 flexbox 和 overflow 覆盖

如何在锚点可点击的伪元素周围制作空白?