Curso 2024-25 - IES El Rincón
Proyecto mantenido por ichigar
Vamos a crear paso a paso una web y vamos a organizarla y estructurarla utilizando los conceptos del modelo de cajas y las propiedades de maquetado que hemos visto.
Partiremos de una estructura básica de una web compuesta de:
El HTML de dicha página es el siguiente:
<div class="banner">
<h1>Mi Página Web</h1>
<p>Bienvenidos a mi sitio web</p>
</div>
<div class="navbar">
<a href="#">Inicio</a>
<a href="#">Servicios</a>
<a href="#">Acerca de</a>
<a href="#">Contacto</a>
</div>
<div class="container">
<div class="sidebar">
<h3>Panel Lateral</h3>
<ul>
<li><a href="#">Enlace 1</a></li>
<li><a href="#">Enlace 2</a></li>
<li><a href="#">Enlace 3</a></li>
</ul>
</div>
<div class="content">
<h2>Bloque de Contenido</h2>
<p>Aquí va el contenido principal de la página. Puedes incluir texto, imágenes, tablas o cualquier otro tipo de información.</p>
<p>Ejemplo de párrafo adicional para ilustrar el diseño del bloque principal.</p>
</div>
</div>
<div class="footer">
<p>© 2025 Mi Página Web. Todos los derechos reservados.</p>
</div>
Y su apariencia antes de aplicar ningún estilo:
La web está compuesta de 4 “cajas principales”:
banner
: para el encabezadonavbar
: para la barra/menú de navegacióncontainer
: Incluye a su vez dos cajas:
sidebar
: para el panel lateral.content
: para el contenido principal de la web.footer
: para el pié de página.Observa también que por defecto el navegador aplica estilos de forma predeterminada a los diferentes elementos:
Para que los elementos de la web se dispongan de la manera deseada aplicamos los siguientes estilos iniciales:
.banner,
.navbar,
.container,
.sidebar,
.content,
.footer {
border: 1px solid black;
}
.sidebar,
.content{
display: inline-block;
}
.sidebar {
width: 25%;
}
.content {
width: 70%;
}
El resultado debe ser similar al siguiente:
div
(salvo sidebar
y content
) por defecto usan el valor block
en la propiedad display
por lo que no es necesario especificarlo. Esta disposición hace que los div
se apilen uno debajo de otro.div
de las clases sidebar
y content
tienen la propiedad display
con el valor inline-block
para que se muestren en línea y poder aplicarles ancho y/o alto.width
a los bloques contenidos en content
para repartir el ancho de cada uno en pantalla y para asegurarnos de que en conjunto ocupen menos de un 100% del ancho y garantizar que no acaben apilados si no existe suficiente ancho para mostrarlos.Para mejorar la disposición de los elementos añadimos/modificamos lo siguiente a la hoja de estilos:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.banner,
.navbar,
.container,
.sidebar,
.content,
.footer {
border: 1px solid black;
}
.banner {
padding: 20px 0;
text-align: center;
}
.navbar {
padding: 10px;
text-align: center;
}
.container {
margin: 20px;
}
.sidebar,
.content {
display: inline-block;
vertical-align: top;
padding: 20px;
}
.sidebar {
width: 25%;
}
.content {
width: 70%;
}
.footer {
padding: 10px;
text-align: center;
}
El resultado debe ser:
De forma global aplicamos a todos los elementos los siguientes estilos:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
Con ello conseguimos que:
<h1>
, <p>
, <div>
, <ul>
,…a los que cada navegador suele aplicar márgenes predeterminados tengan por defecto margen y separación 0
con lo que tenemos más control sobre el diseño y reducir las diferencias visuales entre navegadores.box-sizing: border-box;
facilita no tener que ajustar los tamaños de los bloques manualmente y nos aseguramos que los anchos de border
, padding
y contenido se ajustan al asignado al bloque.El resto de modificaciones consisten en
padding
y margin
a algunos bloques para mejorar la distribución visual de los elementos.Añadimos la siguiente configuración de estilos a los enlaces de la barra de navegación:
.navbar a {
display: inline-block;
padding: 14px 20px;
}
Los enlaces tienen como valor por defecto inline
para la propiedad display
. Al cambiarlo a inline-block
conseguimos que se aplique el padding
a los enlaces sin que afecte a los elementos de alrededor y que los enlaces tengan un área más amplia a la hora de interactuar con ellos.
Modificamos los estilos para que queden los siguientes:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
line-height: 1.6;
}
.banner {
padding: 20px 0;
text-align: center;
background-color: #4CAF50;
color: white;
}
.navbar {
padding: 10px;
text-align: center;
background-color: #333;
}
.navbar a {
display: inline-block;
padding: 14px 20px;
color: white;
text-decoration: none;
}
.navbar a:hover {
background-color: #575757;
}
.container {
margin: 20px;
}
.sidebar,
.content {
display: inline-block;
vertical-align: top;
padding: 20px;
}
.sidebar {
width: 25%;
background-color: #f4f4f4;
border-right: 2px solid #ddd;
}
.content {
width: 70%;
}
.footer {
padding: 10px;
text-align: center;
background-color: #333;
color: white;
}
El resultado debería ser similar a:
.navbar a:hover
un color de fondo más claro que el color de fondo de la barra de navegación. Con ello conseguimos que al pasar el ratón por encima de los enlaces el fondo cambie de color.Una web responsiva es un sitio web diseñado para adaptarse automáticamente a diferentes tamaños de pantalla y dispositivos (como PCs de escritorio, tabletas y teléfonos móviles), proporcionando una experiencia de usuario óptima sin importar el medio de acceso.
Para ello vamos a utilizar los media queries son una característica de CSS que permite aplicar estilos específicos a una página web según ciertas condiciones, como:
En este caso vamos a modificar los estilos de algunos elementos para el caso de que el ancho de pantalla sea menor de un valor de 768px
Añadimos a los estilos actuales los siguientes:
@media (max-width: 768px) {
.navbar a {
display: block;
padding: 10px;
}
.sidebar,
.content {
display: block;
width: 100%;
margin: 0;
}
.sidebar{
text-align: center;
}
.sidebar ul {
list-style-type: none;
}
.content {
margin-top: 10px;
}
}
El resultado al estrechar la pantalla debe ser similar a:
Con lo que hemos añadido, para pantallas de ancho reducido se hacen las siguientes modificaciones:
display
a inline-block
en un ancho de pantalla grande pasan a block
para que se muestren apilados uno encima de otro.El código completo de la página hasta este punto es:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
line-height: 1.6;
}
.banner {
padding: 20px 0;
text-align: center;
background-color: #4CAF50;
color: white;
}
.navbar {
padding: 10px;
text-align: center;
background-color: #333;
}
.navbar a {
display: inline-block;
padding: 14px 20px;
color: white;
text-decoration: none;
}
.navbar a:hover {
background-color: #575757;
}
.container {
margin: 20px;
}
.sidebar,
.content {
display: inline-block;
vertical-align: top;
padding: 20px;
}
.sidebar {
width: 25%;
background-color: #f4f4f4;
border-right: 2px solid #ddd;
}
.content {
width: 70%;
}
.footer {
padding: 10px;
text-align: center;
background-color: #333;
color: white;
}
@media (max-width: 768px) {
.navbar a {
display: block;
padding: 10px;
}
.sidebar,
.content {
display: block;
width: 100%;
margin: 0;
}
.sidebar {
text-align: center;
}
.sidebar ul {
list-style-type: none;
}
.content {
margin-top: 10px;
}
}
</style>
</head>
<body>
<div class="banner">
<h1>Mi Página Web</h1>
<p>Bienvenidos a mi sitio web</p>
</div>
<div class="navbar">
<a href="#">Inicio</a>
<a href="#">Servicios</a>
<a href="#">Acerca de</a>
<a href="#">Contacto</a>
</div>
<div class="container">
<div class="sidebar">
<h3>Panel Lateral</h3>
<ul>
<li><a href="#">Enlace 1</a></li>
<li><a href="#">Enlace 2</a></li>
<li><a href="#">Enlace 3</a></li>
</ul>
</div>
<div class="content">
<h2>Bloque de Contenido</h2>
<p>Aquí va el contenido principal de la página. Puedes incluir texto, imágenes, tablas o cualquier otro tipo de
información.</p>
<p>Ejemplo de párrafo adicional para ilustrar el diseño del bloque principal.</p>
</div>
</div>
<div class="footer">
<p>© 2025 Mi Página Web. Todos los derechos reservados.</p>
</div>
</body>
</html>
Está versión completa la anterior añadiendo el menú de hamburguesa en el modo de pantalla de dispositivo móvil:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
line-height: 1.6;
}
.banner {
padding: 20px 0;
text-align: center;
background-color: #4CAF50;
color: white;
}
.navbar {
padding: 10px;
text-align: center;
background-color: #333;
}
.navbar a {
display: inline-block;
padding: 14px 20px;
color: white;
text-decoration: none;
}
.navbar a:hover {
background-color: #575757;
}
.container {
margin: 20px;
}
.sidebar,
.content {
display: inline-block;
vertical-align: top;
padding: 20px;
}
.sidebar {
width: 25%;
background-color: #f4f4f4;
border-right: 2px solid #ddd;
}
.content {
width: 70%;
}
.footer {
padding: 10px;
text-align: center;
background-color: #333;
color: white;
}
/* Menú hamburguer */
.hamburger {
display: none;
cursor: pointer; /* muestra mano como cursor al pasar por encima */
font-size: 24px;
color: white;
padding: 10px;
text-align: left;
}
.navbar-menu {
display: block;
}
@media (max-width: 768px) {
.navbar a {
display: block;
padding: 10px;
}
.sidebar,
.content {
display: block;
width: 100%;
margin: 0;
}
.sidebar {
text-align: center;
}
.sidebar ul {
list-style-type: none;
}
.content {
margin-top: 10px;
}
/* hamburguer menu */
.hamburger {
display: block;
}
.navbar-menu {
display: none; /* Por defecto se oculta el menú de navegación */
width: 100%;
text-align: center;
background-color: #333;
}
.navbar-menu.active {
display: block; /* mostramos menú de navegacion que por defecto está oculto en pantallas pequeñas */
}
}
</style>
<script>
function toggleMenu() {
const menu = document.querySelector('.navbar-menu');
menu.classList.toggle('active');
}
</script>
</head>
<body>
<div class="banner">
<h1>Mi Página Web</h1>
<p>Bienvenidos a mi sitio web</p>
</div>
<div class="navbar">
<span class="hamburger" onclick="toggleMenu()">☰</span>
<div class="navbar-menu">
<a href="#">Inicio</a>
<a href="#">Servicios</a>
<a href="#">Acerca de</a>
<a href="#">Contacto</a>
</div>
</div>
<div class="container">
<div class="sidebar">
<h3>Panel Lateral</h3>
<ul>
<li><a href="#">Enlace 1</a></li>
<li><a href="#">Enlace 2</a></li>
<li><a href="#">Enlace 3</a></li>
</ul>
</div>
<div class="content">
<h2>Bloque de Contenido</h2>
<p>Aquí va el contenido principal de la página. Puedes incluir texto, imágenes, tablas o cualquier otro tipo de
información.</p>
<p>Ejemplo de párrafo adicional para ilustrar el diseño del bloque principal.</p>
</div>
</div>
<div class="footer">
<p>© 2025 Mi Página Web. Todos los derechos reservados.</p>
</div>
</body>
</html>
No se explica con mucho detalle porque este código va más allá de los contenidos del módulo. De forma general, los cambios que se han aplicado son:
☰
con el tamaño adecuado.