将文本与按钮内的图标对齐

Posted

技术标签:

【中文标题】将文本与按钮内的图标对齐【英文标题】:Aligning text to icon within a button 【发布时间】:2021-08-25 15:28:40 【问题描述】:

我创建了一个按钮,其中包括一个 bin 图标和“删除”一词 - 图标应设置在左侧,文本和黑色按钮内的高度相同。无论我尝试什么都行不通,谁能告诉我哪里出错了??

这是一个简化的小提琴: https://jsfiddle.net/1q5s0cg8/13/

.btn 
  background-color: rgb(39, 40, 42);
  border-radius: 0px;
  height: 48px;
  width: 112px;
  margin-left: 12px;


.icon 
  background-color: red;
  height: 32px;
  width: 32px;


span 
  font-size: 12px;
  color: rgb(255, 255, 255);
<div class="btn">
  <div class="icon"></div>
  <span>Remove</span>
</div>

【问题讨论】:

【参考方案1】:

图标需要内联显示(在本例中为inline-block)并设置vertical-align: middle 以垂直对齐两个元素。

问题是div元素默认使用显示block,它总是占据整行并向下推其他内容。

(我还设置了.icon 以匹配.btn 的高度,假设这是预期的结果)

.btn 
  background-color: rgb(39, 40, 42);
  border-radius: 0px;
  height: 48px;
  width: 112px;
  margin-left: 12px;


.icon 
  background-color: red;
  /* Removed this height: */
  /* height: 32px; */ 
  width: 32px;
  
  /* New styles: */
  display: inline-block;
  vertical-align: middle;
  height: 100%;


span 
  font-size: 12px;
  color: rgb(255, 255, 255);
<div class="btn">
  <div class="icon"></div>
  <span>Remove</span>
</div>

【讨论】:

【参考方案2】:

有两种方法可以做到这一点。

在要并排显示的元素上使用display: inline-block;。 使用display: flex;我觉得它很容易使用。

1 - 这是使用display: inline-block; 的一个。在这种情况下,并排显示项目的样式将应用于项目本身。

.btn 
  background-color: rgb(39, 40, 42);
  border-radius: 0px;
  height: 48px;
  width: 112px;
  margin-left: 12px;


.icon 
  background-color: red;
  height: 32px;
  width: 32px;
  display: inline-block;
  vertical-align: top;


span 
  font-size: 12px;
  color: rgb(255, 255, 255);
  display: inline-block;
  vertical-align: top;
<div class="btn">
  <div class="icon"></div>
  <span>Remove</span>
</div>

2 - 这是使用display: flex; 的一个。而在这种情况下,flex 样式将应用于两个元素的父级。

.btn 
  background-color: rgb(39, 40, 42);
  border-radius: 0px;
  height: 48px;
  width: 112px;
  margin-left: 12px;
  display: flex;
  align-items: flex-start;
  flex-direction: row;


.icon 
  background-color: red;
  height: 32px;
  width: 32px;


span 
  font-size: 12px;
  color: rgb(255, 255, 255);
<div class="btn">
  <div class="icon"></div>
  <span>Remove</span>
</div>

Fiddle with display: inline-block

Fiddle with display: flex

【讨论】:

以上是关于将文本与按钮内的图标对齐的主要内容,如果未能解决你的问题,请参考以下文章

将文本与按钮顶部对齐,而不在其中使用跨度

md 按钮内的字体真棒图标对齐

垂直对齐div按钮内的文本?

如何将 Qlistwidgetitem 文本与图标垂直对齐?

如何将文本右侧的图标与图标列表元素模块对齐? [关闭]

按钮中文本和图标的垂直对齐