17

目前我有一个看起来像这样的 div:

在此处输入图像描述

我需要编辑 HTML/CSS 以便它像下面这样显示一个小三角形。理想情况下,我想使用纯 HTML 和 CSS 来做到这一点,没有图像文件。根据CSS-Tricks可以做到。

在此处输入图像描述

HTML:

<ul id="nav">
    <li class="active"><a href="#"><div class="triangle"></div>Dashboard</a></li>
    <li><a href="users/index.html"><div class="triangle"></div>Manage Users</a></li>
    <li><a href="tickets/index.html"><div class="triangle"></div>Manage Tickets</a></li>
    <li><a href="reports/index.html"><div class="triangle"></div>Reports</a></li>
</ul>

CSS:

#nav {
    float: right;
    margin: 0;
    padding: 8px 0 0 0;
    list-style: none;
    display: inline-block;
}

#nav li {
    float: left;
    padding: 7px 5px;
    margin: 0 5px;
    font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; 
    font-weight: 300;
    border-radius: 7px;
}

#nav li a {
    color: #0b70cc;
    text-decoration: none;
    padding: 7px 5px;
}

#nav li.active a {
    color: #ffffff;
}

#nav li.active {
    background-color: #0b70cc;
    color: white;
}

JSFiddle

如果有人可以帮助我做到这一点,我将不胜感激!

4

2 回答 2

58

在http://cssarrowplease.com/上用箭头生成您自己的 div

你可以随心所欲地配置它,成为一个干净的 CSS


它是如何工作的:
让我们用这种技术创建一个非常简单的三角形:

.container {
  position: relative;
  display: block;
  width: 120px;
  height: 50px;
  background: blue;
}

.container:after{
  position: absolute;
  bottom: 0;
  height: 0;
  width: 0;
  left: 50%;
  border: 40px solid transparent;
  border-bottom-color: red;
  content: "";
}
<div class="container"></div>

重要的是我们应用边框的伪元素的height: 0;& 。width: 0所以你可以想象一个没有大小的元素。这就是边界的起源。所以边框的每一边都是一个三角形(尝试用不同的颜色为每一边着色以理解它)。
因此,要创建“单个三角形”效果,只需将透明颜色应用到边框并为要显示的三角形着色即可。


替代方案:CSS 剪辑路径

您现在可以使用新clip-path的 CSS 轻松创建一个矩形。请注意浏览器支持。像往常一样,IE 和遗憾的是 Edge 都不会像 Opera Mini 一样支持它:我可以使用吗

快速示例:

.new_way {
  position: relative;
  margin: 100px auto;
  background: #88b7d5;
  width: 100px;
  padding: 20px;
  text-align: center;
}

.new_way::after {
  content: '';
  position: absolute;
  top: 100%;
  left: calc(50% - 10px);
  background: #88b7d5;
  width: 20px;
  height: 20px;
  
  /* The points are: (left top: x y, right top: x y, center bottom: x y) */
  clip-path: polygon(0 0, 100% 0, 50% 100%);
}
<div class="new_way">
  Clip Path
</div>

所以现在你只需要 1 行。不错,不是吗?

于 2013-08-13T12:18:12.137 回答
9

这称为“标注”。

这里有些例子:

http://cssdeck.com/labs/bv45bh6p(一些例子)

http://mrcoles.com/blog/callout-box-css-border-triangles-cross-browser/(解释它是如何工作的)

于 2013-08-13T12:17:59.593 回答