Cristalab

                 ¿Quieres registrarte?

Cómo quitar el borde punteado de los links en CSS

Por: ryuz
18 de Octubre del 2006
290 de clabLevel
Otros artículos de ryuz
27,381 visitas
css

Un método simple para quitar el borde punteado en estado activo de los enlaces de tu menú o cualquier tipo de link, usando CSS.

Ejemplo

Observad en el ejemplo de arriba que esto es solamente aplicable a los enlaces de tamaño conocido. Es decir, enlaces que tienen una anchura y una altura con sus respectivos valores en píxeles, en ems, porcentage etc.

La idea básica es incluir en el contenido del enlace un elemento adicional (<em> y <span> son aceptables) y, entonces, damos a cada enlace una posición relativa y el al elemento adicional una posición absoluta.

Cuando se clica en el enlace su tamaño se reduce a CERO. Esto hace que el borde punteado no se vea porque sólo se coloca alrededor del enlace, independientemente del contenido.

Como el elemento adicional tiene una posición absoluta, todavía será visible y puedes darle el estilo que quieras en el estado activo.

XHTML
Esto es necesario para permitir que el enlace sea reducido al tamaño cero mientras que todavía muestra el texto clickable del enlace.

Código :

<ul id="navlist">
<li><a href="#nogo"><em>Opción Uno</em></a></li>
<li><a href="#nogo"><em>Opción Dos</em></a></li>
<li><a href="#nogo"><em>Opción Tres</em></a></li>
<li><a href="#nogo"><em>Opción Cuatro</em></a></li>
<li><a href="#nogo"><em>Opción Cinco</em></a></li>
</ul>



CSS
Aquí va todo el código CSS necesario para que el método funcione con sus explicaciones:

Código :

/*
Paso 1

La lista horizontal BÁSICA
*/


#navlist {
   /* Quitamos los círculos de la lista */
   list-style-type:none;
   /* Quitamos el padding */
   padding:0;
   /* Cambiamos la anchura total de los enlaces de la lista */
   width:36em;
   /* Cambiamos el ancho */
   height:5em;
   /* Centramos la lista */
   margin:0 auto; 
}
#navlist li {
   /* Cambiamos la anchura y la altura de los elementos de la lista */
   display:block;
   width:7em;
   height:2em;
   /* Usamos float: para que queden en una línea horizontal */
   float:left;
   /* Agregamos un espacio entre cada elemento de la lista */
   margin-right:0.2em;
}
#navlist li em {
   /* Quitamos el estilo acentuado del texto */
   font-style:normal;
   /* Que sea de color negro */
   color:#000;
}


/*
Paso 2

Añadimos la seudo-clase :hover
*/

#navlist a {
   /* Cambiamos la anchura y la altura del enlace */
   display:block;
   width:7em;
   height:2em;
   /* Damos a los enlaces una posición relativa
   de modo que el <em> pueda tener una posición
   absoluta dentro de cada enlace */
   position:relative;
   /* Quitamos el subrayado del texto */
   text-decoration:none;
}

/* Damos estilo a <em> */
#navlist a em {
   font-style:normal;
   color:#000;
   /* Damos al texto del <em> el mismo tamaño total que el del enlace */
   display:block;
   width:7em;
   height:1.5em;
   border-bottom:0.5em solid #000;
   /* Damos al texto del <em> una posición
   absoluta de modo que sea sacado del
   flujo normal y del control del enlace */
   position:absolute;
   top:0;
   left:0;
   /* Hacemos que el cursor del enlace aparezca
   cuando el ratón está sobre el texto del <em> */
   cursor:pointer;
}

#navlist a:hover {
   /* Agregamos un :hover para los enlaces. 
   Esto es necesario para que IE aplique el :hover al <em> */
   color:#c00;
}

#navlist a:hover em {
   /* Cambiamos el color del borde inferior de <em> en :hover */
   border-bottom:0.5em solid #c00;
}

/*
Paso 3

Quitamos el active/focus dotted border (el borde punteado de cuando está activo)
*/

#navlist a:active, #navlist a:focus {
   /* Reducimos el tamaño del enlace a cero cuando el enlace está activo.
   ¡Esto quita literalmente el borde punteado
   que SOLAMENTE se aplica al enlace a sí mismo y no
   a ninguno de los elementos que contiene
   CUANDO ESOS ELEMENTOS TIENEN UNA POSICIÓN ABSOLUTA! */
   width:0;
   height:0;
   outline:0; /* Para los navegadores que lo entienden */
}

/*
Paso 4

Damos el estado activo
*/

#navlist a:active em, #navlist a:focus em {
   /* Cambiamos el borde inferior y el texto
   del <em> a azul en estado activo que da así
   un alternativa conveniente al borde punteado */
   border-bottom:0.5em solid #00c;
   color:#00c;outline:0; /* Para los navegadores que lo entienden */
}


