Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/03/2018, 12:00
Avatar de kahlito
kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 8 meses
Puntos: 65
Menú desplegable hover y click con dos columnas.

Buenas tardes.

Estoy haciendo un menú desplegable que bien al pasar por encima con hover o al hacer click muestre dicho menú que a la vez se divide en dos partes, a la izquierda una lista de nombres o categorías y a la derecha otra lista con una imagen, título, descripción y detalles.

He probado varias maneras incluso casi lo tenía conseguido pero claro, me lo piden validado por la w3c y al usar <ul><li> dentro no puedo meter div, h2, p etc etc, así que he vuelto a intentarlo de esta manera que sí valida pero ahora no me cuadra como antes.

El código que he utilizado es el siguiente:

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <html lang="es">
  3.     <meta charset="UTF-8">
  4.     <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  5.     <title>Probando menú desplegable.</title>
  6.     <script src="http://code.jquery.com/jquery-latest.js"></script>
  7.     <link rel="stylesheet" href="views/css/normalize.css" >
  8.     <style type="text/css">
  9.  
  10.     *{
  11.         margin:0px;
  12.         padding:0px;
  13.         list-style: none;
  14.         text-decoration: none; 
  15.         font-size: 16px;
  16.         font-size: 1em;
  17.         border:0;
  18.         box-sizing: border-box;
  19.         -webkit-box-sizing: border-box;
  20.         -moz-box-sizing: border-box;   
  21.     }
  22.  
  23.     nav#menu{  
  24.         padding-top: 30px;
  25.         background: #1F1F1F;
  26.         font-family: 'Roboto', sans-serif;
  27.         height: 90px;
  28.         height: 100px; 
  29.         text-align:center;
  30.         vertical-align: center;
  31.         padding-bottom: 10px;  
  32.         z-index: 1000; 
  33.     }
  34.  
  35.     .menu{
  36.         background: #111111;
  37.     }
  38.  
  39.     nav ul{
  40.         list-style: none;
  41.     }
  42.  
  43.     nav ul li{
  44.         background: #111111;       
  45.         color:#d4d4d4;
  46.         display: inline;   
  47.         line-height:38px;      
  48.         height:38px;   
  49.         margin: 0 0.5%;
  50.         text-align:center; 
  51.         display: inline-block;
  52.         position: relative;
  53.     }
  54.     nav ul li a{
  55.         display: inline-block;         
  56.         color:#d4d4d4;
  57.         line-height:38px;  
  58.         font-size:11px;
  59.         font-weight:900;   
  60.         text-transform:uppercase;  
  61.         padding:0 8px; 
  62.     }
  63.     nav ul li a:hover{
  64.         background:#f9f8f6;
  65.         color:#252120; 
  66.         cursor:pointer !important;
  67.         opacity: 1;    
  68.     }
  69.  
  70.     nav ul li a span{
  71.         margin-right: 10px;
  72.     }
  73.  
  74.     nav ul li a:active{
  75.         background:rgba(255,0,100,1);
  76.     }
  77.  
  78.     /* Zona desplegable, hover y click*/
  79.  
  80.     #hijo1, #hijo2, #hijo3, #hijo4{
  81.         border: 1px solid yellow;      
  82.         width: 363px;
  83.         z-index: 2001; 
  84.         min-height: 172px !important;
  85.         position: absolute;
  86.         left: -29px;
  87.         overflow: visible;
  88.         overflow: hidden;          
  89.         top:40px;/*Altura temporal solo en archivo de prueba*/
  90.     }
  91.  
  92.     nav ul li .children li, nav ul li .children-click li{/*AFECTA A LOS LI EN HOVER*/
  93.         display: block;    
  94.         /*overflow: hidden;*/
  95.         overflow: visible; /*REVISAR AQUÍ YA QUE ASÍ ADMITE AL CLICKEAR*/      
  96.         height: 24px !important;
  97.         line-height: 24px !important;    
  98.         text-align: center;
  99.         text-transform: uppercase;
  100.         width: 162px;      
  101.     }
  102.  
  103.     nav ul li .children li a, nav ul li .children-click li a {
  104.         display: block;    
  105.         background: #fff;  
  106.         font-size: 10px !important;
  107.         height: 24px !important;
  108.         line-height: 24px !important;  
  109.         color: #232122;
  110.         font-weight: 500;          
  111.     }
  112.  
  113.     nav ul li:hover .children{
  114.         display: block;    
  115.     }
  116.  
  117.     ul.children li a:hover{
  118.         background:#fdc003;
  119.         color:#FFF!important;
  120.         width: 100%;    
  121.     }
  122.  
  123.     nav ul li .children, nav ul li .children-click{
  124.         display: none;  
  125.         position: absolute;  
  126.         z-index: 1000;    
  127.     }
  128.  
  129.     nav ul li .children-click{  
  130.         display: block;/*AHORA AL CLICAR LOS MUESTRA*/        
  131.     }
  132.  
  133.     li.sub-hijo1{  
  134.         float: left;
  135.         z-index: 2002;
  136.         margin: 0;
  137.         padding: 0;
  138.         vertical-align: top;
  139.         top:0;
  140.         display: block;    
  141.  
  142.     }
  143.  
  144.     li.sub-hijo2{  
  145.         float: right;
  146.         z-index: 2002;
  147.         margin: 0;
  148.         padding: 0;
  149.         vertical-align: top;
  150.         top:0; 
  151.         display: block;    
  152.     }
  153.  
  154.     nav ul li.sub-hijo2 ul li{ 
  155.         /*Temporal solo de pureba;*/
  156.         z-index: 2052;
  157.         float: left;   
  158.     }
  159.    
  160.     li.sub-hijo2 ul.art-desplegable{
  161.         background: #ffffff;   
  162.         width: 363px;
  163.         z-index: 2005;
  164.         max-width: 513px;
  165.         padding: 5px;
  166.         margin: 0 15px;
  167.         height: 201px;
  168.         min-height: 172px !important;  
  169.         font-family: 'Trebuchet MS', sans-serif;
  170.         padding: 10px;
  171.         padding: 0;
  172.         border: 1px solid #babab8 !important;
  173.         top: -25px;/*Distancia temporal con respecto a los id #hijo*/
  174.         position: absolute;
  175.         left: -29px;       
  176.  
  177.     }
  178.  
  179.     li.sub-hijo2 ul.art-desplegable img{
  180.         float: left;
  181.         padding: 5px;  
  182.         box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);  
  183.         margin: 25px 10px 0 10px;
  184.         width: 150px;
  185.         height: 150px; 
  186.         box-shadow: 0 0 5px #333;
  187.     }
  188.  
  189.     .name-art-desplegable {
  190.         text-align: left !important;
  191.         padding: 5px 10px 8px 10px;    
  192.         font-size:14px;
  193.         color:#000;
  194.         height:70px;
  195.         overflow:hidden;
  196.         font-size: 18px;
  197.         font-weight: 400;
  198.         padding: 3px 0 8px 0;
  199.         height: 26px;
  200.         overflow: hidden;
  201.         margin-top: 20px;      
  202.  
  203.     }
  204.      
  205.     .name-art-desplegable a {color:#ffbb0f;}
  206.  
  207.     .category-art-desplegable {
  208.         text-transform: uppercase;
  209.         font-weight: 400;
  210.         font-size: 12px;
  211.         padding: 10px 0 8px 0;
  212.         height: 24px;
  213.         overflow: hidden;
  214.         text-align: left;
  215.     }
  216.  
  217.     .linkdet-art-desplegable { 
  218.         font-size: 12px;
  219.         margin: 14px 0 0 0;
  220.         padding-top: 80px;
  221.         text-align: left !important;
  222.     }
  223.  
  224.     .linkdet-art-desplegable a {
  225.         color:#ffbb0f !important;    
  226.     }
  227.    
  228.     nav#menu i {
  229.         color:#d4d4d4;
  230.         font-size: 4px;        
  231.         margin:0 0 0 1%;
  232.         position: relative;
  233.         bottom: 2px;
  234.         margin-left: 10px; 
  235.         display: inline;
  236.     }
  237.  
  238.    
  239. </head>
  240.     <nav id="menu" class="fila">           
  241.         <ul class="menu">          
  242.             <li id="profesionales" class="submenu">
  243.                 <a href="#" class="">Profesionales</a><i class="fa fa-circle" aria-hidden="true"></i>
  244.                 <ul id="hijo1" class="children">
  245.                     <li class="sub-hijo1">                 
  246.                         <ul class="">
  247.                             <li><a href="#">SubElemento #1</a></li>
  248.                             <li><a href="#">SubElemento #2</a></li>
  249.                             <li><a href="#">SubElemento #3</a></li>
  250.                             <li><a href="#">SubElemento #4</a></li>
  251.                             <li><a href="#">SubElemento #5</a></li>                            
  252.                         </ul>
  253.                     <li>
  254.                     <li class="sub-hijo2">
  255.                         <ul class="art-desplegable">                               
  256.                             <li class="aqui-enlace-o-imagen">
  257.                                 <a class="thumb" href=""><img  src="views/images/energeticas.jpg" title="" alt="" width="150" height="150" /></a>
  258.                             </li>
  259.                             <li class="name-art-desplegable">
  260.                                 <a href="">Título</a>
  261.                             </li>
  262.                             <li class="category-art-desplegable">
  263.                                 <a href="">Descripción categoría</a>
  264.                             </li>
  265.                             <li class="text-art-desplegable"></li>
  266.                             <li class="linkdet-art-desplegable">
  267.                                 <a href="">+ Mas detalles</a>
  268.                             </li>                      
  269.                         </ul>                      
  270.                     </li>
  271.                 </ul>                  
  272.             </li>                                      
  273.         </ul>
  274.     </nav>
  275.  
  276. <script src="views/js/menu-desplegable.js"></script>
  277.  
  278. </body>
  279. </html>

