【问题标题】:Twitter Bootstrap navbar hover effect - transition border expand from centerTwitter Bootstrap 导航栏悬停效果 - 过渡边框从中心展开
【发布时间】:2016-12-07 15:37:15
【问题描述】:

如何让这个过渡从元素的中心开始移动?

这是我的 CSS:

/* Navbar */
.navbar-fixed-top{
    top: 80px;
}
.navbar-default{ /* assigning the top bar to the entire navbar div element */
    background-color: #4F4F4F;
}
nav.navbar {  box-shadow: 0 0 2px 0 #ccc; }
nav.navbar a { color: #FF7D36; }
nav.navbar ul.navbar-nav a { color: #FF7D36; border-style: solid; border-width: 0 0 2px 0; border-color: #000; }
nav.navbar ul.navbar-nav a:hover,
nav.navbar ul.navbar-nav a:visited,
nav.navbar ul.navbar-nav a:focus,
nav.navbar ul.navbar-nav a:active { background: #000; }
nav.navbar ul.navbar-nav a:hover
{
    border-color: #FF7D36;
    transition: border 0.5s ease-in-out;
}

过渡效果很好,但我希望边框从中心向左和向右扩展...... 谢谢!

编辑:过渡现在有效,但我使用 twitter 引导程序 导航栏...当我使用小型设备并且链接现在 垂直定位,在 a 元素中没有 padding-left, 因为它是定位绝对的……希望你理解。 (所以我有 浏览器左侧和a元素之间没有距离)

在这里查看我的工作示例(当您调整移动设备浏览器的大小时,您可以看到不再有距离)

/* Navbar */
.navbar-fixed-top{
    top: 80px;
}
.navbar-default{ /* assigning the top bar to the entire navbar div element */
    background-color: #4F4F4F;
}
nav.navbar {
    box-shadow: 0 0 2px 0 #ccc;
}
nav.navbar a {
    color: #FF7D36;
}
nav.navbar ul.navbar-nav a {
    color: #FF7D36;
    border-style: solid;
    border-width: 0 0 2px 0;
    border-color: #000;
}
nav.navbar ul.navbar-nav a:hover,
nav.navbar ul.navbar-nav a:visited,
nav.navbar ul.navbar-nav a:focus,
nav.navbar ul.navbar-nav a:active {
    background: #000;
}

nav.navbar ul.navbar-nav a {
    text-decoration: none;
    position: relative;
    display: inline-block;
}
nav.navbar ul.navbar-nav a::after {
    content: '';
    width: 100%;
    position: absolute;
    top: 100%;
    left: 0;
    height: 2px;
    background-color: #FF7D36;
    transform: scaleX(0);
    transition: transform .35s ease;
}
nav.navbar ul.navbar-nav a:hover::after {
    transform: scaleX(1);
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Basic Bootstrap Template</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Optional Bootstrap theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
</head>
<body>
    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Navigation ein-/ausblenden</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Projekt-Titel</a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
            <li class="active"><a href="#">Start</a></li>
            <li><a href="#ueber">Über</a></li>
            <li><a href="#kontakt">Kontakt</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
</body>
</html>                                		

【问题讨论】:

    标签: twitter-bootstrap css css-transitions


    【解决方案1】:

    我希望边框从中心向左和向右扩展。

    你不能像那样过渡边框。

    我建议使用伪元素和过渡的变换比例。

    a {
      text-decoration: none;
      position: relative;
      display: inline-block;
    }
    a::after {
      content: '';
      width: 100%;
      position: absolute;
      top: 100%;
      left: 0;
      height: 2px;
      background: red;
      transform: scaleX(0);
      transition: transform .35s ease;
    }
    a:hover::after {
      transform: scaleX(1);
    }
    &lt;a href="#1"&gt;SOME LINK&lt;/a&gt;

    或者,您可以转换宽度,但仍需要转换(这次是平移)来保持居中。

    a {
      text-decoration: none;
      position: relative;
      display: inline-block;
    }
    a::after {
      content: '';
      width: 0%;
      position: absolute;
      top: 100%;
      left: 50%;
      height: 2px;
      background: red;
      transform: translateX(-50%);
      transition: width .5s ease;
    }
    a:hover::after {
      width: 100%;
    }
    &lt;a href="#1"&gt;SOME LINK&lt;/a&gt;

    编辑

    我知道当导航在较低的视口宽度下垂直时,“边框”可能需要稍微宽一些。

    这可以通过改变宽度和调整定位来实现……比如

    nav.navbar ul.navbar-nav a::after {
        content: '';
        width: 80%;
        position: absolute;
        top: 100%;
        left: 10%; /* (100% - 80%) / 2 */
        height: 2px;
        background-color: #FF7D36;
        transform: scaleX(0);
        transition: transform .35s ease;
    }
    

    Codepen Demo

    【讨论】:

    • 这会起作用,但我使用 twitter 引导导航栏......当我使用小型设备并且链接现在垂直定位时,a 元素中没有填充左侧,因为它是定位绝对...希望你理解。 (所以我在左侧浏览器和 a 元素之间没有距离)
    • OK..那么在这种情况下您希望边框做什么?
    • 边框过渡工作正常。谢谢。唯一的问题是 nav a 项与左边缘没有距离。
    • 哦...只需将宽度更改为 80% 之类的...并相应调整位置...就像这样codepen.io/Paulie-D/pen/JKaWOY
    • 好的,谢谢...但我还有另一个问题。看这个例子:getbootstrap.com/examples/navbar-fixed-top/#我不是指距离.. sry,我指的是选定(活动)元素的背景颜色。使用过渡效果,背景颜色不会覆盖导航项的整个宽度,而只会覆盖单词的宽度。当我删除过渡时,它的工作方式就像您在引导示例中看到的那样。
    猜你喜欢
    • 2015-03-31
    • 2021-02-07
    • 2015-04-21
    • 2020-02-07
    • 1970-01-01
    • 2021-12-22
    • 2013-10-12
    • 1970-01-01
    • 2017-06-22
    相关资源
    最近更新 更多