如何使菜单行响应?

时间:2016-10-30 16:09:24

标签: javascript html css

我已经在我的知识范围内尝试了大多数事情,使菜单行与我的导航栏一致,但它不会起作用。以下是相关的CSS,HTML和Javascript代码..



  (function($) {

  $.fn.menumaker = function(options) {
      
      var cssmenu = $(this), settings = $.extend({
        title: "Menu",
        format: "dropdown",
        sticky: false
      }, options);

      return this.each(function() {
        cssmenu.prepend('<div id="menu-button">' + settings.title + '</div>');
        $(this).find("#menu-button").on('click', function(){
          $(this).toggleClass('menu-opened');
          var mainmenu = $(this).next('ul');
          if (mainmenu.hasClass('open')) { 
            mainmenu.hide().removeClass('open');
          }
          else {
            mainmenu.show().addClass('open');
            if (settings.format === "dropdown") {
              mainmenu.find('ul').show();
            }
          }
        });

        cssmenu.find('li ul').parent().addClass('has-sub');

        multiTg = function() {
          cssmenu.find(".has-sub").prepend('<span class="submenu-button"></span>');
          cssmenu.find('.submenu-button').on('click', function() {
            $(this).toggleClass('submenu-opened');
            if ($(this).siblings('ul').hasClass('open')) {
              $(this).siblings('ul').removeClass('open').hide();
            }
            else {
              $(this).siblings('ul').addClass('open').show();
            }
          });
        };

        if (settings.format === 'multitoggle') multiTg();
        else cssmenu.addClass('dropdown');

        if (settings.sticky === true) cssmenu.css('position', 'fixed');

        resizeFix = function() {
          if ($( window ).width() > 768) {
            cssmenu.find('ul').show();
          }

          if ($(window).width() <= 768) {
            cssmenu.find('ul').hide().removeClass('open');
          }
        };
        resizeFix();
        return $(window).on('resize', resizeFix);

      });
  };
})(jQuery);

(function($){
$(document).ready(function(){

$(document).ready(function() {
  $("#cssmenu").menumaker({
    title: "Menu",
    format: "multitoggle"
  });

  $("#cssmenu").prepend("<div id='menu-line'></div>");

var foundActive = false, activeElement, linePosition = 0, menuLine = $("#cssmenu #menu-line"), lineWidth, defaultPosition, defaultWidth;

$("#cssmenu > ul > li").each(function() {
  if ($(this).hasClass('active')) {
    activeElement = $(this);
    foundActive = true;
  }
});

defaultWidth = lineWidth = activeElement.width();

defaultPosition = linePosition = activeElement.position().left;

menuLine.css("width", lineWidth);
menuLine.css("left", linePosition);

$("#cssmenu > ul > li").hover(function() {
  activeElement = $(this);
  lineWidth = activeElement.width();
  linePosition = activeElement.position().left;
  menuLine.css("width", lineWidth);
  menuLine.css("left", linePosition);
}, 
function() {
  menuLine.css("left", defaultPosition);
  menuLine.css("width", defaultWidth);
});

});


});
})(jQuery);
&#13;
#cssmenu,
#cssmenu ul,
#cssmenu ul li,
#cssmenu ul li a,
#cssmenu #menu-button {
  margin: 0;
  padding: 0;
  border: 0;
  list-style: none;
  line-height: 1;
  display: block;
  position: relative;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  top: 0px;
  left: 0px;
}
#cssmenu:after,
#cssmenu > ul:after {
  content: ".";
  display: block;
  clear: both;
  visibility: hidden;
  line-height: 0;
  height: 0;
}
#cssmenu #menu-button {
  display: none;
}
#cssmenu {
  width: 100%;
  position: static;
  font-family: "lato", sans-serif;
  font-size: 1.1em;
  font-weight: 700;
  background: #fbfbfb;
  height: 70px;
  top: -8px;
  border-bottom: 1px #e6e6e6 solid;
  display: inline-block;
}
#menu-line {
  position: absolute;
  top: 67px;
  left: 0;
  height: 3px;
  background: #5e9682;
  -webkit-transition: all 0.1s ease-out;
  -moz-transition: all 0.1s ease-out;
  -ms-transition: all 0.1s ease-out;
  -o-transition: all 0.1s ease-out;
  transition: all 0.1s ease-out;
}
#cssmenu > ul > li {
  display: inline-block;
}
#cssmenu.align-center ul ul {
  text-align: center;
}
#cssmenu > ul > li > a {
  padding: 20px;
  top: 8px;
  font-size: 12px;
  text-decoration: none;
  text-transform: uppercase;
  color: #9b9797;
  -webkit-transition: color .2s ease;
  -moz-transition: color .2s ease;
  -ms-transition: color .2s ease;
  -o-transition: color .2s ease;
  transition: color .2s ease;
}
#cssmenu > ul > li:hover > a,
#cssmenu > ul > li.active > a {
  color: #5e9682;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">

