【问题标题】:Floating Action Menu not working with Bootstrap CSS浮动操作菜单不适用于 Bootstrap CSS
【发布时间】:2017-06-05 21:54:29
【问题描述】:

我有一个浮动操作菜单(JQuery + CSS):

HTML:

<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<div id="hamburger" class="waves-effect waves-light">
    <div id="wrapper">
      <span class="icon-bar" id="one"></span>
      <span class="icon-bar" id="two"></span>
      <span class="icon-bar" id="thr"></span>
    </div>
  </div>

  <div id="btnExit" class="hamburger-nav">
    <span class="floatingmenu_label">Exit</span>
    <img style="width: 24px; height: 24px;" src="https://www.iconfinder.com/data/icons/small-n-flat/24/pencil-128.png">
  </div>
  <div id="btnUsers" class="hamburger-nav">
    <span class="floatingmenu_label">Users</span>
     <img style="width: 24px; height: 24px;" src="https://www.iconfinder.com/data/icons/small-n-flat/24/pencil-128.png">
  </div>
  <div id="btnJobs" class="hamburger-nav">
    <div class="floatingmenu_label">Jobs</div>
     <img style="width: 24px; height: 24px;" src="https://www.iconfinder.com/data/icons/small-n-flat/24/pencil-128.png">
  </div>
  <div id="btnFilters" class="hamburger-nav">
    <span class="floatingmenu_label">Filters</span>
     <img style="width: 24px; height: 24px;" src="https://www.iconfinder.com/data/icons/small-n-flat/24/pencil-128.png">
  </div>
  <div id="btnReports" class="hamburger-nav">
    <span class="floatingmenu_label">Reports</span>
     <img style="width: 24px; height: 24px;" src="https://www.iconfinder.com/data/icons/small-n-flat/24/pencil-128.png">
  </div>

Javascript / JQuery:

  $('#hamburger').click(function() {
    $('#hamburger').toggleClass('show');
    $('.hamburger-nav').toggleClass('show');
  });

CSS:

.floatingmenu_label {
  width: 150px;
  text-align: right;
  padding-right: 10px;
  position: absolute;
  left: -160px;
  color: #454545;
  white-space: nowrap;
}

#btnExit.show {
  -webkit-transform: translateY(-125%);
  transform: translateY(-125%);
}

#btnUsers.show {
  -webkit-transform: translateY(-250%);
  transform: translateY(-250%);
}

#btnJobs.show {
  -webkit-transform: translateY(-375%);
  transform: translateY(-375%);
}

#btnReports.show {
  -webkit-transform: translateY(-500%);
  transform: translateY(-500%);
}

#btnFilters.show {
  -webkit-transform: translateY(-625%);
  transform: translateY(-625%);
}

#hamburger {
  z-index: 10;
  position: fixed;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  bottom: 10%;
  right: 5%;
  background-color: #FF5722;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  cursor: pointer;
  box-shadow: 2px 2px 10px rgba(10, 10, 10, 0.3);
  -webkit-transition: all 0.2s ease-in-out;
  transition: all 0.2s ease-in-out;
}

#hamburger .icon-bar {
  display: block;
  background-color: #FFFFFF;
  width: 22px;
  height: 2px;
  -webkit-transition: all 0.3s ease-in-out;
  transition: all 0.3s ease-in-out;
}

#hamburger .icon-bar+.icon-bar {
  margin-top: 4px;
}

.hamburger-nav {
  z-index: 9;
  position: fixed;
  bottom: 10.5%;
  right: 5.5%;
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background-color: #f9f9f9;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  justify-content: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
  visibilty: hidden;
  opacity: 0;
  box-shadow: 3px 3px 10px 0px rgba(0, 0, 0, 0.48);
  cursor: pointer;
  -webkit-transition: all 0.3s ease-in;
  transition: all 0.3s ease-in;
}

#hamburger.show {
  box-shadow: 7px 7px 10px 0px rgba(0, 0, 0, 0.48);
}

#hamburger.show #wrapper {
  -webkit-transition: -webkit-transform 0.4s ease-in-out;
  transition: -webkit-transform 0.4s ease-in-out;
  transition: transform 0.4s ease-in-out;
  transition: transform 0.4s ease-in-out, -webkit-transform 0.4s ease-in-out;
  -webkit-transform: rotateZ(90deg);
  transform: rotateZ(90deg);
}

#hamburger.show #one {
  -webkit-transform: translateY(6px) rotateZ(45deg) scaleX(0.9);
  transform: translateY(6px) rotateZ(45deg) scaleX(0.9);
}

#hamburger.show #two {
  opacity: 0;
}

#hamburger.show #thr {
  -webkit-transform: translateY(-6px) rotateZ(-45deg) scaleX(0.9);
  transform: translateY(-6px) rotateZ(-45deg) scaleX(0.9);
}

.hamburger-nav.show {
  visibility: visible;
  opacity: 1;
}

到目前为止,这工作正常。

但是当我添加 bootstrap.css css 时,它就搞砸了。

<link rel="stylesheet" href="https://getbootstrap.com/dist/css/bootstrap.min.css" type="text/css">

这是一个小提琴,但它现在可以正常工作。要使其正常工作,只需删除左侧的 bootstrap.min.css :Fiddle

任何人都可以在同时包含 bootstrap.css 的同时帮助我完成这项工作吗?

提前致谢!

工作:

不工作:

编辑:终于找到了罪魁祸首:

在 bootstrap.css 中有这个类:

.show {
  display: block !important;
}

这压倒了我的班级。我只是重命名了我的班级,一切都恢复正常了。 在 Chrome 中,右键单击元素(按钮)-> 检查元素-> 样式选项卡显示影响所选元素的每个类。很有用!

【问题讨论】:

  • 我通过将 bootstrap.css 文件替换为较新的文件解决了这个问题。

标签: jquery css bootstrap-4 floating-action-button


【解决方案1】:

我认为在 Bootstrap CSS 之上编写自定义 CSS 代码总是好的做法。

有几种方法可以解决这个问题,要么纯粹通过 CSS,要么添加一些 HTML 包装器然后应用 CSS。我给你纯CSS解决方案。

要使子元素相对于父元素居中,请使用

position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);

如果你把它应用到.hamburger-menu &gt; img#hamburger &gt; #wrapper,你最终会得到你想要实现的。

编辑:与文本标签的大小写相同,只是您只想在 Y 轴上进行变换,而不是 X 轴上。

【讨论】:

  • 我通过用较新的文件替换 bootstrap.css 文件解决了这个问题。但我接受你的答案是正确的,因为这样编码更省钱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 2015-05-24
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多