【问题标题】:Why is my empty cell not working on CSS grids? [duplicate]为什么我的空单元格不适用于 CSS 网格? [复制]
【发布时间】:2018-07-04 19:13:53
【问题描述】:

我有一个 CSS Grid,我的 grid-template-areas 属性有 . 似乎没有应用空白。这是为什么呢?

.nav {
  /*    padding: 1rem 1.75rem 0.1rem 1.75rem;*/
  text-align: center;
  font-size: 2rem;
  display: grid;
  width: 100%;
  grid-template-columns: 20px 1fr 1fr 1fr 1fr 20px;
  grid-template-areas: ". main blog work contact .";
  /*    grid-gap: 20px;*/
}


/*Nav li style removal*/

.nav li {
  list-style: none;
  padding: 0;
  margin: 0;
  display: inline;
  text-decoration: none;
}


/*Nav link styling*/

ul {
  padding: 0;
}

.nav a {
  text-decoration: none;
  font-family: 'Monoton', cursive;
  color: #000;
  text-transform: uppercase;
}

#main-link {
  grid-area: main;
}

#blog-link {
  grid-area: blog;
}

#work-link {
  grid-area: work;
}

#contact-link {
  grid-area: contact;
}
<nav id="navigation">

  <ul class="nav">

    <li class="navbutton navhover"><a href="blogs.html" id="main-link">Main</a></li>
    <li class="navbutton navhover"><a href="blogs.html" class="currentlink" id="blog-link">Blog</a></li>
    <li class="navbutton navhover" id="work-link"><a href="work.html">Work</a></li>
    <li class="navbutton navhover" id="contact-link"><a href="contact.html">Contact</a></li>

  </ul>


</nav>

关键是:

grid-template-columns: 20px 1fr 1fr 1fr 1fr 20px;
grid-template-areas: ". main blog work contact .";

为什么 . 没有应用空格?

【问题讨论】:

标签: css css-grid


【解决方案1】:

你的意思是它没有应用空格?如果您在开发工具中签入,您可以看到最左边和最右边的列为它们保留了 20 像素。

我认为您打算做的是创建 20px 的左右边距。如果是这种情况,您甚至不需要使用网格来保留该空间:使用 20px 的水平边距应该可以:

.nav {
  width: calc(100% - 40px);
  margin-left: 20px;
  margin-right: 20px;
}

查看示例:

.nav {
  /*    padding: 1rem 1.75rem 0.1rem 1.75rem;*/
  text-align: center;
  font-size: 2rem;
  display: grid;
  width: calc(100% - 40px);
  margin-left: 20px;
  margin-right: 20px;
  grid-template-columns: 1fr 1fr 1fr 1fr;
  grid-template-areas: "main blog work contact";
  /*    grid-gap: 20px;*/
}


/*Nav li style removal*/

.nav li {
  list-style: none;
  padding: 0;
  margin: 0;
  display: inline;
  text-decoration: none;
}


/*Nav link styling*/

ul {
  padding: 0;
}

.nav a {
  text-decoration: none;
  font-family: 'Monoton', cursive;
  color: #000;
  text-transform: uppercase;
}

#main-link {
  grid-area: main;
}

#blog-link {
  grid-area: blog;
}

#work-link {
  grid-area: work;
}

#contact-link {
  grid-area: contact;
}
<nav id="navigation">

  <ul class="nav">

    <li class="navbutton navhover"><a href="blogs.html" id="main-link">Main</a></li>
    <li class="navbutton navhover"><a href="blogs.html" class="currentlink" id="blog-link">Blog</a></li>
    <li class="navbutton navhover" id="work-link"><a href="work.html">Work</a></li>
    <li class="navbutton navhover" id="contact-link"><a href="contact.html">Contact</a></li>

  </ul>


</nav>

否则,您将不得不使用空的&lt;li&gt;&lt;/li&gt; 元素来保留该空间,基于您声明的grid-template-areas

<ul class="nav">
    <li></li>
    <li class="navbutton navhover"><a href="blogs.html" id="main-link">Main</a></li>
    <li class="navbutton navhover"><a href="blogs.html" class="currentlink" id="blog-link">Blog</a></li>
    <li class="navbutton navhover" id="work-link"><a href="work.html">Work</a></li>
    <li class="navbutton navhover" id="contact-link"><a href="contact.html">Contact</a></li>
    <li></li>
</ul>

查看示例:

.nav {
  /*    padding: 1rem 1.75rem 0.1rem 1.75rem;*/
  text-align: center;
  font-size: 2rem;
  display: grid;
  width: 100%;
  grid-template-columns: 20px 1fr 1fr 1fr 1fr 20px;
  grid-template-areas: ". main blog work contact .";
  /*    grid-gap: 20px;*/
}


/*Nav li style removal*/

.nav li {
  list-style: none;
  padding: 0;
  margin: 0;
  display: inline;
  text-decoration: none;
}


/*Nav link styling*/

ul {
  padding: 0;
}

.nav a {
  text-decoration: none;
  font-family: 'Monoton', cursive;
  color: #000;
  text-transform: uppercase;
}

#main-link {
  grid-area: main;
}

#blog-link {
  grid-area: blog;
}

#work-link {
  grid-area: work;
}

#contact-link {
  grid-area: contact;
}
<nav id="navigation">

  <ul class="nav">
    <!-- Unsemantic placeholder :( -->
    <li></li>
    
    <li class="navbutton navhover"><a href="blogs.html" id="main-link">Main</a></li>
    <li class="navbutton navhover"><a href="blogs.html" class="currentlink" id="blog-link">Blog</a></li>
    <li class="navbutton navhover" id="work-link"><a href="work.html">Work</a></li>
    <li class="navbutton navhover" id="contact-link"><a href="contact.html">Contact</a></li>

    <!-- Unsemantic placeholder :( -->
    <li></li>
  </ul>


</nav>

【讨论】:

  • 啊,好吧,也许我对 grid-template 的理解是错误的?我认为它会将空白应用于 20px 列,然后 main 将从第 2 列开始,等等……但在 codepen 中它的 main 从第 1 列开始?我为 li 添加了背景颜色,现在我可以看到博客 li 与工作 li 重叠,当我假设它们应该在单独的列中时,每个 1fr 宽度
  • @JamieKane 是的,似乎是这样。无论如何,您将 20px 的宽度分配给第一个元素,这是您的“主”链接。那不是你想做的。只需使用边距。
  • 好的,谢谢你的建议,我会用那个方法,但我还是不明白为什么我现在的方法不起作用?
  • @JamieKane 您当前的方法强制第一个网格项的宽度为 20px,这就是原因。您正在声明 7 个网格项,第一个和最后一个为 20px。您的 .nav 中只有 5 个项目,因此它们的宽度将简单地为 20px,然后是 1fr,最后两个宽度未使用。
  • @Terry,主要问题是锚元素甚至不是网格项目。应用到它们的网格属性被完全忽略。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多