<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>Refine Studios - Subtle Refine</title>


  <link href="css/bootstrap.min.css" rel="stylesheet">
  <link href="css/styles.css" rel="stylesheet">
</head>

<body>


  <div id="cssmenu">

    <ul>
      <li class="active"><a href="#">Home</a>
      </li>
      <li><a href="#">Report</a>
        <li><a href="#">Product</a> 
        </li>
        <li><a href="#">About</a>
        </li>
        <li><a href="#">Contact</a>
        </li>
    </ul>
  </div>


  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  <script src="js/bootstrap.min.js"></script>
  <script src="js/script.js"></script>
</body>

</html>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

你想要这样的东西: -

&#13;
&#13;
@import url(http://fonts.googleapis.com/css?family=Exo:400,500,700,700italic);
* {
  box-sizing: border-box;
}

html,
body {
  width: 100%;
  height: 100%;
}

body {
  margin: 1.25em .75em;
  background: url(http://subtlepatterns.com/patterns/black-Linen.png);
  font: 1.4em 'Exo', sans-serif;
}

nav[role="select"] {
  width: 100%;
  position: relative;
  color: #000;
}
nav[role="select"] > select {
  display: none;
}
nav[role="select"] ul {
  width: 100%;
  list-style: none;
}
nav[role="select"] ul > li {
  float: left;
  padding: .55em .45em;
  width: 19%;
  font-size: 1.2em;
  background-color: rgba(174, 86, 168, 0.5);
  text-align: center;
  transition-duration: .15s;
  transition-timing-function: ease-in-out;
  transition-property: box-shadow, background, color, text-align, padding;
  cursor: pointer;
}
nav[role="select"] ul > li:hover {
  background-color: rgba(174, 86, 168, 0.3);
  color: #fff;
  text-align: left;
  padding-left: .75em;
  box-shadow: 0 0 0 0.25em rgba(0, 0, 0, 0.3), 0 0 0 0.5em rgba(0, 0, 0, 0.3), 0 0 0 0.75em rgba(0, 0, 0, 0.3), inset 0 0 0 0.25em rgba(0, 0, 0, 0.3);
}
nav[role="select"] ul > li > a {
  color: inherit;
  text-decoration: none;
  transition: inherit;
}

/* small screens */
@media screen and (max-width: 44em) {
  body {
    margin: 1em 0;
  }

  nav[role="select"] ul {
    display: none;
  }
  nav[role="select"]:after {
    position: absolute;
    z-index: -1;
    content: "Menu";
    right: 0;
    bottom: -1.75em;
    background: rgba(174, 86, 168, 0.4);
    padding: .15em .55em;
  }
  nav[role="select"] select {
    display: block;
    user-select: none;
    cursor: pointer;
    width: 100%;
    padding: .55em .45em;
    border: none;
    background-color: rgba(174, 86, 168, 0.25);
    font: 1.2em 'Exo', sans-serif;
  }
}
&#13;
<nav role="select">
    <ul>
        <li><a href="#">Stream</a></li>
        <li><a href="#">Lab</a></li>
        <li><a href="#">Projects</a></li>
        <li><a href="#">About</a></li>
        <li><a href="#">Contact</a></li>
    </ul>
    
    <select onchange="if (this.value) window.location.href = this.value;">
        <option value="#">Stream</option>
        <option value="#">Lab</option>
        <option value="#">Projects</option>
        <option value="#">About</option>
        <option value="#">Contact</option>
    </select>
</nav>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你可以在不使用jQuery的情况下完成。

只需使用CSS:hover选择器,如
void getPositionXAtHeight(float height, Vec2 pos, Vec2 vel, float gravityForce = 9.8f, float gameWidth, float& positionX) { float a = gravityForce / 2.0f; float b = vel.y; float c = pos.y - height; float t = (sqrtf((b * b) - (4.0f * a * c)) - b) / (2.0f * a); positionX = pos.x + (vel.x*t); }

这是一个很好的响应式flexbox解决方案,您可以从...中借用一些想法。

&#13;
&#13;
#somediv:hover { border-bottom: 2px green solid; }
&#13;
.flexcanvas {
  width: 100%;
  height: 110px !important;
}
#HomeArea:hover,
#AboutArea:hover,
#ProductArea:hover,
#ReportArea:hover,
#ContactArea:hover {
  border-bottom: 2px green solid;
}
.rowParent {
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}
.columnParent {
  -webkit-flex-wrap: nowrap;
  -ms-flex-wrap: nowrap;
  flex-wrap: nowrap;
}
.rowParent,
.columnParent {
  display: -webkit-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-box-direction: normal;
  -webkit-box-orient: horizontal;
  -webkit-flex-direction: row;
  -ms-flex-direction: row;
  flex-direction: row;
  -webkit-box-pack: start;
  -webkit-justify-content: flex-start;
  -ms-flex-pack: start;
  justify-content: flex-start;
  -webkit-align-content: stretch;
  -ms-flex-line-pack: stretch;
  align-content: stretch;
  -webkit-box-align: stretch;
  -webkit-align-items: stretch;
  -ms-flex-align: stretch;
  align-items: stretch;
}
.columnParent {
  -webkit-box-orient: vertical;
  -webkit-flex-direction: column;
  -ms-flex-direction: column;
  flex-direction: column;
}
.flexChild {
  -webkit-box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
  -webkit-align-self: auto;
  -ms-flex-item-align: auto;
  align-self: auto;
}
#AboutBar {
  -webkit-box-flex: 0;
  -webkit-flex: 0 0 auto;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  height: 20px;
  background-color: 'green';
}
#ContactBar {
  -webkit-box-flex: 0;
  -webkit-flex: 0 0 auto;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  background-color: 'green';
  height: 20px;
}
#ProductBar {
  -webkit-box-flex: 0;
  -webkit-flex: 0 0 auto;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  height: 20px;
  background-color: 'green';
}
#ReportBar {
  -webkit-box-flex: 0;
  -webkit-flex: 0 0 auto;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  height: 20px;
  background-color: 'green';
}
#HomeBar {
  -webkit-box-flex: 0;
  -webkit-flex: 0 0 auto;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  height: 20px;
  background-color: 'green';
}
.bar {
  min-width: 100%;
  min-height: 20px;
}
#MenuFooterContainer {
  -webkit-box-flex: 0;
  -webkit-flex: 0 0 auto;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  height: 40px;
}
#HeaderTopContainer {
  -webkit-box-flex: 0;
  -webkit-flex: 0 0 auto;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  height: 70px;
}
#MenuContainer {
  -webkit-box-flex: 0;
  -webkit-flex: 0 0 auto;
  -ms-flex: 0 0 auto;
  flex: 0 0 auto;
  height: 80px;
}
#cssmenu,
#cssmenu ul,
#cssmenu ul li,
#cssmenu ul li a,
#cssmenu #menu-button {
  margin: 0;
  padding: 0;
  border: 0;
  list-style: none;
  line-height: 1;
  display: block;
  position: relative;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  top: 0px;
  left: 0px;
}
#cssmenu:after,
#cssmenu > ul:after {
  content: ".";
  display: block;
  clear: both;
  visibility: hidden;
  line-height: 0;
  height: 0;
}
/* 

  HERES THE IMPORTANT MEDIA QUERY 


*/

