Falta el submenú desplegable Bootstrap


Bootstrap 3 todavía está en RC, pero solo estaba tratando de implementarlo. No pude averiguar cómo poner una clase de submenú. Incluso no hay ninguna clase en css e incluso los nuevos documentos no dicen nada al respecto

Estaba allí en 2.x con el nombre de la clase como submenú desplegable

Author: Zim, 2013-08-02

7 answers

Actualizado 2018

El dropdown-submenu ha sido eliminado en Bootstrap 3 RC. En palabras del autor Bootstrap Mark Otto..

"Los submenús simplemente no tienen mucho lugar en la web en este momento, especialmente en la web móvil. Se eliminarán con 3.0 " - https://github.com/twbs/bootstrap/pull/6342

Pero, con un poco de CSS extra, puede obtener la misma funcionalidad.

Bootstrap 4 (submenú de la barra de navegación en hover)

.navbar-nav li:hover > ul.dropdown-menu {
    display: block;
}
.dropdown-submenu {
    position:relative;
}
.dropdown-submenu>.dropdown-menu {
    top:0;
    left:100%;
    margin-top:-6px;
}

Navbar submenú desplegable hover
Navbar submenú desplegable hover (alineado a la derecha)
Navbar submenú desplegable, haga clic en (alineado a la derecha)
barra de navegación desplegable hover (no submenú)


Bootstrap 3

Aquí hay un ejemplo que usa 3.0 RC 1: http://bootply.com/71520

Aquí hay un ejemplo que usa Bootstrap 3.0.0 (final): http://bootply.com/86684

CSS

.dropdown-submenu {
    position:relative;
}
.dropdown-submenu>.dropdown-menu {
    top:0;
    left:100%;
    margin-top:-6px;
    margin-left:-1px;
    -webkit-border-radius:0 6px 6px 6px;
    -moz-border-radius:0 6px 6px 6px;
    border-radius:0 6px 6px 6px;
}
.dropdown-submenu:hover>.dropdown-menu {
    display:block;
}
.dropdown-submenu>a:after {
    display:block;
    content:" ";
    float:right;
    width:0;
    height:0;
    border-color:transparent;
    border-style:solid;
    border-width:5px 0 5px 5px;
    border-left-color:#cccccc;
    margin-top:5px;
    margin-right:-10px;
}
.dropdown-submenu:hover>a:after {
    border-left-color:#ffffff;
}
.dropdown-submenu.pull-left {
    float:none;
}
.dropdown-submenu.pull-left>.dropdown-menu {
    left:-100%;
    margin-left:10px;
    -webkit-border-radius:6px 0 6px 6px;
    -moz-border-radius:6px 0 6px 6px;
    border-radius:6px 0 6px 6px;
}

Ejemplo De Marcado

<div class="navbar navbar-default navbar-fixed-top" role="navigation">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">  
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
        </div>
        <div class="collapse navbar-collapse navbar-ex1-collapse">
            <ul class="nav navbar-nav">
                <li class="menu-item dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Drop Down<b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li class="menu-item dropdown dropdown-submenu">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Level 1</a>
                            <ul class="dropdown-menu">
                                <li class="menu-item ">
                                    <a href="#">Link 1</a>
                                </li>
                                <li class="menu-item dropdown dropdown-submenu">
                                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Level 2</a>
                                    <ul class="dropdown-menu">
                                        <li>
                                            <a href="#">Link 3</a>
                                        </li>
                                    </ul>
                                </li>
                            </ul>
                        </li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</div>

P.D.-Ejemplo en la barra de navegación que ajusta la posición izquierda: http://bootply.com/92442

 502
Author: Zim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-29 13:11:02

@skelly la solución es buena, pero no funcionará en dispositivos móviles, ya que el estado de suspensión no funcionará.

He añadido un poco de JS para recuperar el comportamiento BS 2.3.2.

PD: funcionará con el CSS que llegues allí: http://bootply.com/71520 aunque puedes comentar la siguiente parte:

CSS:

/*.dropdown-submenu:hover>.dropdown-menu{display:block;}*/

JS:

$('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {
  // Avoid following the href location when clicking
  event.preventDefault();
  // Avoid having the menu to close when clicking
  event.stopPropagation();
  // If a menu is already open we close it
  $('ul.dropdown-menu [data-toggle=dropdown]').parent().removeClass('open');
  // opening the one you clicked on
  $(this).parent().addClass('open');
});

El resultado se puede encontrar en mi tema de WordPress (Parte superior de la página): http://shprinkone.julienrenaux.fr /

 60
Author: Shprink,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-10 19:43:59

Hasta hoy (9 de enero de 2014) el Bootstrap 3 todavía no soporta el menú desplegable del submenú.

Busqué en Google sobre el menú de navegación sensible y encontré que este es el mejor que he pensado.

Es menús Inteligentes http://www.smartmenus.org/

Espero que esta sea la salida para cualquiera que quiera menú de navegación con submenú multinivel.

Actualización 2015-02-17 Los menús inteligentes ahora son totalmente compatibles con el estilo de elemento Bootstrap para submenú. Para obtener más información, consulte Web de menús inteligentes.

 41
Author: vee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-16 20:03:04

El código de Shprink me ayudó más, pero para evitar que el menú desplegable saliera de la pantalla lo actualizé a:

JS:

$('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {
    // Avoid following the href location when clicking
    event.preventDefault(); 
    // Avoid having the menu to close when clicking
    event.stopPropagation(); 
    // If a menu is already open we close it
    $('ul.dropdown-menu [data-toggle=dropdown]').parent().removeClass('open');
    // opening the one you clicked on
    $(this).parent().addClass('open');

    var menu = $(this).parent().find("ul");
    var menupos = $(menu).offset();

    if (menupos.left + menu.width() > $(window).width()) {
        var newpos = -$(menu).width();
        menu.css({ left: newpos });    
    } else {
        var newpos = $(this).parent().width();
        menu.css({ left: newpos });
    }

});

CSS: FROM background-color: #eeeeee TO background-color: #c5c5c5 - white font & light background no se veía bien.

.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
  background-color: #c5c5c5;
  border-color: #428bca;
}

¡Espero que esto ayude a la gente tanto como lo hizo para mí!

Pero espero que Bootstrap agregue la función subs lo antes posible.

 5
Author: WHOMEZz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-29 10:37:28

Comentario a La solución realmente útil de Skelly: en Bootstrap-sass 3.3.6, utilidades.scss, línea 19: .pull-left has float:left !important. Desde entonces, recomiendo usar !importante en su CSS también:

.dropdown-submenu.pull-left {
    float:none !important;
}
 3
Author: bencergazda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:14

Me topé con este problema hace unos días. Probé muchas soluciones y ninguna realmente funcionó para mí al final terminé creando una extensión/anulación del código desplegable de bootstrap. Es una copia del código original con cambios en la función closeMenus.

Creo que es una buena solución ya que no afecta a las clases principales de bootstrap js.

Puedes comprobarlo en gihub: https://github.com/djokodonev/bootstrap-multilevel-dropdown

 2
Author: George Donev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-17 16:31:48

Hago otra solución para el menú desplegable. Espero que esto sea de ayuda Simplemente agregue este script js

<script type="text/javascript"> jQuery("document").ready(function() {
  jQuery("ul.dropdown-menu > .dropdown.parent").click(function(e) {
    e.preventDefault();
    e.stopPropagation();
    if (jQuery(this).hasClass('open2'))
      jQuery(this).removeClass('open2');
    else {
      jQuery(this).addClass('open2');
    }

  });
}); < /script>

<style type="text/css">.open2{display:block; position:relative;}</style>
 -2
Author: user3193801,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-10 19:36:25