如何制作适用于移动设备的可点击下拉菜单?

时间:2014-03-19 08:04:18

标签: html css

我目前正在建立一个小型网站,并通过使用教程(link)创建了一个菜单,当它悬停在其上时隐藏了子菜单。我对HTML和CSS有一般的了解,但我自己从未做过任何脚本编写。

我如何才能在点击时进行切换而不是悬停,以便可以在手机和平​​板电脑上正常浏览,这是计划使用的?

代码

以下代码也可用作jsfiddle

HTML

<div>
    <nav>
   <div class="menu-item alpha">
      <h4><a href="#">Sida 1</a></h4>
      <ul>
        <li><a href="#">Sida 1</a></li>
        <li><a href="#">Sida 2</a></li>
        <li><a href="#">sida 3</a></li>
      </ul>
    </div>

    <div class="menu-item">
      <h4><a href="#">Sida 2</a></h4>
      <ul>
        <li><a href="#">Sida 1</a></li>
        <li><a href="#">Sida 2</a></li>
        <li><a href="#">Sida 3</a></li>
      </ul>
    </div>

    <div class="menu-item">
      <h4><a href="#">Sida 3</a></h4>
      <ul>
        <li><a href="#">Sida 1</a></li>
        <li><a href="#">Sida 2</a></li>
        <li><a href="#">Sida 3</a></li>
      </ul>
    </div>
    </nav>
</div>

CSS

nav {
  font-family: Helvetica, Arial, "Lucida Grande", sans-serif;
  line-height: 1.5;
  margin: 50px auto; /*for display only*/
  width: 200px;
  -webkit-box-shadow: 2px 2px 5px rgba(0,0,0,0.2);
     -moz-box-shadow: 2px 2px 5px rgba(0,0,0,0.2);
          box-shadow: 2px 2px 5px rgba(0,0,0,0.2);
}

