Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/04/2016, 13:37
lobopk2
 
Fecha de Ingreso: diciembre-2015
Mensajes: 62
Antigüedad: 8 años, 11 meses
Puntos: 0
Información Como se hace un menu desplegable con imagenes vectoriales usando solo css

Bueno pues depues de pelearme bastante, ya lo he conseguido y dejo esta informacion por si alguien le interesa.

Antes de nada dire que soy muy novato y seguramente no es la mejor manera de hacerlo o incluso el codigo se pueda aprovechar de mejor manera, pero por ahora, esto es lo mejor que puedes encontrar, ya que no encontre ninguna informacion al respecto.

Por supuesto si alguien quiere mejorarlo, optimizarlo, o conoce alguna manera mejor que lo exponga.

Dejo aqui la etiqueta svg que hay que poner en linea en el html.

Código HTML:
Ver original
  1. <svg
  2.   xmlns:dc="http://purl.org/dc/elements/1.1/"
  3.   xmlns:cc="http://creativecommons.org/ns#"
  4.   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  5.   xmlns:svg="http://www.w3.org/2000/svg"
  6.   xmlns="http://www.w3.org/2000/svg"
  7.   width="1000"
  8.   height="800"
  9.   viewBox="0 0 1000 800.00001"
  10.   id="svg2"
  11.   version="1.1">
  12.   <defs
  13.     id="defs4" />
  14.   <metadata
  15.     id="metadata7">
  16.     <rdf:RDF>
  17.       <cc:Work
  18.         rdf:about="">
  19.         <dc:format>image/svg+xml</dc:format>
  20.         <dc:type
  21.           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  22.         <dc:title></dc:title>
  23.       </cc:Work>
  24.     </rdf:RDF>
  25.   </metadata>
  26.   <g
  27.     id="layer1"
  28.     transform="translate(0,-252.36216)">
  29.      
  30. <!--ROJO-------------------------------------------------------------> 
  31.    
  32.     <rect      
  33.       style="opacity:1;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
  34.       id="rojo"
  35.       width="308.91031"
  36.       height="94.010918"
  37.       x="145.54485"
  38.       y="352.90701" />
  39.        
  40. <!--AZUL-------------------------------------------------------------> 
  41.          
  42.     <rect
  43.       style="opacity:1;fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
  44.       id="azul"
  45.       width="308.6713"
  46.       height="88.988068"
  47.       x="145.82274"
  48.       y="442.86813" />      
  49.    
  50. <!--VERDES------------------------------------------------------------->   
  51.    
  52.       <rect
  53.         style="opacity:1;fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4.9520607;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
  54.         class="verde"
  55.         id="verde"
  56.         width="302.92929"
  57.         height="88.609352"
  58.         x="450.59467"
  59.         y="443.27179" />
  60.          
  61.       <rect
  62.         y="527.27179"
  63.         x="455"
  64.         height="88.609352"
  65.         width="298.52396"
  66.         class="verde"
  67.         id="verde2"
  68.         style="opacity:1;fill:#00ff72;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4.9520607;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />  
  69.  
  70. <!--AMARILLO------------------------------------------------------------->     
  71.              
  72.     <rect
  73.       y="527.27179"
  74.       x="749.52393"
  75.       height="88.609352"
  76.       width="298.52396"
  77.       id="amarillo"
  78.       style="opacity:1;fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4.9520607;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
  79.        
  80.  <!------------------------------------------------------------------------------------------------------>    
  81.         <!--Apartir de aqui repito algunos rectangulos, para que el codigo css funcione bien-->          <!------------------------------------------------------------------------------------------------------>
  82.        
  83.      
  84. <!--REPETIDO VERDE2------------------------------------------------------------->  
  85.        
  86.         <rect
  87.         y="527.27179"
  88.         x="455"
  89.         height="88.609352"
  90.         width="298.52396"
  91.         class="verde"
  92.         id="verde2"
  93.         style="opacity:1;fill:#00ff72;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4.9520607;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />  
  94.        
  95.  
  96.  <!--REPETIDO PARA HACERLOS COMO OTRA CAPA------------------------------------------------>      
  97.          
  98.          <rect
  99.         x="450.59467"
  100.         y="443.27179"
  101.         height="88.609352"
  102.         width="298.52396"
  103.         class="verde"
  104.         id="verde3"
  105.         style="opacity:1;fill:#29c929;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4.9520607;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
  106.              
  107.        <rect
  108.       y="443.37408"
  109.       x="146.3287"
  110.       height="88.988068"
  111.       width="308.6713"
  112.       id="azul2"
  113.       style="opacity:1;fill:#26d0c1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />      
  114.        
  115.   </g>
  116. </svg>

Dejo tambien el archivo css.

