¿Qué significa el selector CSS "+" (signo más)?

750

Por ejemplo:

p + p {
  /* Some declarations */
}

No sé lo que +significa. ¿Cuál es la diferencia entre esto y solo definir un estilo para pfuera + p?

gday
fuente
En la práctica, esto es principalmente útil para aplicar un margen o relleno entre los elementos de la lista del mismo tipo, por lo que no se requiere ningún caso especial para el primer o el último elemento.
Christophe Roussy

Respuestas:

750

Ver selectores adyacentes en W3.org.

En este caso, el selector significa que el estilo se aplica solo a los párrafos que siguen directamente a otro párrafo.

Un pselector simple aplicaría el estilo a cada párrafo de la página.


Esto solo funcionará en IE7 o superior. En IE6, el estilo no se aplicará a ningún elemento. Esto también va para el >combinador, por cierto.

Consulte también la descripción general de Microsoft para la compatibilidad CSS en Internet Explorer .

Thorarin
fuente
Me pareció útil no colapsar el elemento cuando está oculto. Por lo tanto, una forma más adecuada de ocultarlo es usar en visibility : hidden/visiblelugar de display : none/block. Ver esta referencia .
KFL
66
¿Cuál será la diferencia entre p + p y p> p?
Muhammad Rizwan
77
@MuhammadRizwan p > psignifica un anidado p, cualquiera pque esté directamente debajo de otro p, como <p><p>This paragraph</p></p>.
Banana
203

Es el selector de hermano adyacente.

Del blog Splash of Style.

Para definir un selector adyacente CSS, se usa el signo más.

h1+p {color:blue;}

El código CSS anterior formateará el primer párrafo después (no dentro) de cualquier encabezado h1 como azul.

h1>pselecciona cualquier pelemento que sea un hijo (interno) directo (de primera generación) de un h1elemento.

  • h1>ppartidos <h1> <p></p> </h1>( <p>dentro <h1>)

h1+pseleccionará el primer pelemento que es un hermano (al mismo nivel de dom) como h1elemento.

  • h1+ppartidos <h1></h1> <p><p/>( <p>junto a / después <h1>)
Matthew Vines
fuente
3
Estoy confundido entre plus signy greater sign. Si uso en h1>plugar de h1+p, ¿me da el mismo resultado? ¿Podrías explicar un poco qué tan diferente entre ellos?
lvarayut
9191
En sus ejemplos, h1>pselecciona cualquier pelemento que sea un hijo directo (primera generación) de un h1elemento. h1+pseleccionará el primer pelemento que es un hermano (al mismo nivel de dom) como h1elemento. h1>ppartidos <h1><p><p></h1>, h1+ppartidos<h1></h1><p><p/>
Matthew Vines
1
@MatthewVines deberías agregar que h1> p y h1 + p a tu respuesta
MonsterMMORPG
Entonces, esencialmente en su ejemplo, coincidirá con el primer <p> después de <h1>, pero ¿coincidiría también con el mismo <p> si viniera antes de <h1>? ¿O es solo después?
Vincent
53

El +signo significa seleccionar un "hermano adyacente"

Por ejemplo, este estilo se aplicará desde el segundo <p>:

p + p {
   font-weight: bold;
} 
<div>
   <p>Paragraph 1</p>
   <p>Paragraph 2</p>
</div>


Ejemplo

Vea este JSFiddle y lo comprenderá: http://jsfiddle.net/7c05m7tv/ (Otro JSFiddle: http://jsfiddle.net/7c05m7tv/70/ )


Soporte de navegador

Los selectores de hermanos adyacentes son compatibles con todos los navegadores modernos.


Aprende más

Cas Bloem
fuente
42

"+" es el selector de hermanos adyacentes. Seleccionará cualquier p DIRECTAMENTE DESPUÉS de ap (no un niño o padre, sino un hermano).

Gordon Gustafson
fuente
23

+Se llama selector Adjacent Sibling Selector.

Por ejemplo, el selector p + pselecciona los pelementos que siguen inmediatamente a los pelementos.

Puede considerarse como un looking outsideselector que verifica el elemento que sigue inmediatamente.

Aquí hay un fragmento de muestra para aclarar las cosas:

body {
  font-family: Tahoma;
  font-size: 12px;
}
p + p {
  margin-left: 10px;
}
<div>
  <p>Header paragraph</p>
  <p>This is a paragraph</p>
  <p>This is another paragraph</p>
  <p>This is yet another paragraph</p>
  <hr>
  <p>Footer paragraph</p>
</div>

Como somos uno el mismo tema, vale la pena mencionar otro selector, ~selector, que esGeneral Sibling Selector

Por ejemplo, p ~ pselecciona todo lo pque sigue p, no importa dónde esté, pero ambos pdeben tener el mismo padre.

Así es como se ve con el mismo marcado:

body {
  font-family: Tahoma;
  font-size: 12px;
}
p ~ p {
  margin-left: 10px;
}
<div>
  <p>Header paragraph</p>
  <p>This is a paragraph</p>
  <p>This is another paragraph</p>
  <p>This is yet another paragraph</p>
  <hr>
  <p>Footer paragraph</p>
</div>

Observe que el último ptambién coincide en esta muestra.

Lijo Joseph
fuente
8

+presenta uno de los selectores relativos. Lista de todos los selectores relativos:

div p- Todos los <p>elementos dentro de los <div>elementos están seleccionados.

div > p- Se seleccionan todos los <p>elementos cuyo padre directo está <div>seleccionado. También funciona al revés ( p < div)

div + p- Todos los <p>elementos se colocan inmediatamente después de <div>seleccionar el elemento.

div ~ p- Se seleccionan todos los <p>elementos precedidos por un <div>elemento.

Más información sobre selectores verifique aquí .

Nesha Zoric
fuente
El último selector está equivocado. De acuerdo con MDN : El combinador general de hermanos (~) separa dos selectores y coincide con el segundo elemento solo si sigue al primer elemento (aunque no necesariamente de forma inmediata), y ambos son hijos del mismo elemento padre
Carles Alcolea
2

Selecciona el siguiente párrafo y sangra el comienzo del párrafo desde la izquierda tal como lo haría en Microsoft Word.

flo
fuente
2
p+p{
//styling the code
}

p+p{
} simply mean find all the adjacent/sibling paragraphs with respect to first paragraph in DOM body.

    <div>
    <input type="text" placeholder="something">
    <p>This is first paragraph</p>
    <button>Button </button>
    <p> This is second paragraph</p>
    <p>This is third paragraph</p>
    </div>

    Styling part 
    <style type="text/css">
        p+p{
            color: red;
            font-weight: bolder;
        }
    </style>

   It will style all sibling paragraph with red color.

salida final se parece a esto

ingrese la descripción de la imagen aquí

IMRA
fuente
1

El signo más (+) seleccionará el primer elemento inmediato. Cuando usa el selector +, debe dar dos parámetros. Esto será más claro con el ejemplo: aquí div y span son parámetros, por lo que en este caso solo se aplicará el primer span después del div.

 div+ span{
   color: green;
   padding :100px;
}

     <div>The top or first element  </div>
       <span >this is span immediately after div, this will be selected</span>
       <span>This will not be selected</span>

El estilo anterior solo se aplicará al primer tramo después de div. Es importante tener en cuenta que no se seleccionará el segundo tramo.


fuente