【问题标题】:CSS overlapping arrowCSS 重叠箭头
【发布时间】:2012-06-17 21:56:42
【问题描述】:

我正在尝试仅使用 CSS3 完成与下图非常相似的事情。

唯一的区别是最后一个 div 会有一个尖头。

在我寻找类似的东西来适应时,我遇到了this js fiddle,它与我想要做的非常接近,但引入了两个问题:首先,它是用画布完成的,其次,它迫使我每个箭头有效地“绘制”箭头两次——一次用于 div,一次用于下一个箭头之前的空间。必须有一些更清洁的方式来做到这一点——有人可以在这里为我提供一些指导吗?

我需要知道的是如何构建上图所示的内容——一系列重叠的 div 箭头——仅使用 CSS3。

【问题讨论】:

  • 是否为每个箭头使用背景图像而不是上述选项? =>|>=>|>= 上面的箭头实际上并不重叠。
  • @marabutt 我猜他们可能不会——看起来每个箭头的末端都与我旁边的尾巴相遇。无论哪种情况,我都想做重叠。

标签: css


【解决方案1】:

试试这个 - http://jsfiddle.net/ksNr3/8/

ul {
    margin: 20px 60px;
}

ul li {
    display: inline-block;
    height: 30px;
    line-height: 30px;
    width: 100px;
    margin: 5px 1px 0 0;
    text-indent: 35px;
    position: relative;
}

ul li:before {
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    left: -2px;
    border-style: solid;
    border-width: 15px 0 15px 15px;
    border-color: transparent transparent transparent #fff;
    z-index: 0;
}

ul li:first-child:before {
    border-color: transparent;
}

ul li a:after {
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    right: -15px;
    border-style: solid;
    border-width: 15px 0 15px 15px;
    border-color: transparent transparent transparent #ccc;
    z-index: 10;
}

ul li.active a {
    background: orange;
    z-index: 100;
}

ul li.active a:after {
    border-left-color: orange;
}

ul li a {
    display: block;
    background: #ccc;
}

ul li a:hover {
    background: pink;
}

ul li a:hover:after {
    border-color: transparent transparent transparent pink; 
}
​

更新 - 使其可点击并最小化重叠区域 - http://jsfiddle.net/ksNr3/8/

【讨论】:

  • 您先生,是一位绅士和一位学者。这非常有帮助。
  • @arttronics 箭头似乎属于错误的元素,因为它们是如何重叠的。当您使用 Firebug 检查元素时,它会突出显示每个元素在页面上占据的空间,无论该空间是否对用户可见。请注意,构成三角形的 :before:after pseudo-elements 实际上并未使用 li 元素突出显示。建议的解决方案按预期工作。
  • @arttronics 啊,我的错误我明白你的意思了。你是对的,我以前没有注意到这一点。三角形是通过将 3 个边框边设置为透明来制作的,即使它们不可见,它们仍被视为 mouseover 上元素的一部分。我不确定是否有一个简单的解决方法,但解决方法可能是将文本放在<a> 标签中并将mouseover 事件附加到这些标签上?不是理想的行为,但至少不会混淆您将鼠标悬停在哪个面包屑上。
  • 提示:如果您移动 .active 样式使其位于悬停样式下方,则活动链接将不会显示为可点击。考虑到活动样式显示您当前所在的页面,这通常是很好的用户体验。
  • @arttronics 哦,我什至没有意识到这是个问题,我说的是完全不同的东西。我现在去看看。
【解决方案2】:

以下 CSS3 解决方案不使用任何图像并且易于使用。

我创建了 两个 完整注释的示例,可以进一步扩展。

一个示例具有“视觉上”相互堆叠的箭头。

另一个例子是就像你的问题中的图片,箭头上带有“end-caps”。

每个示例都有一个简单的 jQuery .click() 事件侦听器,因此无论您在 breadcrumb 中的哪个位置单击,都可以看到锚点将接收到正确的单击事件。箭尾工作正常。

屏幕截图显示了 NavBar 面包屑的活动 CSS 悬停:

当在浏览器中禁用 CSS 时,面包屑导航会优雅地回退以满足可访问性要求。

参考:   jsFiddle

【讨论】:

  • 对于类似的 Breadcrumb NavBAR 没有我制作的 CSS3 Rotation,请参阅SO Answer
猜你喜欢
  • 1970-01-01
  • 2020-04-12
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 2013-07-10
  • 2015-02-09
相关资源
最近更新 更多