【问题标题】:How can I dynamically center the text inside of a button as it gets resized?如何在调整大小时动态地将按钮内的文本居中?
【发布时间】:2020-07-13 22:03:48
【问题描述】:

当我调整视口大小时,我的按钮文本开始离开按钮区域。如果我添加了 display:flex、justify-content:center 和 align-items:center,那么整个按钮就会移动并且与列表脱节。

.textList{
  margin-top:2vh;
  margin-bottom:2vh;
  background: linear-gradient(to left, #743ad5, #d53a9d);
  -webkit-text-fill-color: transparent;
  -webkit-background-clip: text;
  font-size:2vh;
  font-weight:700;
}
.btn{
  text-decoration:none;
  width:4.5vw;
  height:3.5vh;
  background: linear-gradient(to left, #743ad5, #d53a9d);
    -webkit-text-fill-color: white;

  color:white;
  font-family: 'Lato', sans-serif;
  border-radius:1vw;
  font-weight:700;
  font-size:1.75vh;
  position:absolute;
  right:0;
  vertical-align:middle;
  text-align:center;
  

}
#listArea{
  position:absolute;
  top: 25vh;
  width:25vw;
  height:35vh;
  border-style:solid;
  border-width:0.75vw;
  border-image-source: linear-gradient(to left, #743ad5, #d53a9d);
  border-image-slice:3;
  background:white;
  font-size:2vh;
}
<div id="listArea">
  <ul id="divArea">
    <li class="textList">
      <input class="editField">
      <button class="btn">Delete</button>
      <button class="edit">Edit</button>
    </li>
  </ul>
</div>

这里是项目的链接:https://todolist.ibrahimshah.repl.co/

【问题讨论】:

  • 文本对齐:居中;
  • @AdrianBrand 他已经在使用它了。这不是问题,按钮的大小是。

标签: javascript html css responsive-design frontend


【解决方案1】:

当我调整视口大小时,我的按钮文本开始离开该区域 按钮。

您已经使用text-align:center 将按钮内的文本居中。离开按钮边界的文本不是居中问题,而是溢出问题。正如我常说的,你不能把 10 加仑的水放在一个 5 加仑的桶里。你应该在你的按钮上添加一个min-width,这样它就永远不会小于它的内容。您还应该考虑将min-width 添加到#listArea 以防止li 及其内容溢出框。

.textList{
  margin-top:2vh;
  margin-bottom:2vh;
  background: linear-gradient(to left, #743ad5, #d53a9d);
  -webkit-text-fill-color: transparent;
  -webkit-background-clip: text;
  font-size:2vh;
  font-weight:700;
}
.btn{
  text-decoration:none;
  width:4.5vw;
  min-width:50px; /* <-- Don't let the button get too small */
  height:3.5vh;
  background: linear-gradient(to left, #743ad5, #d53a9d);
    -webkit-text-fill-color: white;

  color:white;
  font-family: 'Lato', sans-serif;
  border-radius:1vw;
  font-weight:700;
  font-size:1.75vh;
  position:absolute;
  right:0;
  vertical-align:middle;
  text-align:center;
}
#listArea{
  position:absolute;
  top: 25vh;
  width:25vw;
  height:35vh;
  border-style:solid;
  border-width:0.75vw;
  border-image-source: linear-gradient(to left, #743ad5, #d53a9d);
  border-image-slice:3;
  background:white;
  font-size:2vh;
}
<div id="listArea">
  <ul id="divArea">
    <li class="textList">
      <input class="editField">
      <button class="btn">Delete</button>
      <button class="edit">Edit</button>
    </li>
  </ul>
</div>

【讨论】:

  • 无法想象为什么对问题的正确解释和可行的解决方案投反对票。
【解决方案2】:

有多种方法可以做到这一点,标准方法是使用 text-align:center;但这仅适用于水平轴,如果您想使文本水平和垂直居中,无论按钮大小和形状如何,都可以使用 flex 定位,如按钮示例 2 所示。

示例:

.btn {background:#ff0000;color:white;font-size:20px;padding:8px 32px;width:100%;text-align:center;margin:20px auto;max-width:600px;height:10vh;}

.btn2 {background:#ff0000;color:white;font-size:20px;padding:8px 32px;width:100%;display:flex;justify-content:center;align-items:center;margin:20px auto;max-width:600px;height:10vh}
<div class="btn">View More</div>

<div class="btn2">View More</div>

【讨论】:

  • 看我的回答。居中不是这里的问题。您也没有显示button 的示例,这就是问题所在。
  • 此示例以最简单的形式准确显示了所需的内容,原始问题包含不必要的代码,因此并不期望 OP 应该能够弄清楚如何用 div 包装一个 标签使其成为一个按钮
  • @GibsonFX 这个例子没有解决 OP 面临的实际问题,这是一个溢出问题,而不是居中问题。而且,添加a 不会使某些东西成为button,而是使其成为anchorbuttoninput type="button" 使某物成为按钮。你可以看看 OP 的代码,看看他已经在使用text-align:center
  • 如果 OP 遵循了指导方针并在一个最小的可重现示例中提供了代码,那么回答的人可能会阅读代码,如果不是,那么这是 OP 错误识别问题的错。
  • @GibsonFX OP 是否可以做得更好是无关紧要的。这个答案实际上并没有解决明确提出的问题:当我调整视口大小时,我的按钮文本开始离开按钮区域。而且,OP 的代码几乎没有那么复杂或臃肿正如你所说的那样。对不起,但你没有一条腿可以站在这里。这不是问题的答案,它甚至没有使用类似于 OP 在尝试中使用的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2019-07-23
  • 2018-05-16
  • 2014-10-21
  • 1970-01-01
相关资源
最近更新 更多