CSS grids: align square cells with container edges with consistent grid gap?

…衆ロ難τιáo~ 提交于 2019-11-28 04:44:53

问题


The goal is to align square cells with their container's leading and trailing edges while achieving a consistent gap between cells on each row, and between each row.

This Codepen is close, but there are two problems: (1) vertical gaps are different from horizontal gaps; and (2) the squares are flush with the leading edge, but not the trailing edge.

https://codepen.io/anon/pen/wREmjo

ul {
  display: grid;
  width: 260px;
  grid-template-columns: repeat(auto-fit, minmax(40px, 1fr));
  grid-auto-rows: 1fr;
  grid-gap: 10px;
  list-style-type: none;
  border: 2px solid black;
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  background: gray;
}

li {
  width: 40px;
  height: 40px;
}
<ul class="palette">
  <li style="background-color: rgb(0, 0, 255);"></li>
  <li style="background-color: rgb(51, 51, 51);"></li>
  <li style="background-color: rgb(203, 58, 135);"></li>
  <li style="background-color: rgb(237, 106, 90);"></li>
  <li style="background-color: rgb(155, 193, 188);"></li>
  <li style="background-color: rgb(255, 247, 174);"></li>
  <li style="background-color: rgb(184, 51, 106);"></li>
  <li style="background-color: rgb(61, 44, 46);"></li>
  <li style="background-color: rgb(105, 173, 212);"></li>
  <li style="background-color: rgb(245, 223, 22);"></li>
  <li style="background-color: rgb(252, 186, 86);"></li>
  <li style="background-color: rgb(0, 185, 252);"></li>
  <li style="background-color: rgb(181, 141, 182);"></li>
  <li style="background-color: rgb(58, 50, 96);"></li>
</ul>

回答1:


The issue is that the grid cells are fine but the content inside (li) is not matching them.

Instead of using fixed width/height on the li you can consider percentage value and they will be a bit bigger in some cases but will remain square elements:

ul {
  display: grid;
  width: 260px;
  grid-template-columns: repeat(auto-fit, minmax(40px, 1fr));
  grid-auto-rows: 1fr;
  grid-gap: 10px;
  list-style-type: none;
  border: 2px solid black;
  box-sizing: border-box;
  margin: 0;
  padding: 0;
  background: gray;
  animation:change 5s linear alternate infinite;
}

li {
  width: 100%;
  padding-top:100%;
}

@keyframes change {
  to {width:120px}
}
<ul class="palette">
  <li style="background-color: rgb(0, 0, 255);"></li>
  <li style="background-color: rgb(51, 51, 51);"></li>
  <li style="background-color: rgb(203, 58, 135);"></li>
  <li style="background-color: rgb(237, 106, 90);"></li>
  <li style="background-color: rgb(155, 193, 188);"></li>
  <li style="background-color: rgb(255, 247, 174);"></li>
  <li style="background-color: rgb(184, 51, 106);"></li>
  <li style="background-color: rgb(61, 44, 46);"></li>
  <li style="background-color: rgb(105, 173, 212);"></li>
  <li style="background-color: rgb(245, 223, 22);"></li>
  <li style="background-color: rgb(252, 186, 86);"></li>
  <li style="background-color: rgb(0, 185, 252);"></li>
  <li style="background-color: rgb(181, 141, 182);"></li>
  <li style="background-color: rgb(58, 50, 96);"></li>
</ul>



回答2:


This one is the answer to your first problem no need to give width to li.

ul {
  display: grid;
  width: 260px;
  grid-template-columns: repeat(auto-fit, minmax(40px, 1fr));
  grid-auto-rows: 1fr;
  grid-gap: 10px;
  list-style-type: none;
  border: 2px solid black;
  box-sizing: border-box;
  margin: 0;
  padding: 5px;
  background: gray;
}

li {
/*   width: 40px; */
  height: 40px;
}
<ul class="palette">
  <li style="background-color: rgb(0, 0, 255);"></li>
  <li style="background-color: rgb(51, 51, 51);"></li>
  <li style="background-color: rgb(203, 58, 135);"></li>
  <li style="background-color: rgb(237, 106, 90);"></li>
  <li style="background-color: rgb(155, 193, 188);"></li>
  <li style="background-color: rgb(255, 247, 174);"></li>
  <li style="background-color: rgb(184, 51, 106);"></li>
  <li style="background-color: rgb(61, 44, 46);"></li>
  <li style="background-color: rgb(105, 173, 212);"></li>
  <li style="background-color: rgb(245, 223, 22);"></li>
  <li style="background-color: rgb(252, 186, 86);"></li>
  <li style="background-color: rgb(0, 185, 252);"></li>
  <li style="background-color: rgb(181, 141, 182);"></li>
  <li style="background-color: rgb(58, 50, 96);"></li>
</ul>


来源:https://stackoverflow.com/questions/54125016/css-grids-align-square-cells-with-container-edges-with-consistent-grid-gap

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!