css 在响应式布局中占用尽可能少但仍合理的空间

y1aodyip  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(139)

我正在编写一个数量选择器按钮,希望它能够响应。也就是说,我希望减号和加号只包含图标所需的宽度,中间的输入为最大宽度。
我想知道如何使用scss来处理这个问题。
超文本:

<div class="quantity-select-container">
   <div class="btn btn-minus">
      <span class="icon icon-minus">
      </span>    
   </div>

   <input value="1" type="number" min="1" max="100" step="1" pattern="[0-9]*" class="form-control product-detail-quantity-select">

   <div class="btn btn-plus">
      <span class="icon icon-plus"></span>    
   </div>
</div>

SCSS:

.quantity-select-container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: 1fr;
  gap: 0 0;
  border: 1px solid black;
  grid-auto-flow: row;
  grid-template-areas: "minus input plus";

  .btn-minus {
    grid-area: minus;
  }

  input {
    text-align: center;
    grid-area: input;
    padding: 2px;
    width: 100%;
  }

  .btn-plus {
    grid-area: plus;
  }

  .btn-minus,
  .btn-plus {
    cursor: pointer;
    display: flex;
    justify-content: center;
  }
}

grid-template-columns: 45px auto 45px;可以解决这个问题,但效果不是很好,因为在窄屏幕上,按钮会重叠,从而使输入变得模糊,因此它适用于大屏幕,而在小屏幕上则不行

1yjd4xko

1yjd4xko1#

min-contentclamp是您最好的朋友,当谈到适合一些框的最小宽度可能在小屏幕上,同时保持一个合理的宽度时,在屏幕上有足够的空间

#grid{
  grid-template-columns: min-content 1fr min-content;
  display: grid;
  font-size:25px;
}
#grid > *{
  display: flex;
  justify-content:center;
  padding-block: 5px;
}
.to-shrink{
  background:red;
  padding-inline: clamp(2px, 3vw, 30px);
}
<div id="grid">
  <div class="to-shrink">smol</div>
  <div>bigg</div>
  <div class="to-shrink">smol</div>
</div>

为了更好地说明这个组合的作用,请查看下面的gif,并注意填充是如何由于clamp而变化的:

更进一步,您还可以对字体或图标本身的大小应用clamp,同时仍然保持网格布局上的最小内容

相关问题