selectores - Borde de CSS y la: pseudoclase dinámica de desplazamiento
selectores css (2)
Construí un menú desplegable persistente con dos niveles usando solo CSS. Es bastante estándar.
Es un conjunto anidado de UL y UL: el estado de desplazamiento es lo que muestra y oculta los niveles del submenú.
Algo como esto:
| *Pets* | Colors | Cars |
| Cats | Dogs | Birds| Goats | Sheep |
| Pets | *Colors* | Cars |
| Red | Orange | Green | Blue| Yellow |
Luego agregué un borde de 1px en la parte inferior del elemento UL de primer nivel. Me gusta esto:
| *Pets* | Colors | Cars |
--------------------------------------
| Cats | Dogs | Birds| Goats | Sheep |
Cuando sobrevivo un elemento de primer nivel (Mascotas), y luego muevo el mouse hacia abajo al segundo nivel (Gatos), desaparece todo el segundo nivel.
Finalmente descubrí que el borde de 1px de UL no está incluido en el área de desplazamiento para UL.
¿Puedo agregar un borde al final de un menú de menú desplegable sin estropear el menú que se desplaza?
¡Gracias!
Puede usar un fondo y darle una línea negra de 1px en la parte inferior, o puede agregar un elemento y colocarlo absolutamente con una altura de 1px y fondo negro. Me gustaría ir con la opción de fondo, porque es mucho más fácil.
Dado que en realidad está agregando el :hover
estado de :hover
al <li>
dentro de <ul>
, el borde del elemento primario <ul>
no está incluido en el área de :hover
. Resolvería tu problema para agregar el borde a cada <li>
lugar de al padre <ul>
. Asegúrese de agregar márgenes izquierdos y derechos de 0 a los <li>
e incluso si lo hace, es posible que necesite agregar un margen izquierdo negativo o posición izquierda para eliminar los espacios en el borde, así como agregar estilos de anulación a el submenú <li>
s si terminan con un borde inferior también.
<ul>
<li>Main1
<ul><li>sub1</li><li>sub2</li><li>sub3</li></ul>
</li>
<li>Main2
<ul><li>sub1</li><li>sub2</li><li>sub3</li></ul>
</li>
<li>Main3
<ul><li>sub1</li><li>sub2</li><li>sub3</li></ul>
</li>
<li>Main4
<ul><li>sub1</li><li>sub2</li><li>sub3</li></ul>
</li>
</ul>
y este CSS:
ul { background:#ccc; border-bottom:5px solid #0c0; height:25px; }
ul li { cursor:pointer; display:inline-block; position:relative; height:30px;
zoom:1; _display:inline; }
ul li:hover ul { display:block; }
ul li ul { border:0 none; display:none; position:absolute; top:30px; }
ul li ul li { display:inline; padding:5px; }
Las partes clave aquí son:
- Establecer la altura de
ul
para que sea más pequeña que la altura de laul li
principal en una cantidad igual alborder-width
delborder-width
- Establecer
display:inline-block
endisplay:inline-block
enli
para que el atributo de altura entre en vigor- (Nota:
zoom:1; _display:inline;
para IE6)
- (Nota:
-
position:relative
establecidaposition:relative
en laul li
principal yposition:absolute
en el sub ''ul li ul'' con el valor ''superior'' de la altura principal ''ul li''
Probado y funcionando: http://jsfiddle.net/TKrSM/1/ (puede que tenga que ajustar la altura y los valores superiores para el relleno en su versión)