带有 CSS 的平行四边形导航背景

Posted

技术标签:

【中文标题】带有 CSS 的平行四边形导航背景【英文标题】:Parallelogram navigation background with CSS 【发布时间】:2012-07-10 06:19:51 【问题描述】:

我正在尝试创建此导航菜单(绿色突出显示为活动页面,灰色为悬停状态):

我可以使用以下 CSS 制作平行四边形:

ul#nav li a 
    text-decoration:none;
    padding:4px 10px;
    border-radius:3px;
    transform: skew(-10deg);
    -o-transform: skew(-10deg);
    -moz-transform: skew(-10deg);
    -webkit-transform: skew(-10deg);
    color:#757575;


ul#nav li a:hover 
    background:#f3f1eb;


ul#nav li a.current-menu-item 
    color:#fff;
    background:#5d9732;


ul#nav li a.current-menu-item:hover 
    background:#5d9732;

不幸的是,这也会导致文本倾斜,显示为斜体:

这是一个显示设置的 jsfiddle(尽管 jsfiddle 中的倾斜不起作用):http://jsfiddle.net/K3bQJ/4/

有什么办法可以防止文字歪斜,使它不显示为斜体?我正在加载 jQuery,但更愿意避免它,或者至少有一个可用的 CSS 后备。

感谢您的建议!

【问题讨论】:

供将来参考,cssdesk.com 仅适用于没有 javascript 组件的 CSS 和 html。我认为这种测试非常好。 我现在无法测试这个,但是如何将视觉效果放在 li 元素上,例如背景颜色和变换,然后在锚元素上设置变换:无? 在 jsFiddle 中应用 display: inline-block;。 jsfiddle.net/K3bQJ/5 有趣的问题。你知道,有时候只使用和图像真的很酷:) +1 旁注: 对于使用 箭头 的备用 CSS3 导航方法,请参阅我的SO Answer。干杯! 【参考方案1】:

Try this 在标签内添加一个 span 并将其设置为相反的方向(注意使用 skewX,根据https://developer.mozilla.org/en/CSS/-moz-transform 认为这是正确的)

<ul id="nav">
    <li><a class="current-menu-item" href="#"><span>Nav Item 1</span></a></li>
<li><a href="#"><span>Nav Item 2</span></a></li>
<li><a href="#"><span>Nav Item 3</span></a></li>
</ul>

ul#nav li a 
    display: inline-block;
    text-decoration:none;
    padding:4px 10px;
    border-radius:3px;
            transform: skewX(-10deg);
         -o-transform: skewX(-10deg);
       -moz-transform: skewX(-10deg);
    -webkit-transform: skewX(-10deg);
    color:#757575;


ul#nav li a span 
    display: inline-block;
            transform: skewX(10deg);
         -o-transform: skewX(10deg);
       -moz-transform: skewX(10deg);
    -webkit-transform: skewX(10deg);

【讨论】:

也有同样的想法,只是在a 上尝试过,而不是用跨度包装。 完美,这行得通!我只是将背景样式添加到 li 而不是 a 元素以避免添加更多标记,然后将反向倾斜设置为锚元素。非常感谢! 根据developer.mozilla.org/en/CSS/-moz-transform,您不应使用 skew() 而是提供您尝试倾斜的预期轴(在本例中为 skewX())我已更新 cssdesk.com 链接 +1 很好的答案。仅供参考:您对 Jason 的最后评论很重要,因为 Firefox v14 删除了 transform skew()。我认为您的 cssdesk.com 演示也应该是您答案的一部分。干杯!

以上是关于带有 CSS 的平行四边形导航背景的主要内容,如果未能解决你的问题,请参考以下文章

CSS“透视”背景 - 疯狂的导航菜单问题

带有列表视图的导航视图的背景颜色

css用背景图片制作导航栏分割线

如何在 iOS 13 中删除带有外观的导航栏背景?

用于更改主导航背景颜色的 CSS

将自定义 CSS 导航栏从水平转换为垂直