【问题标题】:How to add arrow to div?如何将箭头添加到div?
【发布时间】:2025-12-31 15:50:07
【问题描述】:

我正在尝试为带有箭头的 div 创建错误标签,但居中出现问题。

我得到:

我需要类似:

HTML:

<div class="error-label-arrow"></div>
<div class="error-label">This field is required.</div>

CSS:

div.error-label{
    padding: 7px 10px 0 4px;
    color: #fff;
    background-color: #DA362A;
    -webkit-border-radius: 5px; 
    -moz-border-radius: 5px; 
    border-radius: 5px;
}

div.error-label-arrow{
    border-top: 10px solid transparent;
    border-bottom: 10px solid transparent; 
    border-right:10px solid #DA362A;
    float: left;
}

有可能吗?

这里是fiddle

【问题讨论】:

  • 添加一些填充?或者添加一个小提琴,我会告诉你我的意思
  • 您可以使用背景图像而不是使用 CSS 创建箭头,然后为 div 提供固定高度,vertical-align: center; 应该可以工作。它也适用于旧版浏览器。

标签: html css css-shapes


【解决方案1】:

您可以使用CSS Pseudo classes 来执行此操作,因此您不需要“箭头”元素:

div.error-label {
  padding: 10px;
  color: #fff;
  background-color: #DA362A;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
  width: 190px;
  margin: 30px;
}

div.error-label:before {
  content: ' ';
  height: 0;
  position: absolute;
  width: 0;
  left: 18px;
  border: 10px solid transparent;
  border-right-color: #DA362A;
}
&lt;div class="error-label"&gt;This field is required.&lt;/div&gt;

【讨论】:

  • 是否可以删除margin:30px;,因为它会在周围区域产生大量空白。
  • @Kirix 我只应用了margin,这样您就可以看到屏幕上的箭头。注意:更改填充/边距需要更改伪类上的left
【解决方案2】:

解决办法

div.error-label{
    padding: 7px 10px 0 4px;
    color: #fff;
    background-color: #DA362A;
    -webkit-border-radius: 5px; 
    -moz-border-radius: 5px; 
    border-radius: 5px;
    width: 150px;
    margin-left: 5px;
}

div.error-label-arrow{
    border-top: 10px solid transparent;
    border-bottom: 10px solid transparent; 
    border-right:10px solid #DA362A;
    float: left;
    height: 1px;
    margin-top: 3px;
}
<div class="error-label-arrow"></div>
<div class="error-label">This field is required.</div>

【讨论】:

    【解决方案3】:

    您可以通过使用Pseudo elements查看以下答案来实现此目的

    .error{
       position: relative;
       background: red;
       padding: 10px;
       color: #fff;
       margin:0 0 0 12px;
       width:auto;
       display:inline-block;
     
     }
    
    .error::before {
    	content: "";
    	width: 0;
    	height: 0;
    	border-style: solid;
    	border-width: 9px 11px 9px 0;
    	border-color: transparent red transparent transparent;
    	position: absolute;
    	left: -11px;
    	top: 0;
    	bottom: 0;
    	margin: auto;
    }
    
    .arrow_type2 {
    	position: relative;
    	background: #28d57f;
    	border: 3px solid #0cf5a7;
      padding:50px 20px;
      margin-left:20px;
      margin-top:20px;
      width:auto;
      display:inline-block;
    }
    .arrow_type2:after, .arrow_type2:before {
    	right: 100%;
    	top: 50%;
    	border: solid transparent;
    	content: " ";
    	height: 0;
    	width: 0;
    	position: absolute;
    	pointer-events: none;
    }
    
    .arrow_type2:after {
    	border-color: rgba(40, 213, 127, 0);
    	border-right-color: #28d57f;
    	border-width: 10px;
    	margin-top: -10px;
    }
    .arrow_type2:before {
    	border-color: rgba(12, 245, 167, 0);
    	border-right-color: #0cf5a7;
    	border-width: 14px;
    	margin-top: -14px;
    }
    <div class="error">This is field required</div>
    
    
    <div class="arrow_type2">Arrow type two</div>

    【讨论】: