2011-04-26 14 views
35

Estoy tratando de make a navbar como ejercicio.¿Puedes hacer "un borde invisible"?

estoy usando a:hover para incluir un borde sólido alrededor del botón que se cernía. Sin embargo, esto hace que todos los demás botones se muevan por el tamaño del borde.

¿Cuál es la solución adecuada a este problema? Sé que hay otros (discutido here), específicamente traté de hacer que el borde "sea invisible pero ocupa espacio incluso cuando no está suspendido". Configuré border:transparent esperando que hiciera lo que quisiera, pero no mostraba espacio para tomar nada.

Sé que podría buscar a mano del color de la frontera para ser igual a un segundo plano y que sea sólida, pero esto no es lo que quiero. ¿Hay una forma sensata de resolver este problema?

Respuesta

90

¿Qué tal border: 10px solid transparent?

+0

Lo aceptaré porque parece ser la solución más limpia, aunque la respuesta de @ derekerdmann también es buena y es multiplataforma (se dice que esta solución no funciona en IE 6). http://stackoverflow.com/questions/5790615/can-you-make-an-invisible-border/5790638#5790638 – ripper234

15

Su mejor opción sería agregar relleno o márgenes a su elemento que sea del mismo tamaño que el borde y hacer que el borde tenga ancho cero, y luego mostrar el borde y eliminar el relleno con el selector a:hover.

Aquí hay un ejemplo. A menudo puede hacer esto con márgenes también.

a { 
 
    display: inline-block; 
 
    height: 2em; width: 100px; 
 
    padding: 2px; 
 
    background: #0ff; 
 
} 
 

 
a:hover { 
 
    padding: 0; 
 
    border :2px solid #000; 
 
}
<a href="#">Hello World</a>

+0

¿Qué le parece la sugerencia de @ Phliplip? (comentario) – ripper234

+2

La solución de @ Phliplip también funciona, siempre y cuando no tenga que soportar IE6. He estado lidiando con esto el tiempo suficiente como para pasar automáticamente a la solución completamente entre navegadores. Use lo que sea más lógico para su sitio y las necesidades de su cliente. – derekerdmann

2

border:transparent significa border: transparent 0 none

Si no se especifica una propiedad cuando se utiliza sintaxis abreviada a continuación, se restablece todas las propiedades a sus valores por defecto.

Necesitas darle un estilo de borde y un ancho de borde.

5

Una razón por la que esto no está funcionando como era de esperar es porque solo está aplicando en :hover, debe aplicarse al elemento sin el: selector de desplazamiento o obtendrá las dimensiones "cambiantes". No importa qué tipo de pantalla use, solo tiene que asegurarse de que sea la misma y, por defecto, <a> está en línea.

Otra razón tiene algo que ver con los bordes abreviados, debe agregar un tipo de borde para la versión transparente como solid en lugar de none.

La técnica que utiliza es totalmente legítimo, sin necesidad de cortes de relleno o contorno (que no añade dimensión).

http://jsfiddle.net/Madmartigan/kwdDB/

Prueba esto:

#wd-navbar li a { 
    border: medium solid transparent; 
    display: block; 
    margin: 1px; 
} 

#wd-navbar li a:hover { 
    background-color: #F5DEB3; 
    border: medium solid; 
} 
0

Configuración de color de borde: transparente; hace el trabajo.

a { 
    border-color : transparent ; 
} 

a:hover { 
    border-color : black; 
} 
0

elementos uso seudo ::after y ::before a ceate límites invisibles.

Cuestiones relacionadas