clase:daw:diw:1eval:tema08
Diferencias
Muestra las diferencias entre dos versiones de la página.
| clase:daw:diw:1eval:tema08 [2025/11/03 11:37] – creado - editor externo 127.0.0.1 | clase:daw:diw:1eval:tema08 [2026/10/23 23:04] (actual) – Reorganización del módulo: contenido movido a las páginas nuevas de clase:daw:diw claude | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| - | ====== 8. Diseño Responsivo ====== | ||
| - | En anteriores temas hemos visto como con '' | ||
| - | |||
| - | |||
| - | Mas información: | ||
| - | * [[https:// | ||
| - | ====== Responsivo vs Adaptativo ====== | ||
| - | Hacer un diseño responsivo es que la misma página se adapte a distintos tamaños de pantalla. Hacer un diseño adaptativo es hacer páginas distintas según el tamaño de la pantalla. | ||
| - | |||
| - | {{: | ||
| - | |||
| - | Ejemplo de diseño adaptativo es la página de AliExpress: | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | La ventaja de las webs adaptativas es que en la versión móvil solo se cargan las cosas que se necesitan para el movil además de que está hecha pensando en móvil. El inconveniente es que hay que desarrollar dos páginas. | ||
| - | ===== viewport ===== | ||
| - | Añadir a todas las páginas | ||
| - | |||
| - | <sxh html> | ||
| - | <meta name=" | ||
| - | </ | ||
| - | |||
| - | Con esto se consigue que la página tenga el tamaño del dispositivo, | ||
| - | |||
| - | Mas información: | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | |||
| - | |||
| - | ===== Unidades ===== | ||
| - | |||
| - | |||
| - | ==== View Port ==== | ||
| - | Podemos hacer ciertos tamaños que sean en función del tamaño de la pantalla. Para ello se usan las unidades como '' | ||
| - | |||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | |||
| - | |||
| - | <sxh css> | ||
| - | .titulo { | ||
| - | font-size: 10vw; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <sxh css> | ||
| - | <p class=" | ||
| - | </ | ||
| - | |||
| - | En el ejemplo anterior, el tamaño de la fuente se hace mas grande a medida que se hace mas ancha la ventana. | ||
| - | |||
| - | Podemos pensar que '' | ||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | Para ésto último a veces se hace lo siguiente: | ||
| - | |||
| - | <sxh css> | ||
| - | .ejemplo { | ||
| - | | ||
| - | | ||
| - | | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | * También se pueden usar decimales con '' | ||
| - | |||
| - | <sxh css> | ||
| - | .titulo { | ||
| - | font-size: 3.14vw; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ==== rem ==== | ||
| - | La unidad '' | ||
| - | |||
| - | <sxh css> | ||
| - | html { | ||
| - | | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Otra forma de cambiar el '' | ||
| - | |||
| - | Veamos ahora como se usa '' | ||
| - | |||
| - | ^ Tamaño botón | ||
| - | | Normal | ||
| - | | Grande '' | ||
| - | | Pequeño '' | ||
| - | |||
| - | Vamos ahora los mismo datos pero en '' | ||
| - | |||
| - | ^ Tamaño botón | ||
| - | | Normal | ||
| - | | Grande '' | ||
| - | | Pequeño '' | ||
| - | |||
| - | Y por último veamos la relación que hay entre en padding y el tamaño de fuente en % | ||
| - | |||
| - | ^ Tamaño botón | ||
| - | | Normal | ||
| - | | Grande '' | ||
| - | | Pequeño '' | ||
| - | |||
| - | Resulta que no hay una relación constante entre el tamaño de la fuente y el tamaño del padding. | ||
| - | |||
| - | Es decir para un tamaño normal el padding horizontal es el 75% del tamaño de la fuente pero | ||
| - | en un botón grande (que el tamaño de fuente es más grande) el padding horizontal es el 80% del tamaño de la fuente | ||
| - | y para terminar en un botón pequeño el padding horizontal es el 57% del tamaño de la fuente. ¿No debería ser constante el tamaño del padding respecto del tamaño de fuente? Por lo tanto si aumentamos el tamaño de fuente en el navegador , los padding no deberían aumentar proporcionalmente sino como vemos que lo hace bootstrap. | ||
| - | |||
| - | |||
| - | ==== em ==== | ||
| - | La unidad '' | ||
| - | |||
| - | |||
| - | <note tip>Mi recomendación es usar siempre '' | ||
| - | |||
| - | |||
| - | Mas informnación: | ||
| - | * [[https:// | ||
| - | |||
| - | |||
| - | ===== Cálculos en CSS ===== | ||
| - | Podemos usar funciones en CSS para calcular valores. | ||
| - | |||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | |||
| - | ==== min() ==== | ||
| - | Retorna el mínimo de los dos valores. | ||
| - | |||
| - | <sxh css> | ||
| - | .titulo { | ||
| - | font-size: min(100px, | ||
| - | } | ||
| - | </ | ||
| - | <sxh css> | ||
| - | <p class=" | ||
| - | </ | ||
| - | |||
| - | En el ejemplo el tamaño máximo de la fuente nunca será mayor que 100px por mucho que se haga grande la ventana. | ||
| - | |||
| - | ==== max() ==== | ||
| - | Retorna el máximo de los dos valores. | ||
| - | |||
| - | <sxh css> | ||
| - | .titulo { | ||
| - | font-size: max(40px, | ||
| - | } | ||
| - | </ | ||
| - | <sxh css> | ||
| - | <p class=" | ||
| - | </ | ||
| - | |||
| - | En el ejemplo el tamaño mínimo de la fuente nunca será menor que 40px por mucho que se haga pequeña la ventana. | ||
| - | |||
| - | ==== clamp() ==== | ||
| - | Retorna un valor pero sin ser menos que un mínimo ni mayor que un máximo | ||
| - | |||
| - | <sxh css> | ||
| - | .titulo { | ||
| - | font-size: clamp(40px, | ||
| - | } | ||
| - | </ | ||
| - | <sxh css> | ||
| - | <p class=" | ||
| - | </ | ||
| - | |||
| - | En el ejemplo el tamaño mínimo de la fuente nunca será menos que 40px por mucho que se haga pequeña la ventana ni será mayor que 100px por mucho que se haga grande la ventana. | ||
| - | |||
| - | Mas información: | ||
| - | * [[https:// | ||
| - | |||
| - | ==== calc() ==== | ||
| - | Permite hacer cálculos en CSS | ||
| - | |||
| - | <sxh css> | ||
| - | .titulo { | ||
| - | font-size: calc(10vw - 10px); | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <sxh css> | ||
| - | .titulo { | ||
| - | font-size: calc( ( 1 / 3 ) * 100vw); | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <sxh css> | ||
| - | .titulo { | ||
| - | font-size: clamp(40px, | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | <note tip> | ||
| - | <note important> | ||
| - | Es obligatorio separar siempre las operaciones de suma y resta con espacios en blanco de sus operandos. | ||
| - | |||
| - | Por ejemplo, la siguiente expresión no es correcta: | ||
| - | |||
| - | '' | ||
| - | |||
| - | debiendose corregir y quedando así: | ||
| - | |||
| - | '' | ||
| - | |||
| - | Aunque los operadores '' | ||
| - | </ | ||
| - | |||
| - | |||
| - | <sxh css> | ||
| - | <p class=" | ||
| - | </ | ||
| - | |||
| - | |||
| - | ==== Calculo de valores con clamp ==== | ||
| - | La siguiente gráfica muestra como funciona '' | ||
| - | |||
| - | {{ : | ||
| - | |||
| - | Para calcular los tamaños de pantalla donde se producen los cambios (puntos rojos) las variable son las siguientes: | ||
| - | |||
| - | * $w_{lower}$: | ||
| - | * $w_{upper}$: | ||
| - | * $min_{value}$: | ||
| - | * $max_{value}$: | ||
| - | \\ | ||
| - | * $pendiente$: | ||
| - | * $coeficiente_{posición}$: | ||
| - | |||
| - | |||
| - | Pero, ¿como calculamos los valores de $pendiente$ y $coeficiente_{posición}$? | ||
| - | |||
| - | De forma genérica podemos establecer los valores de las 4 variables de la siguiente forma: | ||
| - | |||
| - | {{ : | ||
| - | |||
| - | Siendo los valores de $pendiente$ y $coeficiente_{posición}$ los siguientes: | ||
| - | |||
| - | $$ | ||
| - | pendiente=\frac {max_{value} - min_{value}}{w_{upper} - w_{lower}} \cdot 100 | ||
| - | \\ | ||
| - | coeficiente_{posición}=min_{value} - \frac{pendiente}{100} \cdot w_{lower} | ||
| - | $$ | ||
| - | |||
| - | Veamos el ejemplo en el que queremos que la propiedad '' | ||
| - | * $w_{lower}$: | ||
| - | * $w_{upper}$: | ||
| - | * $min_{value}$: | ||
| - | * $max_{value}$: | ||
| - | |||
| - | Entonces | ||
| - | |||
| - | $$ | ||
| - | pendiente=\frac {max_{value} - min_{value}}{w_{upper} - w_{lower}} \cdot 100=\frac {20-12}{600-230} \cdot 100=2, | ||
| - | \\ | ||
| - | coeficiente_{posición}=min_{value} - \frac{pendiente}{100} \cdot w_{lower}=12-\frac{2, | ||
| - | $$ | ||
| - | |||
| - | Por lo tanto el css será: | ||
| - | |||
| - | <sxh css> | ||
| - | .titulo { | ||
| - | font-size: clamp(12px, | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | En la primera figura | ||
| - | |||
| - | {{ : | ||
| - | |||
| - | cuyos valores eran: | ||
| - | * $w_{lower}$: | ||
| - | * $w_{upper}$: | ||
| - | * $min_{value}$: | ||
| - | * $max_{value}$: | ||
| - | |||
| - | Entonces | ||
| - | |||
| - | $$ | ||
| - | pendiente=\frac {max_{value} - min_{value}}{w_{upper} - w_{lower}}\cdot 100=\frac {400-200}{667-333} \cdot 100=59.88 | ||
| - | \\ | ||
| - | coeficiente_{posición}=min_{value} - \frac{pendiente}{100} \cdot w_{lower}=200-\frac{59.88}{100} \cdot 333=0.5989 | ||
| - | $$ | ||
| - | |||
| - | Por lo tanto el css será: | ||
| - | |||
| - | <sxh css> | ||
| - | .titulo { | ||
| - | font-size: clamp(200px, | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | * El código en python para crear los gráficos es el siguiente: | ||
| - | <sxh python> | ||
| - | import numpy as np | ||
| - | import matplotlib.pyplot as plt | ||
| - | from matplotlib.ticker import AutoLocator | ||
| - | |||
| - | min_value=200 | ||
| - | max_value=400 | ||
| - | pendiente=60 | ||
| - | coeficiente_posición=15 | ||
| - | |||
| - | def decore_axes(axes, | ||
| - | axes.set_title(title, | ||
| - | axes.set_xlabel(xlabel, | ||
| - | axes.set_ylabel(ylabel, | ||
| - | axes.set_xlim(xmin=0) | ||
| - | axes.grid(visible=True, | ||
| - | axes.set_axisbelow(True) | ||
| - | axes.yaxis.set_major_locator(AutoLocator()) | ||
| - | axes.set_facecolor('# | ||
| - | |||
| - | max_w_size=1200 | ||
| - | x=np.linspace(0, | ||
| - | y=[] | ||
| - | |||
| - | for xi in x: | ||
| - | yi=xi*(pendiente/ | ||
| - | if (yi< | ||
| - | yi=min_value | ||
| - | elif (yi> | ||
| - | yi=max_value | ||
| - | |||
| - | y.append(yi) | ||
| - | |||
| - | min_corte_x=((min_value-coeficiente_posición)*100)/ | ||
| - | max_corte_x=((max_value-coeficiente_posición)*100)/ | ||
| - | figure=plt.figure(figsize=(8, | ||
| - | axes = figure.add_subplot(1, | ||
| - | |||
| - | axes.plot(x, | ||
| - | axes.scatter(min_corte_x, | ||
| - | axes.scatter(max_corte_x, | ||
| - | |||
| - | decore_axes(axes, | ||
| - | |||
| - | _=axes.set_xticks( [0, | ||
| - | </ | ||
| - | ===== Imágenes ===== | ||
| - | Hay muchas opciones al respecto de las imágenes responsivas. La técnica consiste principalmente en usar una imagen u otra en función de: | ||
| - | * Ancho o alto del dispositivo | ||
| - | * Pixel-ratio del dispositivo | ||
| - | * Tipos soportados por el navegador. | ||
| - | |||
| - | |||
| - | Una explicación completa la puedes ver en el siguiente enlace: [[https:// | ||
| - | |||
| - | Aquí solo vamos a ver como carga una imagen u otra en función del ancho del dispositivo. | ||
| - | |||
| - | Veamos un ejemplo: Según la resolución , no queremos cargar siempre la misma imagen sino que cambiamos la perspectiva de la foto ya que tenemos menos //sitio//. | ||
| - | |||
| - | * Pantallas grandes: | ||
| - | {{:: | ||
| - | |||
| - | |||
| - | * Pantallas medianas: | ||
| - | {{:: | ||
| - | |||
| - | |||
| - | * Pantallas pequeñas: | ||
| - | {{:: | ||
| - | |||
| - | <sxh html> | ||
| - | < | ||
| - | <source media=" | ||
| - | <source media=" | ||
| - | <img src=" | ||
| - | </ | ||
| - | </ | ||
| - | ===== Tablas ===== | ||
| - | Para hacer tablas responsivas, | ||
| - | |||
| - | <sxh html> | ||
| - | < | ||
| - | < | ||
| - | <meta name=" | ||
| - | < | ||
| - | .table { | ||
| - | overflow: auto; | ||
| - | } | ||
| - | .table__head { | ||
| - | | ||
| - | } | ||
| - | .table__head--min-width-1 { | ||
| - | min-width: 100px; | ||
| - | } | ||
| - | .table__head--min-width-2 { | ||
| - | min-width: 150px; | ||
| - | } | ||
| - | .table__head--min-width-3 { | ||
| - | min-width: 200px; | ||
| - | } | ||
| - | .table__head--max-width-1 { | ||
| - | max-width: 100px; | ||
| - | } | ||
| - | .table__head--max-width-2 { | ||
| - | max-width: 150px; | ||
| - | } | ||
| - | .table__head--max-width-3 { | ||
| - | max-width: 200px; | ||
| - | } | ||
| - | |||
| - | .table__head--width-1 { | ||
| - | width: 100px; | ||
| - | min-width: 100px; | ||
| - | } | ||
| - | .table__head--width-2 { | ||
| - | width: 150px; | ||
| - | min-width: 150px; | ||
| - | } | ||
| - | .table__head--width-3 { | ||
| - | width: 200px; | ||
| - | min-width: 200px; | ||
| - | } | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | <h1 >Ejemplo de tablas responsivas</ | ||
| - | < | ||
| - | |||
| - | <div class=" | ||
| - | < | ||
| - | < | ||
| - | <tr> | ||
| - | <th class=" | ||
| - | <th class=" | ||
| - | <th class=" | ||
| - | <th class=" | ||
| - | <th class=" | ||
| - | </tr> | ||
| - | </ | ||
| - | < | ||
| - | <tr> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </tr> | ||
| - | <tr> | ||
| - | < | ||
| - | <td lang=" | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </tr> | ||
| - | <tr> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </tr> | ||
| - | <tr> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </tr> | ||
| - | <tr> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </tr> | ||
| - | <tr> | ||
| - | <td >Emma Dorothy Eliza Nevitte Southworth</ | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </tr> | ||
| - | <tr> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </tr> | ||
| - | <tr> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </tr> | ||
| - | <tr> | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | < | ||
| - | </tr> | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | | ||
| - | </ | ||
| - | |||
| - | </ | ||
| - | |||
| - | </ | ||
| - | |||
| - | |||
| - | Mas información: | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | |||
| - | ===== CSS Media Queries ===== | ||
| - | Permiten tener un CSS distinto según el tamaño de la pantalla | ||
| - | |||
| - | <sxh css> | ||
| - | .titulo { | ||
| - | font-size: 40px; | ||
| - | } | ||
| - | |||
| - | |||
| - | @media (min-width: 576px) { | ||
| - | .titulo { | ||
| - | font-size: 50px; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | @media (min-width: 768px) { | ||
| - | .titulo { | ||
| - | font-size: 55px; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | @media (min-width: 992px) { | ||
| - | .titulo { | ||
| - | font-size: 70px; | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <sxh html> | ||
| - | <p class=" | ||
| - | </ | ||
| - | |||
| - | Como vemos para cada resolución se usa un CSS distinto y por lo tanto el tamaño es distinto según la resolución. | ||
| - | |||
| - | <note tip> | ||
| - | En el ejemplo siguen casi los tamaños que se usan en [[https:// | ||
| - | |||
| - | ===== Arquitectura responsiva ===== | ||
| - | Pasemos ahora a ver como poder hacer las cosas responsivas con una simple arquitectura. | ||
| - | |||
| - | |||
| - | <sxh css> | ||
| - | .g--font-size-1 { | ||
| - | font-size: 40px; | ||
| - | } | ||
| - | .g--font-size-2 { | ||
| - | font-size: 50px; | ||
| - | } | ||
| - | .g--font-size-3 { | ||
| - | font-size: 55px; | ||
| - | } | ||
| - | .g--font-size-4 { | ||
| - | font-size: 70px; | ||
| - | } | ||
| - | |||
| - | @media (min-width: 576px) { | ||
| - | .g--font-size-1\@tablet { | ||
| - | font-size: 40px; | ||
| - | } | ||
| - | .g--font-size-2\@tablet { | ||
| - | font-size: 50px; | ||
| - | } | ||
| - | .g--font-size-3\@tablet { | ||
| - | font-size: 55px; | ||
| - | } | ||
| - | .g--font-size-4\@tablet { | ||
| - | font-size: 70px; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | @media (min-width: 768px) { | ||
| - | .g--font-size-1\@desktop { | ||
| - | font-size: 40px; | ||
| - | } | ||
| - | .g--font-size-2\@desktop { | ||
| - | font-size: 50px; | ||
| - | } | ||
| - | .g--font-size-3\@desktop { | ||
| - | font-size: 55px; | ||
| - | } | ||
| - | .g--font-size-4\@desktop { | ||
| - | font-size: 70px; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | @media (min-width: 992px) { | ||
| - | .g--font-size-1\@fulldesktop { | ||
| - | font-size: 40px; | ||
| - | } | ||
| - | .g--font-size-2\@fulldesktop { | ||
| - | font-size: 50px; | ||
| - | } | ||
| - | .g--font-size-3\@fulldesktop { | ||
| - | font-size: 55px; | ||
| - | } | ||
| - | .g--font-size-4\@fulldesktop { | ||
| - | font-size: 70px; | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <sxh html> | ||
| - | <p class=" | ||
| - | </ | ||
| - | |||
| - | En el ejemplo por defecto el tamaño de la fuente será de 40px pero en resoluciones mayores de 992px será de 55px. | ||
| - | |||
| - | Lo que hacemos es crear todas los modificadores globales o modificadores de bloques para las distintas resoluciones pero añadiendo el sufijo | ||
| - | |||
| - | Otro ejemplo de ello lo podemos ver en [[https:// | ||
| - | |||
| - | También en Boostrap qu permite clases responsivas: | ||
| - | |||
| - | ===== Breakpoints ===== | ||
| - | Al crear la arquitectura responsiva es necesario indicar los pixeles de cada pantalla así como los tamaños. En los siguientes artículos se indica cuales se usan en diversos frameworks css. | ||
| - | |||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | |||
| - | |||
| - | * **Bootstrap** | ||
| - | |||
| - | ^ Nombre | ||
| - | | -- | ||
| - | | sm | ||
| - | | md | ||
| - | | lg | ||
| - | | xl | ||
| - | | xxl | ||
| - | |||
| - | * **Tailwind** | ||
| - | |||
| - | ^ Nombre | ||
| - | | sm | ||
| - | | md | ||
| - | | lg | ||
| - | | xl | ||
| - | |||
| - | ===== Menu responsivo ===== | ||
| - | |||
| - | {{..: | ||
| - | |||
| - | <sxh html;title: HTML> | ||
| - | <div class=" | ||
| - | <ul class=" | ||
| - | <li class=" | ||
| - | <li class=" | ||
| - | <li class=" | ||
| - | <li class=" | ||
| - | </ul> | ||
| - | <a href=" | ||
| - | </ | ||
| - | <h1 style=" | ||
| - | <p style=" | ||
| - | </ | ||
| - | |||
| - | <sxh css; | ||
| - | .main-menu { | ||
| - | display: flex; | ||
| - | flex-direction: | ||
| - | } | ||
| - | |||
| - | @media (max-width: 499px) { | ||
| - | .main-menu { | ||
| - | position: fixed; | ||
| - | top: 0; | ||
| - | left: 0; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | .main-menu__hamburger { | ||
| - | display: none; | ||
| - | } | ||
| - | @media (max-width: 499px) { | ||
| - | .main-menu__hamburger { | ||
| - | display: block; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | .main-menu__items { | ||
| - | display: flex; | ||
| - | flex-direction: | ||
| - | } | ||
| - | @media (max-width: 499px) { | ||
| - | .main-menu__items { | ||
| - | flex-direction: | ||
| - | } | ||
| - | } | ||
| - | |||
| - | |||
| - | .main-menu__item { | ||
| - | padding: 10px; | ||
| - | color: #ffffff; | ||
| - | background-color: | ||
| - | } | ||
| - | @media (max-width: 499px) { | ||
| - | .main-menu__item { | ||
| - | padding-left: | ||
| - | background-color: | ||
| - | } | ||
| - | } | ||
| - | |||
| - | |||
| - | @media (max-width: 499px) { | ||
| - | .main-menu__items--movil-visible { | ||
| - | display: block; | ||
| - | } | ||
| - | |||
| - | .main-menu__items--movil-hide { | ||
| - | display: none; | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | <sxh javascript; | ||
| - | function toggleVisibilityMenu() { | ||
| - | var itemsElements = document.getElementsByClassName(" | ||
| - | var hamburgerElements = document.getElementsByClassName(" | ||
| - | |||
| - | if (itemsElements[0].className.indexOf(" | ||
| - | itemsElements[0].className = " main-menu__items main-menu__items--movil-hide"; | ||
| - | hamburgerElements[0].innerHTML = " | ||
| - | } else { | ||
| - | itemsElements[0].className = " | ||
| - | hamburgerElements[0].innerHTML = " | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Resumen técnicas responsivas ===== | ||
| - | Hemos visto varias formas de hacer las cosas responsivas. Veamos ahora una tabla en la que se explican las 4 formas posibles: | ||
| - | |||
| - | |||
| - | ^ ^ Interno | ||
| - | ^ Fluido | ||
| - | ^ Escalonado | ||
| - | |||
| - | |||
| - | <note tip> | ||
| - | El tipo **Externo/ | ||
| - | </ | ||
| - | |||
| - | * Interno/ | ||
| - | |||
| - | <sxh css> | ||
| - | .titulo { | ||
| - | font-size: 10vw | ||
| - | } | ||
| - | </ | ||
| - | <sxh html> | ||
| - | <h1 class=" | ||
| - | </ | ||
| - | |||
| - | |||
| - | * Interno/ | ||
| - | |||
| - | <sxh css> | ||
| - | .titulo { | ||
| - | font-size: 40px; | ||
| - | } | ||
| - | | ||
| - | @media (min-width: 768px) { | ||
| - | .titulo { | ||
| - | font-size: 55px; | ||
| - | } | ||
| - | } | ||
| - | |||
| - | </ | ||
| - | <sxh html> | ||
| - | <h1 class=" | ||
| - | </ | ||
| - | |||
| - | * Externo/ | ||
| - | |||
| - | <sxh html> | ||
| - | < | ||
| - | <tr> | ||
| - | <th class=" | ||
| - | <th class=" | ||
| - | <th class=" | ||
| - | <th class=" | ||
| - | <th class=" | ||
| - | </tr> | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | * Externo/ | ||
| - | |||
| - | <sxh html> | ||
| - | <p class=" | ||
| - | </ | ||
| - | |||
| - | |||
| - | ===== Ejercicios ===== | ||
| - | |||
| - | ==== Ejercicio 1 ==== | ||
| - | Crea una página HTML con lo siguiente: | ||
| - | * 1 div cuadrado azul de tamaño 200px | ||
| - | * 1 div cuadrado verde de tamaño 200px | ||
| - | * 1 div cuadrado azul de tamaño 400px | ||
| - | * 1 div cuadrado verde de tamaño 400px | ||
| - | * Dentro cada cuadrado azul , añade otro div de color rojo con tamaño 20% | ||
| - | * Dentro cada cuadrado verde , añade otro div de color rojo con tamaño 20vw | ||
| - | |||
| - | |||
| - | Ahora: | ||
| - | * Explica la diferencia de tamaños entre los de 20% y 20vw | ||
| - | * Ahora cambia el tamaño de la página y mira como de modifica el tamaño de los cuadrados. Indica cuales han cambiado de tamaño y explica porqué han cambiado de tamaño | ||
| - | |||
| - | ==== Ejercicio 2 ==== | ||
| - | Crea una página HTML con lo siguiente: | ||
| - | * 3 divs cuadrados de 200 pixeles de lado cada uno, de colores | ||
| - | * Rojo | ||
| - | * Verde | ||
| - | * Azul (Que tenga Tamaño de fuente 20px) | ||
| - | |||
| - | De forma que: | ||
| - | * Que el cuadrado Rojo se indique su tamaño usando '' | ||
| - | * Que el cuadrado Verde se indique su tamaño usando '' | ||
| - | * Que el cuadrado Azul se indique su tamaño usando '' | ||
| - | |||
| - | Añade ahora el siguiente CSS: | ||
| - | <sxh css> | ||
| - | html { | ||
| - | font-size: | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Y comprueba que solo se ha modificado el tamaño del cuadrado Verde. | ||
| - | |||
| - | |||
| - | ==== Ejercicio 3 ==== | ||
| - | Crea una página HTML con lo siguiente: | ||
| - | * Un div cuadrado de color rojo de forma que como mínimo tenga 100px pero a medida que el ancho de la pantalla se hace mas grande , se hagan también mas grande el cuadrado. | ||
| - | * Un div cuadrado de color verde de forma que como máximo tenga 800px pero a medida que el ancho de la pantalla se hace mas pequeña, se hagan también mas pequeño el cuadrado. | ||
| - | * Un div cuadrado de color azul de forma que como máximo tenga 800px, de tamaño mínimo tenga 100px, pero a medida que el ancho de la pantalla se hace mas pequeña, se hagan también mas pequeño el cuadrado y si se hace mas grande el ancho de la pantalla, también se haga mas grande el cuadrado. | ||
| - | * Un div cuadrado de color rosa de forma que su tamaño siempre sea la mitad de la pantalla mas 20px | ||
| - | * Un div cuadrado de color amarillo de forma que su tamaño siempre sea la mitad de la pantalla mas 20px pero no pueda ser menor que 100px ni mayor que 600px | ||
| - | |||
| - | |||
| - | ==== Ejercicio 4 ==== | ||
| - | Haz una página HTML de forma que se cargue una imagen distinta según el siguiente ancho de la pantalla: | ||
| - | * menos de 500px | ||
| - | * entre 500px y 1000px | ||
| - | * mas de 1000px | ||
| - | |||
| - | ==== Ejercicio 5 ==== | ||
| - | Dado el típico layout de cabecera, menú lateral, cuerpo y pie. Haz una página HTML pero de forma que si el tamaño de la pantalla es menor que 500px no se vea el menú lateral. Deberás hacerlo usando BEM e externo. | ||
| - | |||
| - | ==== Ejercicio 6 ==== | ||
| - | Crea una clase css llamada '' | ||
| - | |||
| - | * Menos de 576px sea de color rojo | ||
| - | * Entre 576px y 768px sea de color verde | ||
| - | * Entre 768px y 992px sea de color azul | ||
| - | * Más de 992px sea de color naranja | ||
| - | |||
| - | Lo usarán en una página HTML donde estará un cuadrado de 200px x 200px | ||
| - | |||
| - | ==== Ejercicio 7 ==== | ||
| - | Crea las siguientes clases css: | ||
| - | |||
| - | <sxh css> | ||
| - | .g--bg-color-red { | ||
| - | background-color:# | ||
| - | } | ||
| - | .g--bg-color-green { | ||
| - | background-color:# | ||
| - | } | ||
| - | .g--bg-color-blue { | ||
| - | background-color:# | ||
| - | } | ||
| - | .g--bg-color-orange { | ||
| - | background-color:# | ||
| - | } | ||
| - | |||
| - | |||
| - | </ | ||
| - | |||
| - | Y modificalas con el sufijo " | ||
| - | |||
| - | ==== Ejercicio 8 ==== | ||
| - | Crea modificadores globales para las siguientes propiedades CSS: | ||
| - | * '' | ||
| - | * '' | ||
| - | * '' | ||
| - | |||
| - | Los posibles valores de cada uno de ellos serán: 100px, 150px , 200px, 250px, 300px, 350px, 400px, 450px, 500px, 550px, 600px | ||
| - | |||
| - | Crea también otro modificador global para '' | ||
| - | |||
| - | Crea una clase BEM para tablas HTML de forma que: | ||
| - | * La tabla tendrá alrededor un borde y un sombreado | ||
| - | * Las cabeceras de la tabla serán de otro color. | ||
| - | |||
| - | Con todo los anterior, haz una página HTML con una tabla en la que: | ||
| - | * Haya columnas que tengan un ancho mínimo y otro máximo | ||
| - | * Haya columnas que tengan un ancho fijo | ||
| - | * Haya una columna que tengan un ancho mínimo | ||
| - | * Que si la tabla no cabe, aparezcan las barras de scroll. | ||
| - | |||
| - | ==== Ejercicio 9 ==== | ||
| - | Modifica el ejercicio anterior de forma que ahora los modificadores globales se puedan usar de forma responsiva con | ||
| - | * @tablet | ||
| - | * @desktop | ||
| - | * @fulldesktop | ||
| - | |||
| - | Modifica el ejemplo de la tabla HTML de forma que las columnas ahora tenga siempre tamaños fijos (es decir no usar min o max), pero que cambien según la resolución de la pantalla. | ||
| - | |||
| - | |||
| - | ==== Ejercicio 10 ==== | ||
| - | Usando las clases de BEM y los modificadores globales que has ido usando durante el curso, añade de forma que ahora se puedan usar de forma responsiva con | ||
| - | * @tablet | ||
| - | * @desktop | ||
| - | * @fulldesktop | ||
| - | |||
| - | |||
| - | ==== Ejercicio 11 ==== | ||
| - | Modifica la página del tema anterior para hacerla responsiva de forma que según la resolución se cambie el tamaño : | ||
| - | * El tamaño de los títulos | ||
| - | * Los padding | ||
| - | * Los margins | ||
| - | * Los menús sean responsivos. Es decir que cuando la pantalla es pequeña, se muestre la " | ||
| - | * Se oculten imágenes en tamaños pequeños. | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
clase/daw/diw/1eval/tema08.1762166241.txt.gz · Última modificación: por 127.0.0.1