Código CSS:
Ver original
  1. /****************************MENU SVG***********************************/
  2.  
  3.                             /*ocultamos los elementos*/
  4.                            
  5. #azul       {display:none;}
  6. #azul2      {display:none;}
  7. .verde      {display:none;}
  8. #amarillo   {display:none;}
  9.  
  10. /*Formato reducido     #azul, #azul2, .verde, #amarillo {display:none;} */
  11.  
  12.  
  13.   /*******************************************************************************************************/
  14.  
  15.                     /* cuando pasa el raton por un rectangulo enciende el otro*/
  16.                    
  17. #rojo:hover ~ #azul         {display:block;} /*dentro del rojo habro azul*/
  18.  
  19. /*Mantengo los dos verdes abiertos*/
  20. #azul:hover ~ #verde        {display:block;} /*dentro del azul habro verde*/
  21. #azul:hover ~ #verde2       {display:block;} /*dentro del azul habro verde2*/
  22.  
  23. /* Abro nuevos y mantengo otros abiertos*/
  24. .verde:hover ~ #azul2       {display:block;} /*dentro del los verdes habro azul2*/
  25. .verde:hover + #verde2      {display:block;} /*dentro del los verdes habro mantengo verde2 abierto*/
  26. #verde2:hover ~ #verde3     {display:block;} /*dentro del verde2 habro verde3*/
  27. #verde2:hover ~ #amarillo   {display:block;} /*dentro del verde2 habro amarillo*/
  28.  
  29. /*Mantengo abiertos los verdes y el azul*/
  30. #amarillo:hover ~ .verde    {display:block;} /*dentro del amarillo mantengo verdes abierto*/
  31. #amarillo:hover ~ #azul2    {display:block;} /*dentro del amarillo mantengo azul2 abierto*/
  32.  
  33.  
  34. /*Formato reducido  
  35.  
  36. #rojo:hover ~ #azul, #azul:hover ~ #verde, #azul:hover ~ #verde2, .verde:hover ~ #azul2, .verde:hover + #verde2, #verde2:hover ~ #verde3, #verde2:hover ~ #amarillo, #amarillo:hover ~ .verde, #amarillo:hover ~ #azul2 {display:block;}
  37.    
  38. */
  39.  
  40.  
  41. /*******************************************************************************************************/
  42.  
  43. /*con esto mantengo los rectangulos visibles cuando el puntero esta dentro de los rectangulos*/
  44.  
  45. #azul:hover     {display:block;}
  46. #azul2:hover    {display:block;}
  47. .verde:hover    {display:block;}
  48. #amarillo:hover {display:block;}
  49.  
  50. /*Formato reducido      #azul:hover, #azul2:hover, .verde:hover, #amarillo:hover {display:block;}      */
  51.  
  52.  
  53. /*****************************************FIN**************************************************************/

Seguro que direis que con javascript el codigo es mas corto e incluso funcionara mejor.
El porque usar css, es proque si es el menu de navegacion de la pagina, es mejor que sea con css, ya que si alguien tuviera el javascript deshabilitado, no podria navegar por nuestras paginas.

El ejemplo es muy simple, porque solo es una prueva.

Aqui uno de los problemas que pasan, es que hay que repetir algo de codigo en el html, puesto que css, no admite seleccionar hermanos de abajo arriba, tenemos que poner en el codigo, esos hermanos copiados debajo, para que asi css, pueda señalarlos.

Esto ultimo que he dicho no se si algunos lo entenderan, pero es asi ajjajaajajajajajajaajajaj, de echo es la clave, estas duplicidades.

Yo aqui para que se vea un poco, he cogido y estas copias las puese en otro color, para que cuando se cambie de un sitio a otro se vea que aparece la copia.
Pero la idea es que esa copia sea identica, con lo cual, cuando se hiziera el cambio no se notaria que ha cambiado.

Puedes desplazarte por todo el menu y volver desde el final al principio, viendo como aparecen cuando avanzas y como desaparecen cuando retrocedes.

Esto solo tiene un inconveniente, algo que aun no he podido subsanar, que tampoco se si sera normal o si se puede arreglar.
Al pasar el raton hay que hacerlo con cierta velocidad (lo tipico vamos), pero si por ejemplo lo pasas muy lento, puede ser que algun menu no se vea. Esto me ha sido imposible saber porque pasa y como se soluciona, aun asi, si lo haces normal funciona todo bien.

Bueno, como se ve, no es que sea, lo mejor de lo mejor, pero si que es verdad que se puede hacer, que eso ya es bastante, por lo menos para mi. teniendo este ejemplo, ya se pueden añadir mas submenus y entendiendo como funciona, crear las funciones de css y el codigo html.

Espero dos cosas, que a alguien le haya servido y haber si se puede solucionar ese pequeño fallo, del movimiento del raton, de alguna manera.