2011-12-24 13 views
18

Tengo una lista simple de UL, al pasar el puntero sobre el elemento de lista More en el HTML siguiente, muestra su menú secundario y lo muestra.Al desplazar un elemento de la lista CSS, cambie los elementos principales CSS

Lo que tengo que hacer es cambiar el CSS del CSS real de More una vez que el menú secundario se muestra y se desplaza.

Así que si pasa el mouse sobre More aparece un menú secundario, luego desplace el cursor sobre ese menú secundario. En este punto, necesito cambiar el CSS del menú principal de este elemento secundario, que sería el menú que tiene More, ya que es texto.

Si sabes cómo hacerlo sin Javascript, me gustaría saber ... ¿Tal vez ni siquiera es posible sin JS?

<div id="nav-wrapper"> 
     <ul> 

      <li><a href="">Link</a></li> 

      <li><a href="">Link 5</a></li> 

      <li><a href="">More</a> 
       <ul> 
        <li><a href="">Sub Link 1</a></li> 
        <li><a href="">Sub Link 2</a></li> 
        <li><a href="">Sub Link 3</a></li> 
        <li><a href="">Sub Link 4</a></li> 
        <li><a href="">Sub Link 5</a></li> 
       </ul> 
      </li> 

     </ul> 
    </div> 

El CSS

<style type="text/css" media="screen"> 
#nav-wrapper ul { 
    position:relative; 
    width: 700px; 
    float: right; 
    margin: 0; 
    list-style-type: none; 
} 
#nav-wrapper ul li { 
    vertical-align: middle; 
    display: inline; 
    margin: 0; 
    color: black; 
    list-style-type: none; 
} 
#nav-wrapper ul li a { 
    text-decoration: none; 
    white-space: nowrap; 
    line-height: 45px; 
    font-size: 13px; 
    color: #666; 
    padding: 5px 15px; 
    -webkit-border-radius: 4px; 
    -moz-border-radius: 4px; 
    border-radius: 4px; 
} 
#nav-wrapper ul li a:hover { 
    color: #fff; 
    background-color: #4caef2; 
} 
#nav-wrapper ul li a:visited { 
    color: #666; 
} 

/* Hide Sub-menus */ 
#nav-wrapper ul ul{ 
    display: none; 
} 
/* SHOW Sub-menus on HOVER */ 
#nav-wrapper ul li:hover ul{ 
    display: block; 
    margin:-10px 0 0 0; 
    padding:0px 20px 20px 20px; 
    border-color:#fff; 
    border:1px; 
    border-style:solid; 
    background:#FFF; 
    position:absolute; 

    top:45px; 
    right: 320px; 
    width: 420px; 
} 

</style> 

Respuesta

31

Bueno, a pesar de lo que dicen estas otras respuestas, esta es una manera furtiva de hacerlo usando el adjacent selector.

HTML:

<ul> 
    <li> 
     <ul> 
      <li>Sub Link 1</li> 
      <li>Sub Link 2</li> 
      <li>Sub Link 3</li> 
     </ul> 
     <a href="#">Menu</a> 
    </li> 
</ul> 

CSS:

* { 
    margin: 0; 
    padding: 0; } 
ul { list-style: none; } 
ul > li { position: relative; } 
ul li a { 
    height: 16px; 
    display: block; } 
ul ul { 
    position: absolute; 
    top: 16px; 
    left: 0; 
    cursor: pointer; 
    display: none; } 
ul li:hover ul { display: block; } 
ul ul:hover + a { color: red; } 

Vista previa: http://jsfiddle.net/Wexcode/YZtgL/

+0

wow eso es bastante increíble! – CodeDevelopr

3

No se pueden seleccionar los elementos primarios en CSS. Necesitarás javascript/jQuery para lograr lo que quieres.

CSS3 selectors...

+3

¿Por qué votar abajo? Esto es 100% correcto. – Scott

6

vieja pregunta, y la respuesta aceptada es inteligente. Pero esto es bastante trivial para lograr, con tan sólo un cambio en el CSS de:

#nav-wrapper ul li a:hover 

a:

#nav-wrapper ul li:hover>a 

Esto no va a funcionar en IE6 (que el navegador sólo entiende flotar sobre estilos anclas) Pero tampoco el selector del combinador de hermanos adyacentes (+).

Ver this jsFiddle para la solución en acción

+0

Esto cambia el elemento secundario, no el elemento principal –

+0

@JoeLannen - sí, y esto logra exactamente lo que OP solicitó. No existe un selector parental, pero moviendo los estilos de desplazamiento de CSS al padre 'li' de esta manera, no necesita uno. – CherryFlavourPez

+0

Sé que no hay selector de padres, la pregunta que se le pide es cambiar el CSS de los padres. Veo a dónde vas con tu solución ahora. cheers –

0

La solución de @CherryFlavourPez por encima de las obras. La razón por la que funciona no se explica claramente. Tenga en cuenta que el elementoli (el uno con el texto "Más") es un padre del submenú (el ul con los cinco li elementos en ella). El elemento a es un (adyacente) hermano del submenú.Por lo tanto, cuando está sobre el submenú, en realidad todavía está sobre el elemento principal li.

+0

Todavía no es posible usar CSS para cambiar el CSS del padre del hijo. – leoncc

Cuestiones relacionadas