archivo: menu-desplegable.js

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.  
  3.     // MOSTRANDO Y OCULTANDO MENU
  4.     // PROFESIONALES   
  5.     $('#profesionales').click(function(){
  6.  
  7.         $('#hijo1').removeClass('children-click').addClass('children');
  8.         $('#hijo2').removeClass('children-click').addClass('children');
  9.         $('#hijo3').removeClass('children-click').addClass('children');
  10.         $('#hijo4').removeClass('children-click').addClass('children');
  11.  
  12.         if($('#profesionales').attr('class') == 'submenu' ){
  13.                        
  14.             $('#hijo1').removeClass('children').addClass('children-click');        
  15.            
  16.         } else{
  17.                        
  18.             $('#hijo1').removeClass('children-click').addClass('children');        
  19.  
  20.         }
  21.     });
  22.  
  23.     // HORÓSCOPO   
  24.     $('#horoscopo').click(function(){
  25.  
  26.         $('#hijo1').removeClass('children-click').addClass('children');
  27.         $('#hijo2').removeClass('children-click').addClass('children');
  28.         $('#hijo3').removeClass('children-click').addClass('children');
  29.         $('#hijo4').removeClass('children-click').addClass('children');
  30.  
  31.         if($('#horoscopo').attr('class') == 'submenu' ){
  32.                        
  33.             $('#hijo2').removeClass('children').addClass('children-click');        
  34.            
  35.         } else{
  36.                        
  37.             $('#hijo2').removeClass('children-click').addClass('children');        
  38.  
  39.         }
  40.     });
  41.  
  42.     // BLOG
  43.     $('#blog').click(function(){
  44.  
  45.         $('#hijo1').removeClass('children-click').addClass('children');
  46.         $('#hijo2').removeClass('children-click').addClass('children');
  47.         $('#hijo3').removeClass('children-click').addClass('children');
  48.         $('#hijo4').removeClass('children-click').addClass('children');
  49.  
  50.         if($('#blog').attr('class') == 'submenu' ){
  51.                        
  52.             $('#hijo3').removeClass('children').addClass('children-click');        
  53.            
  54.         } else{
  55.                        
  56.             $('#hijo3').removeClass('children-click').addClass('children');        
  57.  
  58.         }
  59.     });
  60.  
  61.     // UTILIDADES
  62.     $('#utilidades').click(function(){
  63.  
  64.         $('#hijo1').removeClass('children-click').addClass('children');
  65.         $('#hijo2').removeClass('children-click').addClass('children');
  66.         $('#hijo3').removeClass('children-click').addClass('children');
  67.         $('#hijo4').removeClass('children-click').addClass('children');
  68.  
  69.         if($('#utilidades').attr('class') == 'submenu' ){          
  70.            
  71.             $('#hijo4').removeClass('children').addClass('children-click');        
  72.            
  73.         } else{
  74.                        
  75.             $('#hijo4').removeClass('children-click').addClass('children');        
  76.  
  77.         }
  78.     });
  79.  
  80. });

Me debería quedar así como en esta imagen



pero me sale así:



¿Como podría volver a dejarlo como en la primera imagen?
¿Alguna otra idea para hacer este menú semántico y por la w3c?

Saludos.

PD: He recortado parte del menu <li> ya que en blog, y otras zonas también tiene un submenú de 6 pero me pasaba de caracteres permitidos.