html - CSS 功能区 "menu"未按预期工作

标签 html css

因此,我创建了我计划自己使用的功能区菜单的一部分。所以这是到目前为止的样子:

悬停前:

Before hover

悬停时:

On hover

基本上,我希望它显示我的社交图标,并在我添加其他横幅时能够使用它们。

这是我目前使用的代码:

<body>
    <ul class="social">
        <li class="ribbon" media="facebook"><a href="http://facebook.com"><i class="fa fa-facebook" aria-hidden="true"></i></a></li>
    </ul>

    <script src="https://use.fontawesome.com/c2f336433a.js"></script>
</body>

这是 CSS:

@import 'reset';
@import 'mixins';

ul.social {
    position: absolute;
    z-index: 4;
    margin: -225px auto;
    list-style: none;
    right: 0;

    li.ribbon {
        float: right;
        cursor: pointer;
        position: relative;
        width: 75px;
        height: 250px;

        border: none;
        color: white;
        padding: 5px;

        -webkit-appearance: none;
        -moz-appearance: none;
        appearance: none;

        @include transition(all .2s ease-in-out);
        @include filter(drop-shadow(0 1px 10px rgba(0, 0, 0, 0.5)));

        span {
            line-height: 20px;
            font-size: 5em;
        }
    }
    li.ribbon:hover {
        margin-top: 70px;
        color: white;
    }
    li.ribbon:before {
        content: '';
        position: absolute;
        top: 100%; left: 0;
        width: 0; height: 0;

        border-top: 25px solid blue;
        border-right: 50px solid transparent;
    }
    li.ribbon:after {
        content: '';
        position: absolute;
        top: 100%; right: 0;
        width: 0; height: 0;

        border-top: 25px solid blue;
        border-left: 50px solid transparent;
    }

    li.ribbon[media="facebook"] {
        background: #3b5998;
        color: #1e2e4f;
        margin-right: 5px;
    }
    li.ribbon[media="facebook"]:before,
    li.ribbon[media="facebook"]:after {
        border-top-color: #3b5998;
    }
}

请注意,重置只是 eric meyer 重置,mixin 仅用于转换等......

最佳答案

您看不到图标的原因是 ul 上有 225px 的负边距。悬停时,只有 limargin-top 被设置为 70pxul 仍然有负边距,所以 li 仍然在视口(viewport)上方 155px 左右。这意味着未定位(即具有静态定位)且靠近 li 顶部的 a 仍然不可见。

您可以通过避免 ul 上的 margin 并移动 li 来纠正此问题。我使用了 transform: translateY() 来移动 li,因为这比使用边距(需要重新绘制)更能提高性能。

我还添加了一些额外的属性,例如 text-alignline-height 等,以更好看

ul.social {
  position: absolute;
  z-index: 4;
  margin: 0px auto; /* modified */
  list-style: none;
  right: 0;
}
ul.social li.ribbon {
  float: right;
  cursor: pointer;
  position: relative;
  width: 75px;
  height: 100px; /* modified */
  border: none;
  color: white;
  padding: 5px;
  text-align: center; /* added */
  line-height: 100px; /* added, equal to height */
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  transform: translateY(-100%); /* added */
  transition: all .2s ease-in-out;
  -webkit-filter: drop-shadow(0 1px 10px rgba(0, 0, 0, 0.5));
}
ul.social li.ribbon span {
  line-height: 20px;
  font-size: 5em;
}
ul.social li.ribbon:hover {
  transform: translateY(0%); /* added */
  /* margin-top: 70px; removed for better performance */
}
ul.social li.ribbon:before {
  content: '';
  position: absolute;
  top: 100%;
  left: 0;
  width: 0;
  height: 0;
  border-top: 25px solid blue;
  border-right: 50px solid transparent;
}
ul.social li.ribbon:after {
  content: '';
  position: absolute;
  top: 100%;
  right: 0;
  width: 0;
  height: 0;
  border-top: 25px solid blue;
  border-left: 50px solid transparent;
}
ul.social li.ribbon[media="facebook"] {
  background: #3b5998;
  color: #1e2e4f;
  margin-right: 5px;
}
ul.social li.ribbon[media="facebook"]:before,
ul.social li.ribbon[media="facebook"]:after {
  border-top-color: #3b5998;
}

/* added */
ul.social li.ribbon a {
  color: white;
}
<body>
  <ul class="social">
    <li class="ribbon" media="facebook"><a href="http://facebook.com"><i class="fa fa-facebook" aria-hidden="true"></i></a>
    </li>
  </ul>

  <script src="https://use.fontawesome.com/c2f336433a.js"></script>
</body>

关于html - CSS 功能区 "menu"未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37766178/

相关文章:

javascript - 如何拉伸(stretch)图像以适合网页中的正方形?

javascript - phantomjs rasterize.js 在渲染为 pdf 时不应用来自外部 css 的样式

html - CSS模仿div中的简单表格

javascript - 使用 JQuery 更改父 div 的背景时,子 div 消失

html - 如何将 d3.js 示例嵌入到 Jekyll 博客文章中?

html - 涉及媒体查询的绝对和相对定位?

css - 是否有使用大括号作为子类快捷方式的 CSS 父选择器?

javascript - 在覆盖和关闭按钮或链接中为 img 添加边框

html - 垂直对齐中心输入和 div 中的按钮

asp.net - 为什么 IE9 在 ASP.NET 中绘制这个 div 不正确?