@media (max-width: 800px) {
  #cssmenu #menu-button {
    display: block;
  }
}
@media (min-width: 801px) {
  #cssmenu #menu-button {
    display: none;
  }
}
#cssmenu {
  width: 100%;
  position: static;
  font-family: "lato", sans-serif;
  font-size: 1.1em;
  font-weight: 700;
  background: #fbfbfb;
  height: 70px;
  top: -8px;
  border-bottom: 1px #e6e6e6 solid;
  display: inline-block;
}
#menu-line {
  position: absolute;
  top: 67px;
  left: 0;
  height: 3px;
  background: #5e9682;
  -webkit-transition: all 0.1s ease-out;
  -moz-transition: all 0.1s ease-out;
  -ms-transition: all 0.1s ease-out;
  -o-transition: all 0.1s ease-out;
  transition: all 0.1s ease-out;
}
#cssmenu > ul > li,
#cssmenu > ul {
  display: inline-block;
}
#cssmenu.align-center ul ul {
  text-align: center;
}
#cssmenu > ul > li > a {
  padding: 20px;
  top: 8px;
  font-size: 12px;
  text-decoration: none;
  text-transform: uppercase;
  color: #9b9797;
  -webkit-transition: color .2s ease;
  -moz-transition: color .2s ease;
  -ms-transition: color .2s ease;
  -o-transition: color .2s ease;
  transition: color .2s ease;
}
#cssmenu > ul > li:hover > a,
#cssmenu > ul > li.active > a {
  color: #5e9682;
}
&#13;
&#13;
&#13;