DEV Community

Cristian Fernando
Cristian Fernando

Posted on

1

Practica selectores CSS con ejercicios 😎

Introducción

Los selectores CSS son vitales y los conceptos mas importantes que necesitamos aprender y dominar.
Un selector puede ser de la más básico como un selector de tipo o d clase, hasta tan complejo como selectores combinados con pseudoclases, etc.

En este breve post te propongo un index.html de ejemplo y 5 preguntas de selectores basados en dicho archivo para mejorar nuestros conocimientos de selectores en CSS.

Empecemos 😃

Practica

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Página Compleja</title>
</head>
<body>
    <header id="main-header" class="header">
        <h1 class="title">Título de la Página</h1>
        <nav class="navbar">
            <ul class="menu">
                <li><a href="#home" class="active">Inicio</a></li>
                <li><a href="#about">Acerca de</a></li>
                <li><a href="#services">Servicios</a></li>
                <li><a href="#contact">Contacto</a></li>
            </ul>
        </nav>
    </header>

    <section id="hero" class="hero-section">
        <div class="hero-content">
            <h2>Bienvenido a nuestra página</h2>
            <p class="description">Este es un ejemplo de una página compleja para practicar selectores CSS.</p>
            <button class="cta-button">¡Haz clic aquí!</button>
        </div>
    </section>

    <main>
        <article id="post-1" class="blog-post">
            <h3>Artículo 1</h3>
            <p class="post-content">Este es el contenido del primer artículo.</p>
            <a href="#read-more" class="read-more">Leer más</a>
        </article>

        <article id="post-2" class="blog-post featured">
            <h3>Artículo 2</h3>
            <p class="post-content">Este es el contenido del segundo artículo.</p>
            <a href="#read-more" class="read-more">Leer más</a>
        </article>

        <article id="post-3" class="blog-post">
            <h3>Artículo 3</h3>
            <p class="post-content">Este es el contenido del tercer artículo.</p>
            <a href="#read-more" class="read-more">Leer más</a>
        </article>
    </main>

    <aside class="sidebar">
        <h4>Categorías</h4>
        <ul class="categories">
            <li><a href="#category-1">Categoría 1</a></li>
            <li><a href="#category-2">Categoría 2</a></li>
            <li><a href="#category-3">Categoría 3</a></li>
        </ul>
    </aside>

    <footer id="main-footer" class="footer">
        <p>&copy; 2023 Todos los derechos reservados.</p>
    </footer>

    <form id="contact-form" class="form">
        <label for="name">Nombre:</label>
        <input type="text" id="name" name="name" placeholder="Tu nombre">

        <label for="email">Correo electrónico:</label>
        <input type="email" id="email" name="email" placeholder="Tu correo">

        <label for="message">Mensaje:</label>
        <textarea id="message" name="message" rows="5" placeholder="Escribe tu mensaje"></textarea>

        <button type="submit" class="submit-button">Enviar</button>
    </form>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

Intenta responder las siguientes preguntas en tu propio editor de código. No esta permitido modificar el HTML, trabaja directamente escribiendo los selectores correspondientes.

  1. ¿Cómo seleccionarías el primer <article> dentro del <main> que tenga la clase blog-post, pero solo si no tiene la clase featured?

  2. ¿Qué selector usarías para aplicar estilos únicamente al último elemento <li> dentro de la lista de categorías (<ul class="categories">) que esté dentro del <aside>?

  3. ¿Cómo seleccionarías todos los elementos <p> que sean hijos directos de un <article> con la clase blog-post, pero solo si ese <article> es el tercer hijo de su contenedor padre?

  4. ¿Qué selector usarías para aplicar estilos al botón de envío (<button class="submit-button">) solo cuando el formulario (<form>) tenga el atributo id igual a "contact-form" y el botón esté siendo presionado (pseudo-clase :active)?

  5. ¿Cómo seleccionarías el primer carácter de cada párrafo (<p>) dentro del <main> para aplicarle un estilo especial (por ejemplo, cambiar su color o tamaño)?


Respuestas

  • ¿Cómo seleccionarías el primer <article> dentro del <main> que tenga la clase blog-post, pero solo si no tiene la clase featured?
main .blog-post:not(.featured):first-of-type{
  border: 1px solid;
}
Enter fullscreen mode Exit fullscreen mode

La pseudoclase :not es útil para ignorar selectores (ideal para este ejercicio) y la pseudoclase :first-of-type selecciona el primer tipo de etiqueta que necesitamos.

  • ¿Qué selector usarías para aplicar estilos únicamente al último elemento <li> dentro de la lista de categorías (<ul class="categories">) que esté dentro del <aside>?
.sidebar ul.categories li:last-child{
  background-color: red;
}
Enter fullscreen mode Exit fullscreen mode

La pseudoclase :last-child nos sirve para seleccionar el último li de nuestra lista de ul.

  • ¿Cómo seleccionarías todos los elementos <p> que sean hijos directos de un <article> con la clase blog-post, pero solo si ese <article> es el tercer hijo de su contenedor padre?
main article.blog-post:nth-child(3) > p{
  border: 1px solid yellow;
}
Enter fullscreen mode Exit fullscreen mode

La pseudoclase nth-child(n) nos permite seleccionar un item en concreto que nosotros le indicamos.

  • ¿Qué selector usarías para aplicar estilos al botón de envío (<button class="submit-button">) solo cuando el formulario (<form>) tenga el atributo id igual a "contact-form" y el botón esté siendo presionado (pseudo-clase :active)?
#contact-form button.submit-button:active {
  background-color: red;
}
Enter fullscreen mode Exit fullscreen mode

La psudoclase active solo nos sirve para hacer un cambio de esta de un elemento.

  • ¿Cómo seleccionarías el primer carácter de cada párrafo (<p>) dentro del <main> para aplicarle un estilo especial (por ejemplo, cambiar su color o tamaño)?
main .blog-post > p::first-letter {
  font-size: 2rem;
}
Enter fullscreen mode Exit fullscreen mode

El selector combinado > selecciona todos los hijos directos de .blog-post y con el pseudoelemento p::first-letter seleccionamos la primera letra de cada párrafo.


Conclusiones

Los selectores CSS pueden ser simples o complejos según nuestras necesidades, es importante dominar este tipo de selectores para poder avanzar en nuestros conocimientos sobre CSS.

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (0)

Cloudinary image

Optimize, customize, deliver, manage and analyze your images.

Remove background in all your web images at the same time, use outpainting to expand images with matching content, remove objects via open-set object detection and fill, recolor, crop, resize... Discover these and hundreds more ways to manage your web images and videos on a scale.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay