Arranque 4 | Diseño del Santo Grial

El diseño del Santo Grial es un problema clásico de CSS en el desarrollo web. Aunque hay muchas soluciones creativas desarrolladas en HTML y CSS, el problema que se enfrentaba era que implicaba sacrificios en los que el enriquecimiento de una característica a menudo se ve comprometido a expensas de las demás. Los marcos modernos como Bootstrap 4 brindan utilidades para implementar este diseño fácilmente. Algunos de los requisitos en este diseño de diseño son:

  1. Una página con encabezado, pie de página y tres columnas fluidas receptivas.
  2. La columna central contiene el contenido principal.
  3. Las columnas izquierda y derecha contienen contenido para anuncios/navegación.
  4. Deben requerir un marcado mínimo.
  5. El pie de página debe ‘pegarse’ a la parte inferior de la página cuando el contenido es escaso.

Enfoque: Vamos a usar Bootstrap 4 para implementar un diseño simple para el mismo. Los componentes que vamos a utilizar directamente para implementar este diseño son:

  • Barra de navegación receptiva
  • Fluid Grid System BS4 proporciona un sistema de diseño receptivo compatible con todos los dispositivos.
  • Clases de utilidad de margen y relleno sensibles Las propiedades como margen y relleno se pueden aplicar directamente mediante clases de utilidad.
  • Pie de página receptivo (con algunos ajustes según los requisitos) La propiedad Flex CSS utilizada se puede leer aquí .

Para obtener información sobre BS4, puede leer la documentación aquí

Solución: 

HTML

<!-- Here, you are provided button 'Toggle' to hide & show content
to help you understand how sticky footer with flex is working. -->
<!DOCTYPE html>
<html lang="en">
<head>
    <!-- meta adjustments -->
    <meta charset="utf-8">
    <meta name="viewport"
        content="width=device-width, initial-scale=1">
    <!-- Imported libraries using CDN -->
    <link rel="stylesheet" href=
"https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
    <script src=
"https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js">
    </script>
    <script src=
"https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js">
    </script>
    <script src=
"https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js">
    </script>
    <!-- CSS configuration for the document -->
    <style>
        .container {
            display: flex;
            justify-content: center;
            align-items: center;
            padding: 0px;
        }
        .main {
            flex: 1 0 auto;
        }
        h1 {
            color: white;
        }
        p {
            background-color: #efece9;
            border-radius: 4px;
            padding-left: 8px;
        }
        .card {
            border-radius: 12px;
            -webkit-box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.5);
            -moz-box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.5);
            box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.5);
        }
        body {
            display: flex;
            min-height: 100vh;
            flex-direction: column;
        }
        .card-header:first-child {
            border-top-left-radius: 12px;
            border-top-right-radius: 12px;
            border-bottom: 1px solid floralwhite;
        }
        .card-body {
            min-height: 160px;
        }
        .card-footer {
            padding-bottom: 0px;
        }
        footer {
            flex-shrink: none;
        }
    </style>
</head>
<body>
    <!-- Navbar -->
    <nav class="navbar navbar-light justify-content-center">
        <span class="navbar-brand mb-0 h1">
            GeeksforGeeks
        </span>
    </nav>
    <!-- Body Content -->
    <div class="container-fluid main">
        <div class="row">
            <!-- Navigation/Other Links -->
            <div class="col-sm-2">
                <div class="container">
                    <div class="card w-100">
                        <div class="card-body">
                             
<p>DSA Course</p>
 
                             
<p>Machine Learning</p>
 
                             
<p>Front End Course</p>
 
                        </div>
 
                    </div>
                </div>
            </div>
            <!-- Content Panel -->
            <div class="col-sm-8">
                <div class="container">
                    <div class="card w-100">
                        <div class="card-header">
                            <button class="btn btn-success
                                    btn-block">
                                Toggle for Langugaes
                            </button>
                        </div>
                        <!-- This is the content deciding
                            the nature of the footer -->
                        <div class="card-body content">
                             
<p> </p>
 
                             
<p> C </p>
 
                             
<p> C++ </p>
 
                             
<p> Java </p>
 
                             
<p> Python </p>
 
                             
<p> C# </p>
 
                             
<p> JavaScript </p>
 
                             
<p> jQuery </p>
 
                             
<p> SQL </p>
 
                             
<p> PHP </p>
 
                        </div>
                    </div>
                </div>
            </div>
            <!-- Advertisement -->
            <div class="col-sm-2">
                <div class="container">
                    <div class="card w-100">
                        <div class="card-body">
                             
<p>Adv - 1</p>
 
                             
<p>Adv - 2</p>
 
                             
<p>Adv - 3</p>
 
                             
<p>Adv - 4</p>
 
                             
<p>Adv - 5</p>
 
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <br><br>
    <!-- Footer ('flex-shrink' property applied here)-->
    <footer class=" bg-success">
        <div class="container text-center">
            <small style="color:white;">
                <b>GeeksforGeeks: </b>
                A Computer Science Portal for Geeks </small>
        </div>
    </footer>
    <!-- jQuery implementation for showing and hiding Content -->
    <script>
        $(document).ready(function () {
            $('button').click(function () {
                $('.content').toggle('slow');
            });
        });
    </script>
</body>
</html>

Producción:

  • Cuando el contenido está oculto:
  • Cuando se muestra el contenido:

Publicación traducida automáticamente

Artículo escrito por devproductify y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *