2010-10-04 29 views
30

He utilizado CSS antes y me encontré con el siguiente estilo de CSS, no tengo ni idea de lo que hace.¿Qué hace un [href^= "..."] en CSS?

a[href^="http:"] { 
    background: url(img/keys.gif) no-repeat right top; 
} 
a[href^="http://mysite.com"], a[href^="http://www.mysite.com"] { 
    background-image: none; padding-right:0; 
} 
+0

debe conocer información aquí: http://edgar.tumblr.com/post/1483797785/the-30-css-selectors-you-must-know-memorize – techfoobar

+0

Ver también https://stackoverflow.com/q/7366323 (el 'hilo duplicado'). – SamGoody

Respuesta

38
a[href^="http:"] 

Selecciona un elemento <a> cuya href valor del atributo comienza con http:.

Por ejemplo:

p[title^="para"] {background: green;} 

coincidirá con lo siguiente:

<p title="paragraph"> This paragraph should have a green background. </p> 
+0

+1 para el ejemplo. Agregué un ejemplo a mi respuesta también, pero es interminable como diablos: P – BoltClock

6

Esos son attribute-starts-with selectors, van a seleccionar <a> elementos con un atributo href a partir de ese valor, por ejemplo, a[href^="http:"] coincide con cualquier anclas con un href empezando por href="http:....", por ejemplo:

<a href="http://www.google.com">Test</a> <!-- would match --> 
<a href="#element">Test</a>    <!-- wouldn't match --> 
+0

, ¿qué quiere decir si hay un selector CSS con a [href^= "http://www.google.com"] { color: rojo;} solo el enlace de ancla que tiene href = "www .google.com "estará en rojo? – user443946

+0

@ user443946 - no, pero si ambos tenían el 'www.', entonces sería rojo, tiene que comenzar con * exactamente * la misma cadena. Pruébelo aquí: http: // jsfiddle.net/nick_craver/7hnAB/(asegúrese de estar en un navegador más nuevo que admita los selectores). –

+0

¿Eso es usar esta expresión regular? [^] (sigue una cita de la wikipedia) Coincide con un solo carácter que no está dentro de los corchetes. Por ejemplo, [^ abc] coincide con cualquier carácter que no sea "a", "b" o "c". [^ a-z] coincide con cualquier carácter individual que no sea una letra minúscula de "a" a "z". Como se indica arriba, los caracteres literales y los rangos se pueden mezclar. – orolo

5

Por cada enlace, que es el parámetro "href" comienza con "http:", establecer el fondo de una imagen clave (sin repetición, posicionado en el esquina superior derecha).

Para cada enlace cuyo parámetro "href" comienza con "http://misitio.com" o "http://www.misitio.com", establezca la imagen de fondo en nada (y el margen derecho en 0).

Para mí, esto parece un inteligente truco de CSS que hará que sus usuarios se den cuenta cuando están saliendo de su sitio web a través de un enlace externo al mostrar una imagen clave.

(creo que voy a utilizar en el futuro. :)

+0

Exactamente esto. Y es una * tremenda * idea genial en la que no había pensado antes pero que probablemente utilizaré en todas partes a partir de ahora. –

+0

+1 para sugerir el propósito de los estilos. – BoltClock

0

Las reglas dicen que, de acuerdo con the W3C docs:

  • Todas las anclas que tienen un atributo href que comienza con http:
  • Todas las anclas que tienen un atributo href que comienzan con http://mysite.com o http://www.mysite.com
0

Es un selector de atributos.
La parte ^= significa que el atributo href de las etiquetas de anclaje debe comenzar con http: en su primer ejemplo.

24

Esa es una de las substring-matching attribute selectors disponible en CSS3. Coincide con los enlaces con los atributos href cuyos valores comienzan con la cadena dada.

Para ilustrar esto, vamos a tomar el ejemplo de CSS, y añadir algunos valores por defecto:

a { 
    background: none; padding: 0 1em; 
} 

a[href^="http:"] { 
    background: url(img/keys.gif) no-repeat right top; 
} 

a[href^="http://mysite.com"], a[href^="http://www.mysite.com"] { 
    background-image: none; padding-right:0; 
} 

Y el estilo el siguiente código HTML con él. Los estilos de salida se resumen en los comentarios:

<ul> 
    <!-- [1] No background, 1em left and right padding --> 
    <li><a href="/index.php">My site's page</a></li> 

    <!-- [2] Background, 1em left and right padding --> 
    <li><a href="http://example.com">External link</a></li> 

    <!-- [3] No background, no right padding --> 
    <li><a href="http://mysite.com">My site's base URL without www</a></li>   

    <!-- [4] No background, no right padding --> 
    <li><a href="http://www.mysite.com">My site's base URL with www</a></li> 

    <!-- [5] No background, no right padding --> 
    <li><a href="http://mysite.com/page.php">A page in my site with base URL</a></li> 
</ul> 

¿Qué está pasando?

  1. Seleccionado por a única
    href="/index.php" atributo de este elemento no se inicia con http: o los otros valores.

    No hay fondo, pero hay relleno izquierdo y derecho.

  2. Seleccionado por a[href^="http:"] única
    href="http://example.com" atributo de este elemento se inicia con http: pero no se inicia con http://mysite.com.

    Hay relleno izquierdo y derecho, y una imagen de fondo.

  3. Seleccionado por a[href^="http:"] y a[href^="http://mysite.com"]
    href="http://mysite.com" atributo de este elemento se inicia con http: y otras aperturas con http://mysite.com.

    Como el segundo selector anula el primer selector, se eliminan la imagen de fondo y el relleno derecho.

  4. seleccionados por a[href^="http:"] y a[href^="http://www.mysite.com"]
    href="http://www.mysite.com" atributo de este elemento se inicia con http: y otras aperturas con http://www.mysite.com (nótese la www).

    Como el segundo selector anula el primer selector, se eliminan la imagen de fondo y el relleno derecho.

  5. Seleccionado por a[href^="http:"] y a[href^="http://mysite.com"]
    atributo de este elemento se inicia con http: y otras aperturas con http://mysite.com.

    Observe que, en comparación con el tercer enlace, el atributo en este contiene más que solo la URL base; sin embargo, ^= indica que el valor del atributo solo necesita comenzar con la URL base de su sitio, a diferencia de = que significa "seleccionar enlaces que solo apuntan a http://mysite.com". Por lo tanto, este enlace se corresponde con el segundo selector.

    Como el segundo selector anula el primer selector, se eliminan la imagen de fondo y el relleno derecho.

+0

Gran explicación, lástima que soy el único que + 1ed. – Lazlo

+0

@Lazlo: Gracias por el voto. Nick y Russell me ganaron con ejemplos mucho más concisos y, por lo tanto, con menos tiempo para escribir sus respuestas :) – BoltClock

+1

+1 respuestas sin aliento (pero relevantes) son las que hacen que este sitio sea genial =) –