.menu-item {
  background: #fff;
  width: 200px; 
}
/*Menu Header Styles*/
.menu-item h4 {
  color: #fff;
  font-size: 15px;
  font-weight: 500;
  padding: 7px 12px;
  background: #a90329;
}
.menu-item h4 a {
  color: white;
  display: block;
  text-decoration: none;
  width: 200px;
}
/*Menu Header Styles*/
.menu-item h4 {
  border-bottom: 1px solid rgba(0,0,0,0.3);
  border-top: 1px solid rgba(255,255,255,0.2);
  color: #fff;
  font-size: 15px;
  font-weight: 500;
  padding: 7px 12px;

  /*Gradient*/
  background: #a90329; /* Old browsers */
  background: -moz-linear-gradient(top, #a90329 0%, #8f0222 44%, #6d0019 100%); /* FF3.6+ */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#a90329), color-stop(44%,#8f0222), color-stop(100%,#6d0019)); /* Chrome,Safari4+ */
  background: -webkit-linear-gradient(top, #a90329 0%,#8f0222 44%,#6d0019 100%); /* Chrome10+,Safari5.1+ */
  background: -o-linear-gradient(top, #a90329 0%,#8f0222 44%,#6d0019 100%); /* Opera 11.10+ */
  background: -ms-linear-gradient(top, #a90329 0%,#8f0222 44%,#6d0019 100%); /* IE10+ */
  background: linear-gradient(top, #a90329 0%,#8f0222 44%,#6d0019 100%); /* W3C */
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a90329', endColorstr='#6d0019',GradientType=0 ); /* IE6-9 */
}
.menu-item h4:hover{  
  background: #cc002c; /* Old browsers */
  background: -moz-linear-gradient(top,  #cc002c 0%, #6d0019 100%); /* FF3.6+ */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#cc002c), color-stop(100%,#6d0019)); /* Chrome,Safari4+ */
  background: -webkit-linear-gradient(top,  #cc002c 0%,#6d0019 100%); /* Chrome10+,Safari5.1+ */
  background: -o-linear-gradient(top,  #cc002c 0%,#6d0019 100%); /* Opera 11.10+ */
  background: -ms-linear-gradient(top,  #cc002c 0%,#6d0019 100%); /* IE10+ */
  background: linear-gradient(top,  #cc002c 0%,#6d0019 100%); /* W3C */
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cc002c', endColorstr='#6d0019',GradientType=0 ); /* IE6-9 */
}
*First Item Styles*/
.alpha p {
    font-size: 13px;
    padding: 8px 12px;
    color:#F00 ;
}/*ul Styles*/
.menu-item ul {
  background: #fff;
  font-size: 13px;
  line-height: 30px;
  list-style-type: none;
  overflow: hidden;
  padding: 0px;
}

.menu-item ul a {
  margin-left: 20px;
  text-decoration: none;
  color: #000;
  display: block;
  width: 200px;
}

/*li Styles*/
.menu-item li {
  border-bottom: 1px solid #eee;
}

.menu-item li:hover {
  background: #eee;
}
/*ul Styles*/
.menu-item ul {
  background: #fff;
  font-size: 13px;
  line-height: 30px;
  height: 0px; /*Collapses the menu*/
  list-style-type: none;
  overflow: hidden;
  padding: 0px;
}
/*ul Styles*/
.menu-item ul {
  background: #fff;
  font-size: 13px;
  line-height: 30px;
  height: 0px;
  list-style-type: none;
  overflow: hidden;
  padding: 0px;

  /*Animation*/
  -webkit-transition: height 1s ease;
     -moz-transition: height 1s ease;
       -o-transition: height 1s ease;
      -ms-transition: height 1s ease;
          transition: height 1s ease;
}


.menu-item:hover ul {
height: 93px;}

6 个答案:

答案 0 :(得分:1)

我创建了Fiddle

的jQuery

$(function() {
    $( ".menu-item" ).each(function() {
        $( ".menu-item" ).click(function() {
          $( "ul",this).slideToggle(75);
        });
    });
});

答案 1 :(得分:0)

如果你在jsfiddle上设置工作代码,但要回答你的问题,你可以使用简单的javascript来切换onClick类。该类将执行当前在悬停时显示的子菜单。

您还可以使用包含dropdowsnavs等的css库。

http://jsfiddle.net/c768Q/21/是你所要求的工作演示小提琴。像这样的东西,

$( ".menu-item" ).click(function() { $(this).find("ul").toggleClass("add-height"); });

答案 2 :(得分:0)

不幸的是,使用伪属性选择的路径:悬停作为选择器来设置过渡动画,这使我们没有多少工作空间。它们通常用于设置链接样式,但可以应用于其他元素(在本例中为ul) - 但使用其他可用选择器并不能提供所需的效果。 我建议使用Javascript或像jQuery这样的库,这简化了很多动画操作。 请将此示例视为替换,它完全符合您的要求:http://jqueryui.com/accordion/

今天开始使用新网站时,我还会考虑一个像Bootstrap(http://getbootstrap.com)这样的现代模板,它会使用最新技术开始使用最新技术,同时提供向后兼容性,让您节省很多未来调试可能会受挫!

答案 3 :(得分:0)

你可以简单地使用Accordion Jquery插件,其中有很多。 一个例子是:bassistance

但是你可以将这个例子从designshack更改为click,我只是修改了它。 您可以访问:this fiddle

$(function(){
    $('.menu-item').click(function(){
        var uls = $(this).find("ul");
        $('.menu-item').removeClass("active");
        $(this).addClass("active");
        $('.menu-item').find("ul").slideUp(200, function(){
            uls.slideDown(500);
        });   
    });
});

答案 4 :(得分:0)

使用CSS是可能的,尽管你必须稍微改变你的标记。您可以使用复选框和标签以及相邻的同级CSS选择器来获得您正在寻找的效果:

<强> HTML

<input id="sida1" type="checkbox">
<div class="menu-item alpha">
    <label for="sida1"><a>Sida 1</a></label>
    <ul>
        <li><a href="#">Sida 1</a></li>
        <li><a href="#">Sida 2</a></li>
        <li><a href="#">sida 3</a></li>
    </ul>
</div>

<强> CSS

input[type=checkbox]{display:none}
input[type=checkbox]:checked + .menu-item ul {
    height: 93px;
}

我已将<h4>与标签交换出来并将其显示为块。我还删除了每个标题链接的href属性,因为它会对网址进行哈希处理并阻止复选框被检查。

JSFiddle

答案 5 :(得分:0)

你可以用jQuery来做。

Here is demo for it