es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Detectando el “primer hijo” de un “cuadro de columna”

Tengo un diseño de varias columnas. En el ejemplo a continuación, tengo 3 columnas porque quiero comparar la alineación vertical entre la imagen y los párrafos.

https://jsfiddle.net/09L7e5rs/1/

He reiniciado el margen y el padding del párrafo y solo he agregado padding-bottom. De esta manera, normalmente alineo los párrafos y otros elementos en la parte superior. Hasta ahora todo bien.

p {padding: 0; margin: 0;} /* Reinicio */

p {
line-height: 1.5em;
padding-bottom: 1em;}

Cuando agrego una imagen, necesito agregar un espacio al párrafo después de ella (Primera parte del fiddle). Estoy utilizando:

img+p {
padding-top: 1em;}

El resultado es bueno y se ve así:

https://i.stack.imgur.com/XQQj2.png

El problema surge cuando hay un párrafo después de esta imagen en la siguiente columna (Para forzar este caso en el párrafo estoy agregando un break-inside: avoid. Segunda parte del fiddle).

View post on imgur.com

¿Existe alguna forma de detectar este párrafo como un primer hijo de esta caja de columnas?

De esta manera podría agregar padding-top: 0 en ese caso (Supongo que no al menos en CSS. Espero no necesitar Javascript, probablemente para medir la distancia al borde superior del padre).


Editado: No estoy agregando padding a las imágenes, porque en mi plantilla la gran mayoría de las imágenes necesitan padding: 0. Esta pregunta es muy específica acerca de estos “contenedores de fragmentación anónimos”.

Puedo resolver esto de varias formas. Agregando una clase específica para la imagen en particular, etc. Pero por ahora quiero evitar eso.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para detectar el primer hijo de una columna

    Lamentablemente, no hay una forma directa de detectar el primer hijo de una columna en CSS. Sin embargo, hay un método alternativo que consiste en utilizar el selector nth-child junto con :nth-last-child() para apuntar al primer elemento de una columna.

    Para aplicar estilos al primer hijo de una columna, sigue los siguientes pasos:

    1. Utiliza el selector nth-child para apuntar al primer hijo de cada columna:
      /* Apunta al primer hijo de cada columna */
      p:nth-child(3n+1) {
        /* Estilos a aplicar al primer hijo de una columna */
      }
      

      En este ejemplo, utilizamos 3n+1 para apuntar al primer hijo de cada columna ya que hay tres columnas en nuestro diseño. Ajusta este valor según el número de columnas en tu diseño.

    2. Utiliza la pseudo-clase :nth-last-child() para apuntar al último hijo de la columna anterior:

      /* Apunta al último hijo de la columna anterior */
      p:nth-last-child(3n+1):not(:first-child) {
        /* Estilos a aplicar al último hijo de la columna anterior */
      }
      

      Este selector apuntará al último hijo de la columna anterior que no es también el primer hijo de la columna actual.

    3. Aplica los estilos que necesites a cada selector.

      /* Elimina el padding superior para el primer párrafo de cada columna */
      p:nth-child(3n+1) {
      padding-top: 0;
      }
      /* Agrega padding superior al resto de los párrafos */
      p {
      line-height: 1.5em;
      padding-bottom: 1em;
      padding-top: 1em;
      }
      
      /* Elimina el padding superior para el último hijo de la columna anterior */
      p:nth-last-child(3n+1):not(:first-child) {
      padding-top: 0;
      }
      

    Utilizando estos selectores, puedes lograr el efecto deseado de eliminar el padding superior del primer párrafo en cada columna, manteniendo el padding para los párrafos en otras partes del diseño.

Comments are closed.