Este método para eliminar el borde punteado que aparece en el estado activo cuando usamos CSS está traducido del que Stu Nicholls nos ofrece en su web CCSplay.


Artículos Relacionados


Etiquetas css

Comentarios | Enviar un comentario
y es posible usarlo en links con imagenes tambien?
Por: linda_blog
a {
outline:none;
}

Eso hace magia
Por: el_itur
Cool...

Muy buen aporte...
Por: Camuss

el_itur :

a {
outline:none;
}

Eso hace magia


Pero sólo hace la magia en FireFox en IE no hay ninguna magia.
Por: ryuz
buen dato! :)
Por: mx_blog
Como un experimento de css (digo de cssplay) me parece bien, pero en la practica y vida real [ins]virtual[/ins], no me parece nada practico ni usable, hacer todo un hack para quitar el outline de un enlace no le veo el sentido, en especial porque estos fueron creados para demostrar el foco del elemento en este caso nuestros enlaces.

outline:0; oculta el outline de forma muy sencilla, aunque solo Firefox (y creo que Safari también) lo soportan.

Concluyendo, es un buen experimento; pero desde mi punto de vista no es usable.
Por: NEO_JP
Pues estoy absolutamente de acuerdo conmigo mismo.
Por: Sisco
Esta bueno
Por: Arturo_blog
Yo tambien estoy totalmente de acuerdo conmigo!!! gracias!
Por: Forón_blog
...de acuerdo
Por: asael2_blog
por que no se usa el text-decoration:none???
Por: estoy confundido..._blog
en ie no sirve el outline:none pues pq ie(6) no da esa propiedad a los links activos ;D
Por: Rodrigo_blog
a {
outline:none
}

lo hace todo, le quita los bordes en navegadores gecko y en safari, no se si en opera, lo que no entiendo es porque das una explicacion tan grande cuando esas 3 lineas lo hacen todo.
Por: Rodrigo_blog
Para el borde de los links con imágenes la mejor solución que he encontrado es agregar la propiedad border=0 en la imágen (En html, NO en CSS), aunque no sea lo recomendable...
Por: Favio_blog
En pocas palabras el IE es un monumento a la porqueria
Por: Sinai_blog
para sacar esos bordes molestos en ie, una manera que no es muy usable.. pero de ultima sirve sin tener que hacer tantas lineas de codigo es esta:

<a href="#" onfocus="this.blur();">hola</a>
Por: rulo_blog
Me olvidé.
El problema de eso, es que si alguien quiere seleccionar el link navegando los links de la página con la tecla TAB, ese link con va a ser seleccionable. Totalmente anti usabilidad.

De todas maneras lo puse, porque a veces se necesita para algun desarrollo especifico donde importa mas el look que la usabilidad, para un número limitado de personas.

No lo usaría en la web.
Por: rulo_blog
No quiero quitar mérito a este artículo, es todo un reto y lo ha conseguido solventar estupendamente. Esto funciona en IE6 y firefox 1.5 (al menos):

a:focus
{
outline:none;
}

un saludo!
Por: div2_blog

div2_blog :

No quiero quitar mérito a este artículo, es todo un reto y lo ha conseguido solventar estupendamente. Esto funciona en IE6 y firefox 1.5 (al menos):

a:focus
{
outline:none;
}

un saludo!


creo que deberían poner esto último allá arriba ^_^...aunque sea como opción alternativa :P...

PD:gracias por el codigo :D
Por: Osukaru_blog
:)
.img{
cursor: pointer;
margin: 0px;
border: 0px;
outline: hidden;
}
Por: manolo_blog
buenisimo tips gracias..! :cool:
Por: jripper
muy buen aporte...de todas formas..sigo pensando que lo mejor es sugerirle a todos nuestros clientes y amgigo no usar mas iex firefox es gratis y por lo menos se tomaron un tiempo para probarlo opera tambien es gratuito...y por lo menos tubieron la responsabilida de que cumpla algunos estandares...yo propongo fomentar el uso de otros naveadores que no sean iex
Por: zacarias_blog
excelente recurso, me sirvio de mucho, thank s
Por: George_blog
a:focus
{
outline:none;
}


Gracias por el dato!!!!!!!!!!
Por: Carla_blog
no se ustedes, pero yo siempre leo los finales del post, porque ahi suelen estar las soluciones depuradas... como ahora.

Gracias a todos!!!!
Por: luysx
En donde se pone el codigito?
Por: :)-blog
a:focus
{
outline:none;
}

exelente !!
gracias
Por: omar-blog
Para el borde de los links con imágenes la mejor solución que he encontrado es agregar la propiedad border=0 en la imágen (En html, NO en CSS), aunque no sea lo recomendable...

Gracias por el concejo
es una buena opcion
Favio_blog
Por: Carlangas-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.