如何使用 Font Awesome 5 使按钮跟随其内容的形状?

How to make a button follow the shape of its content using Font Awesome 5?

是否可以将 button 的形状更改为其内容的形状?在这种情况下,我使用 "fa-trash-alt" 图标并有一个 button 具有悬停效果,我只想为图标而不是整个矩形显示。

按钮:

<button type='button' id='{0}' onClick='delete_row(this.id)' style ='font-size:17px' class='btn btn-outline-danger button_border' data-toggle='modal' data-target='#exampleModalCenter'><i class='far fa-trash-alt '></i></button>"

我的想法是依靠图标的 SVG 版本并考虑 pointer-events 仅在路径上启用交互但悬停在图标内不起作用,因为在视觉上它不是路径的一部分.

这里举例说明。

button {
  font-size:80px;
  margin:10px;
  pointer-events:none;
  border:none;
  background:none;
}
svg {
  border:1px solid red;
}
svg path{
  pointer-events:auto;
}

button:hover path{
  fill:red;
}
<script src="https://use.fontawesome.com/releases/v5.12.0/js/all.js"></script>

<button type='button' id='{0}' onClick='delete_row(this.id)' class='btn btn-outline-danger button_border' data-toggle='modal' data-target='#exampleModalCenter'><i class='fas fa-trash-alt '></i></button>

<button type='button' id='{0}' onClick='delete_row(this.id)' class='btn btn-outline-danger button_border' data-toggle='modal' data-target='#exampleModalCenter'><i class='far fa-trash-alt '></i></button>

您可以考虑使用不同的图标或不同的 SVG,以确保整个区域都属于该路径。


在您的特定情况下,您可以添加伪元素来覆盖 inside 部分并恢复鼠标交互:

button {
  margin:10px;
  pointer-events:none;
  border:none;
  background:none;
  padding:0;
  position:relative;
}
button:before,
button:after{
  content:"";
  position:absolute;
  bottom:0.12em;
  left:0.12em;
  right:0.12em;
  top:0.2em;
  pointer-events:auto;
}
button:after{
  top:0.1em;
  height:0.2em;
  left:0.24em;
  right:0.24em;
}

svg path{
  pointer-events:auto;
}

button:hover path{
  fill:red;
}
<script src="https://use.fontawesome.com/releases/v5.12.0/js/all.js"></script>

<button type='button' id='{0}' onClick='delete_row(this.id)' class='btn fa-10x btn-outline-danger button_border' data-toggle='modal' data-target='#exampleModalCenter'><i class='far fa-trash-alt'></i></button>

<button type='button' id='{0}' onClick='delete_row(this.id)' class='btn fa-5x  btn-outline-danger button_border' data-toggle='modal' data-target='#exampleModalCenter'><i class='far fa-trash-alt'></i></button>

<button type='button' id='{0}' onClick='delete_row(this.id)' class='btn fa-3x  btn-outline-danger button_border' data-toggle='modal' data-target='#exampleModalCenter'><i class='far fa-trash-alt'></i></button>

如果您使用 bootstrap.

,您可以添加 button_border class - border-0

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.0/js/all.min.js"></script>

<button type='button' id='{0}' onClick='delete_row(this.id)' style ='font-size:17px' class='btn btn-outline-danger border-0' data-toggle='modal' data-target='#exampleModalCenter'><i class='far fa-trash-alt '></i></button>

或者你可以只留下 btn class 并添加你想要的颜色。

.red-button [class*=fa] {
  color: #dc3545;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.0/js/all.min.js"></script>

<button type='button' id='{0}' onClick='delete_row(this.id)' style='font-size:17px' class='btn red-button' data-toggle='modal' data-target='#exampleModalCenter'><i class='far fa-trash-alt '></i></button>

或者您可以使用其他适合您的元素,例如 span

.red-button [class*=fa] {
  color: #dc3545;
}

.red-button {
  cursor: pointer;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.0/js/all.min.js"></script>

<span id='{0}' onClick='delete_row(this.id)' style='font-size:17px' class='red-button' data-toggle='modal' data-target='#exampleModalCenter'><i class='far fa-trash-alt '></i></span>

有很多方法。