隐藏未在网格模板区域中指定的元素

jml*_*mls 9 css css3 css-grid

我正在尝试通过css-grid grid-template-areas选项理解和工作.

给出这个HTML

<div class="wrapper">
  <div class="d">D</div>
  <div class="b">B</div>
  <div class="c">C</div>
  <div class="a">A</div>
</div>
Run Code Online (Sandbox Code Playgroud)

这个css

.wrapper {
    grid-template-areas: "areaA areaB areaC areaD" 
}

.A { grid-area: areaA; }
.B { grid-area: areaB; }
.C { grid-area: areaC; }
.D { grid-area: areaD; }
Run Code Online (Sandbox Code Playgroud)

我得到(预期)以下结果

A B C D
Run Code Online (Sandbox Code Playgroud)

现在,如果我添加媒体查询,并希望隐藏列B,C和D.

@media (min-width: 500px) {
    .wrapper {
        grid-template-areas: "areaA";
    }

    .B {
        display: none;
    }

    .C {
        display: none;
    }

    .D {
        display: none;
    }
}
Run Code Online (Sandbox Code Playgroud)

这也有效:

A
Run Code Online (Sandbox Code Playgroud)

现在,我删除了display:none条目,希望因为没有提到grid-template-areas他们不会显示的元素.我错了 ;)

是否可以指定仅使用css-grid默认隐藏未指定的元素?我似乎找不到任何提到这一点的东西

Mic*_*l_B 5

grid-template-areas属性无法隐藏网格项目。它旨在创建网格区域。

但是您的媒体查询仍然可以非常简单。

这就是您所需要的:

@media (max-width: 500px) {

   section:not(.a) { display: none; }

}
Run Code Online (Sandbox Code Playgroud)

jsFiddle演示

@media (max-width: 500px) {

   section:not(.a) { display: none; }

}
Run Code Online (Sandbox Code Playgroud)
article {
  display: grid;
  grid-template-areas: "areaA areaB areaC areaD";
}

@media (max-width: 500px) {
  section:not(.a) { display: none; }
}

.a { grid-area: areaA; }
.b { grid-area: areaB; }
.c { grid-area: areaC; }
.d { grid-area: areaD; }

/* non-essential demo styles */

section {
  height: 50px;
  width: 75px;
  background-color: lightgreen;
  border: 1px solid #ccc;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 1.2em;
}
Run Code Online (Sandbox Code Playgroud)