You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSS calc()函数百分比失效问题:rem生效原因解析

日历布局问题解答

代码示例

CSS 代码

.calendar{
  height: 40%;
  width: 40%;
  background-color: #fff;
  color: lightgray;
  border-radius: 10px;
}
.days{
  display: flex;
  flex-wrap: wrap;
  padding-inline: .2rem;
}
.days div{
  font-size: .875rem;
  width: calc((40% - .4rem) / 7);
  display: flex;
  justify-content: center;
  align-items: center;
}

HTML 代码

<div class="calendar">
  <div class="month">
    <div class="date">
      <h1>JUNE</h1>
      <p>Wed Jun 08 2023</p>
    </div>
  </div>
  <div class="weekdays">
     <div>Mon</div>
     <div>Tue</div>
     <div>Wed</div>
     <div>Thu</div>
     <div>Fri</div>
     <div>Sat</div>
     <div>Sun</div>
  </div>
  <div class="days">
    <div class="empty"></div>
    <div class="empty"></div>
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <div>6</div>
    <div>7</div>
    <div class="today">8</div>
    <div>9</div>
    <div>10</div>
    <div>11</div>
    <div>12</div>
    <div>13</div>
    <div>14</div>
    <div>15</div>
    <div>16</div>
    <div>17</div>
    <div>18</div>
    <div>19</div>
    <div>20</div>
    <div>21</div>
    <div>22</div>
    <div>23</div>
    <div>24</div>
    <div>25</div>
    <div>26</div>
    <div>27</div>
    <div>28</div>
    <div>29</div>
    <div>30</div> 
  </div>
</div>

问题解答

问题1:为何.days选择器中的calc()函数使用百分比时无法正常工作?

你写的calc((40% - .4rem) / 7)里的40%是相对于父元素.calendar的宽度,但.days自身设置了padding-inline: .2rem,它的可用宽度其实是.calendar的40%减去左右padding总和(0.4rem)。现在直接拿.calendar的40%来计算,相当于给每个日期块的宽度设成了父容器宽度的40%除以7,这个值要么远小于.days的可用空间,要么在容器缩放时,因为百分比的计算基准是父容器而非当前元素的可用空间,导致7个日期块总宽度匹配出错,出现换行、错位等问题,自然没法正常排成一行。

问题2:将百分比改为rem单位后布局能完美适配,其原因是什么?

rem是基于根元素字体大小的固定长度单位(默认1rem=16px),把40%换成具体的rem值后,calc(([设定的rem值] - .4rem)/7)能精准计算每个日期块的宽度:用.days的总宽度(你设定的rem值)减去左右padding的0.4rem,再平均分成7份,刚好填满.days的可用空间。配合flex-wrap: wrap,每7个块会自动排成一行,不会出现计算基准混乱的问题,布局也就完美适配了。


内容的提问来源于stack exchange,提问作者MiaWD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:55:17