CSS:为什么这些响应方块不是完全正方形?

ame*_*ina 5 css flexbox responsive

我正在尝试制作一个可调整大小的正方形网格,里面有一些文字.这是代码:

/* Dirty quick CSS reset */
*,
*::before,
*::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.container {
  display: flex;
  flex-flow: column;
  flex: 1;
  background: aliceblue;
}

.row {
  display: flex;
  flex: 1;
}

.square {
  border: 1px solid black;
    
  width: 14.2857%; /* 100% / 7 */
  font-size: 18px;
  padding: 8px;
  
  /* square-width - font-size - padding-top */
  padding-bottom: calc(14.2857% - 18px - 8px);
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div class="row">
    <div class="square">1</div>
    <div class="square">2</div>
    <div class="square">3</div>
    <div class="square">4</div>
    <div class="square">5</div>
    <div class="square">6</div>
    <div class="square">7</div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我们可以看到,有一排正方形可以适应窗户的大小.问题是,如果我们检查它们,我们会发现它们不是完全正方形(它们比宽度高3px).如果我们增加它会变得更糟font-size,据我所知,数学是正确的.

这里发生了什么?为什么我会获得这些额外的像素?

Tem*_*fif 2

准确的计算应该是 ( 14.2857% - 8px - 2px - Lpx) 我们删除了 和padding-toptheborderline-height(不是 ) font-size,所以你应该知道 的值line-height或者你设置它:

/* Dirty quick CSS reset */
*,
*::before,
*::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.container {
  display: flex;
  flex-flow: column;
  flex: 1;
  background: aliceblue;
}

.row {
  display: flex;
  flex: 1;
}

.square {
  border: 1px solid black;
    
  width: 14.2857%; /* 100% / 7 */
  font-size: 18px; 
  line-height:1em; /*equal to font-size*/
  padding: 8px;
  
  /* square-width - font-size - padding-top */
  padding-bottom: calc(14.2857% - 8px - 2px - 18px);
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div class="row">
    <div class="square">1</div>
    <div class="square">2</div>
    <div class="square">3</div>
    <div class="square">4</div>
    <div class="square">5</div>
    <div class="square">6</div>
    <div class="square">7</div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

如果我们参考文档,则该line-height值定义了线条的高度,默认值设置为normal

CSS 的 line-height 属性设置行(例如文本)所使用的空间量。

普通的

取决于用户代理。桌面浏览器(包括 Firefox)使用大约 1.2 的默认值,具体取决于元素的字体系列。

如您所见,line-height不一定等于font-size