HTML/CSS - 在 DIV 的一侧创建 "arrow"

标签 html css flexbox

我正在转换一个 div 以在其一端像箭头一样给它一个点。我使用第二个 div 和 CSS 转换将其边框旋转 45 度来完成此操作。我的问题是原始 div 的背景渗入并仍然形成一个正方形。我该如何解决这个问题?我在下面的链接中创建了一个 fiddle ,我希望“第 1 步”的蓝色背景以点而不是平面边缘结束。谢谢。 Fiddle

<ul class="progress">
    <li class="completed">
        <span>
            <span class="order">1 </span>Step 1
        </span>
        <div class="diagonal"></div>
    </li>
    <li>
        <span>
            <span class="order">2 </span>Step 2
        </span>
        <div class="diagonal"></div>
    </li>
    <li>
        <span>
            <span class="order">3 </span>Step 3
        </span>
    </li>
</ul>

CSS:

.progress {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    height: 40px;
    margin: 0 0 1em;
    padding: 0;
}

.progress > li {
    width: 100% !important;
    height: 100% !important;
    border-radius: 0 !important;
    color: #fff !important;
    list-style: none;
    font-size: 16px;
    z-index: 100;
    background-color: #bbb;
    overflow: hidden;
}

.progress > li:last-child {
    border-right: 0;
}

.progress > li.completed {
    background-color: #0071bc;
}

.progress > li span {
    position: relative;
    top: 5px;
 }

.progress > li span .order {
    display: inline-block;
    border: 2px solid #555;
    border-radius: 27px;
    width: 27px;
    height: 27px;
    background-color: #fff;
    color: #555;
    margin: 0 5px 0 10px;
    font-weight: bold;
    text-align: center;
    position: relative;
    top: -1px;
    line-height: 25px;
}


.diagonal {
    width: 28px;
    height: 28px;
    position: relative;
    float: right;
    top: -7px;
}

.diagonal:after {
    content: "";
    position: absolute;
    border-top: 2px solid #f5f5f5;
    border-right: 2px solid #f5f5f5;
    width: 38px;
    height: 38px;
    transform: rotate(45deg);
    transform-origin: 0% 0%;
}

最佳答案

您可以通过设置透明的顶部和底部边框来制作像这样的右箭头/三 Angular 形,然后为左边框提供您想要的箭头颜色。然后对其进行样式设置,使其适合您的布局。

.progress {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
    height: 40px;
    margin: 0 0 1em;
    padding: 0;
}

.progress > li {
    width: 100% !important;
    height: 100% !important;
    border-radius: 0 !important;
    color: #fff !important;
    list-style: none;
    font-size: 16px;
    background-color: #bbb;
    position: relative;
}

.progress > li:last-child {
    border-right: 0;
}

.progress > li.completed {
    background-color: #0071bc;
}

.progress > li:not(.completed) {
  padding-left: 20px;
}

.progress > li span {
    position: relative;
    top: 5px;
 }

.progress > li span .order {
    display: inline-block;
    border: 2px solid #555;
    border-radius: 27px;
    width: 27px;
    height: 27px;
    background-color: #fff;
    color: #555;
    margin: 0 5px 0 10px;
    font-weight: bold;
    text-align: center;
    position: relative;
    top: -1px;
    line-height: 25px;
}

.diagonal {
  width: 0; 
  height: 0; 
  border-top: 20px solid transparent;
  border-bottom: 20px solid transparent;
  border-left: 20px solid #bbb;
  top: 0; right: 0;
  position: absolute;
  transform: translateX(100%);
  z-index: 1;
}
.completed .diagonal {
  border-left-color: #0071bc;
}
<ul class="progress">
    <li class="completed">
        <span>
            <span class="order">1 </span>Step 3
        </span>
        <div class="diagonal"></div>
    </li>
    <li>
        <span>
            <span class="order">2 </span>Step 2
        </span>
        <div class="diagonal"></div>
    </li>
    <li>
        <span>
            <span class="order">3 </span>Step 3
        </span>
    </li>
</ul>

关于HTML/CSS - 在 DIV 的一侧创建 "arrow",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42427021/

相关文章:

html - Bootstrap 4,如何使用 "no scroll"在 SPA 上获得响应高度?

javascript - 无法使用文本框值和计算值进行数学运算

html - npm/bower/css/js 文件导入不正确

html - 如何使用 CSS 在一些文本之后放置图像?

javascript - 带文字功能的动画

javascript - bootstrap/css 不在 Docker 中的 Ruby on Rails 中呈现

html - 为什么 flexbox justify-content 使我的 'block' 按钮内联?

CSS Grid 自动调整每行的宽度

javascript - 使用 Javascript 添加 HTML,想知道何时加载完成

html - 根据浏览器更改 DIV 的属性