有很多方法可以做到这一点,这是我的看法:
这是我将使用的布局。<nav>
固定在顶部,下方有一个凹<div>
口。内容位于这两个内容的下方,其顶部填充等于导航和缺口的高度。
+--------------------------------+--+
| | |
| nav (fixed) | | <-- the content is below these fixeds,
| | | which have a higher z-index
+--------------------------------+ |
| notch (fixed) | |
+--------------------------------+ |
| |
| |
| |
| content |
| section |
| (padding-top = nav+notch heights) |
| |
| |
+-----------------------------------+
我将假设您想要一个流畅的布局,所以我选择使用 FlexBox (http://www.w3.org/TR/css3-flexbox/) 来保持缺口在浏览器调整大小时应位于的位置。如果你有一个固定的布局,还有一些更直接的解决方案,它们不需要 FlexBox 或计算应该在灵活容器中放置凹口的位置。
由于其他部分应该相当简单,这里是缺口的细分<div>
+---------------------------------------------------+
| | | | |
| spacing | notch | notch | spacing |
| (flexible) | left | right | (flexible) |
| | | | |
+---------------------------------------------------+
两个外部<div>
s 是弯曲的,并且与background-color
相同<nav>
。然后,两个内部凹口使用渐变来创建三角形。
background: -webkit-linear-gradient(
top left,
rgba(145, 145, 145, 1) 0%,
rgba(145, 145, 145, 1) 50%,
transparent 50%,
transparent 100%
);
通过从左上角和右上角开始渐变,<div>
s 在对角线上填充到一半。
剩下的只是确定当您单击导航链接时应该放置凹口的位置。<div>
在确定用户点击的位置之后,我通过在灵活的 s 中添加和删除宽度来做到这一点。需要一些时间来了解 FlexBox 在从正在弯曲的元素中添加和减去宽度时的工作原理,但您可以检查代码以查看这一点。
我在 Chrome 中使用 -webkit- 前缀完成了所有这些操作,因此请在 Chrome 或 Safari 中运行此 JSFiddle:http: //jsfiddle.net/dwJbq/
As I stated previously, there are several other ways this could be done and it would also be much easier if not using a fluid layout. Another idea you could try is to have a notch for every nav link, and then showing/hiding the notch underneath the link that was clicked. This doesn't require you to calculate anything, rather just change the backgrounds of the notches.
Here is an example of how that could be done: http://jsfiddle.net/V4K6K/1/