Esto selecciona todas las <B>
etiquetas precedidas directamente por <A>
etiquetas:
A+B {
/* styling */
}
¿Cuál es el selector para todas las <A>
etiquetas seguidas directamente por <B>
etiquetas?
Aquí hay un ejemplo de HTML que se ajusta a mi pregunta:
<a>some text</a>
<b>some text</b>
css
css-selectors
Mostafa Farghaly
fuente
fuente
A
yB
están relacionados.b
correos electrónicos seguidos dea
los siguientes, de manera similar aa+b
donde puede seleccionar todosb
los correos electrónicos precedidos directamente pora
.Respuestas:
No puedes en CSS.
Editar: para ser un poco más útil, si usa, por ejemplo, jQuery (una biblioteca de JavaScript), puede usar
.prev()
.fuente
¿Te refieres al estilo A dado que tiene un elemento B directamente dentro o seguido? Me gusta esto:
<A> <B> </B> </A> // OR <A> </A> <B> </B>
No puedes hacer tal cosa en CSS (todavía). Eric Meyer afirma que este tipo de selector se ha discutido bastantes veces en la lista de correo de CSS y no es factible. Dave Hyatt, uno de los desarrolladores principales de WebKit, comenta con una buena explicación de por qué no se puede hacer.
Echa un vistazo a: la publicación del blog de Shaun Inman y el comentario de Eric Meyer .
David Hyatt también interviene .
fuente
SÓLO puede hacer lo contrario: Esto selecciona todas las etiquetas precedidas directamente por etiquetas.
Esto es lógicamente equivalente a su solicitud.
A menudo uso esto para diseñar una fila de muchas casillas de verificación con etiquetas
CSS:
label+input { margin-left: 4px; }
DOM:
<input id="a" name="a" type="checkbox"/><label for="a">...</label> <input id="b" name="b" type="checkbox"/><label for="b">...</label> <input id="c" name="c" type="checkbox"/><label for="c">...</label>
fuente
label+input
el margen se aplica a todos losinput
elementos a partir del segundo . Es una forma creativa de crear espacio entre ellos, pero no al principio ni al final de la fila. En este caso, es equivalente ainput:not(:first-child)
.Aunque no es muy útil, hoy en día podrías lograr este comportamiento invirtiendo el orden de tus elementos tanto cuando generas el HTML como aplicando las reglas CSS:
display: flex
yflex-direction: column-reverse
ul { display: flex; flex-direction: column-reverse; } .b ~ .a { color: red; }
<ul> <li class="a">A 3</li> <li class="c">C 2</li> <li class="c">C 1</li> <li class="b">B 1</li> <li class="a">A 2</li> <li class="a">A 1</li> </ul>
Además, si tiene 2 o más elementos en línea, puede lograrlo aplicando
float: right
, ya que se mostrarán en orden inverso:ul { float: left; list-style-type: none; } li { float: right; } li:not(:first-child) { margin-right: 20px; } .b ~ .a { color: red; }
<ul> <li class="a">A 3</li> <li class="c">C 2</li> <li class="c">C 1</li> <li class="b">B 1</li> <li class="a">A 2</li> <li class="a">A 1</li> </ul>
fuente