DEV Community

Cristian Fernando
Cristian Fernando

Posted on

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.

Top comments (0)