Herramientas de usuario

Herramientas del sitio


clase:daw:diw:2eval:tema06

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
clase:daw:diw:2eval:tema06 [2021/01/11 14:19]
admin [Imágenes]
clase:daw:diw:2eval:tema06 [2024/02/22 12:13] (actual)
admin
Línea 68: Línea 68:
    height: 100vw;    height: 100vw;
    max-width: 100%;    max-width: 100%;
 +}
 +</sxh>
 +
 +  * También se pueden usar decimales con ''vw'' o ''vh''
 +
 +<sxh css>
 +.c-titulo {
 +    font-size: 3.14vw;
 } }
 </sxh> </sxh>
Línea 82: Línea 90:
  
 ==== em ==== ==== em ====
-La unidad ''rem'' hace referencia al tamaño de fuente del elemento donde está. El tamaño en píxeles se obtiene de multiplicar el valor de ''em'' por el tamaño de la fuente de ese elemento+La unidad ''em'' hace referencia al tamaño de fuente del elemento donde está. El tamaño en píxeles se obtiene de multiplicar el valor de ''em'' por el tamaño de la fuente de ese elemento
  
  
Línea 155: Línea 163:
 <sxh css> <sxh css>
 .c-titulo { .c-titulo {
-    font-size: clamp(40px,calc(10vw - 10px),100px);+    font-size: calc( ( 1 / 3 * 100vw);
 } }
 </sxh> </sxh>
  
 +<sxh css>
 +.c-titulo {
 +    font-size: clamp(40px,10vw - 10px,100px);
 +}
 +</sxh>
 +
 +
 +
 +<note tip>Dentro de ''clamp'' se pueden hacer cálculos directamente sin necesidad de usar ''calc''.</note>
 +<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: 
 +
 +''calc(50%-8px)'' 
 +
 +debiendose corregir y quedando así: 
 +
 +''calc(50% - 8px)''.
 +
 +Aunque los operadores ''*'' y ''/'' no necesitan espacio en blanco, se sugiere agregarlos por razones de consistencia.
 +</note>
  
  
Línea 166: Línea 196:
  
  
 +==== Calculo de valores con clamp ====
 +La siguiente gráfica muestra como funciona ''clamp(200px,60vw,400px)''.
  
 +{{ :clase:daw:diw:2eval:clamp.png |}}
 +
 +Para calcular los tamaños de pantalla donde se producen los cambios (puntos rojos) las variable son las siguientes:
 +
 +  * $w_{lower}$: El ancho de pantalla para el valor mínimo.
 +  * $w_{upper}$: El ancho de pantalla para el valor máximo.
 +  * $min_{value}$: El valor mínimo de la propiedad CSS
 +  * $max_{value}$: El valor máximo de la propiedad CSS
 +\\
 +  * $pendiente$: El valor que se pone en vw.
 +
 +$$
 +pendiente=60
 +\\
 +min=200
 +\\
 +max=400
 +$$
 +\\
 +\\
 +$$
 +
 +w_{lower} * \frac {pendiente}{100}=min_{value}
 +\\
 +w_{lower} = \frac {min_{value}*100}{pendiente}= \frac {200*100}{60}=333px
 +$$
 +
 +\\
 +\\
 +$$
 +w_{upper} * \frac {pendiente}{100}=max_{value}
 +\\
 +w_{upper} = \frac {max_{value}*100}{pendiente}= \frac {400*100}{60}=667px
 +
 +
 +$$
 +
 +
 +De forma genérica podemos establecer los valores de las 4 variables de la siguiente forma:
 +
 +{{ :clase:daw:diw:2eval:clamp_generico.png |}}
 +
 +Siendo los valores de $pendiente$ y $coeficiente_{posición}$ los siguientes:
 +
 +$$
 +pendiente=\frac {max_{value} - min_{value}}{w_{upper} - w_{lower}}*100
 +\\
 +coeficiente_{posición}=min_{value} - \frac{pendiente}{100}*w_{lower}
 +$$
 +
 +Veamos el ejemplo en el que queremos que la propiedad ''font-size'' siga estas reglas:
 +  * $w_{lower}$: 230px
 +  * $w_{upper}$: 600px
 +  * $min_{value}$: 12px
 +  * $max_{value}$: 20px
 +
 +Entonces
 +
 +$$
 +pendiente=\frac {max_{value} - min_{value}}{w_{upper} - w_{lower}}=\frac {20-12}{600-230}*100=2,1621622
 +\\
 +coeficiente_{posición}=min_{value} - \frac{pendiente}{100}*w_{lower}=12-\frac{2,1621622}{100}*230=7,02702694
 +$$
 +
 +Por lo tanto el css será:
 +
 +<sxh css>
 +.c-titulo {
 +    font-size: clamp(12px,2.1621622vw + 7.02702694px,20px);
 +}
 +</sxh>
 +
 +
 +  * 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  #b
 +
 +def decore_axes(axes,title,xlabel,ylabel):
 +  axes.set_title(title, fontsize=14,pad=5,color="#000000")
 +  axes.set_xlabel(xlabel, fontsize=10,labelpad=5,color="#003B80")
 +  axes.set_ylabel(ylabel, fontsize=12,labelpad=5,color="#003B80")
 +  axes.set_xlim(xmin=0)
 +  axes.grid(visible=True, which='major', axis='both',color="#FFFFFF",linewidth=1)
 +  axes.set_axisbelow(True)
 +  axes.yaxis.set_major_locator(AutoLocator())
 +  axes.set_facecolor('#E9F0FC')
 +
 +max_w_size=1200
 +x=np.linspace(0,max_w_size,3000)
 +y=[]
 +
 +for xi in x:
 +  yi=xi*(pendiente/100)+coeficiente_posición
 +  if (yi<min_value):
 +    yi=min_value
 +  elif (yi>max_value):
 +    yi=max_value
 +
 +  y.append(yi)
 +
 +min_corte_x=((min_value-coeficiente_posición)*100)/pendiente
 +max_corte_x=((max_value-coeficiente_posición)*100)/pendiente
 +figure=plt.figure(figsize=(8,4))
 +axes = figure.add_subplot(1,1,1)
 +
 +axes.plot(x,y)
 +axes.scatter(min_corte_x,min_value,c="red", zorder=2)
 +axes.scatter(max_corte_x,max_value,c="red", zorder=2)
 +
 +decore_axes(axes,f"clamp({min_value}px,{pendiente}vw + {coeficiente_posición}px,{max_value}px)","Tamaño pantalla","Valor propiedad CSS")
 +
 +_=axes.set_xticks( [0,min_corte_x,max_corte_x,max_w_size])
 +</sxh>
 ===== Imágenes ===== ===== 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: 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:
Línea 181: Línea 333:
  
   * Pantallas grandes:   * Pantallas grandes:
-{{:clase:daw:diw:1eval:responsive-large.jpg|}}+{{::responsive-large.jpg|}}
  
  
   * Pantallas medianas:   * Pantallas medianas:
-{{:clase:daw:diw:1eval:responsive-medium.jpg|}}+{{::responsive-medium.jpg|}}
  
  
   * Pantallas pequeñas:   * Pantallas pequeñas:
-{{:clase:daw:diw:1eval:responsive-small.jpg|}}+{{::responsive-small.jpg|}}
  
 <sxh html> <sxh html>
 <picture> <picture>
-  <source media="(min-width: 650px)" srcset="images/kitten-large.png" /> +  <source media="(min-width: 900px)" srcset="https://logongas.es/lib/exe/fetch.php?media=responsive-large.jpg" /> 
-  <source media="(min-width: 465px)" srcset="images/kitten-medium.png" /> +  <source media="(min-width: 500px)" srcset="https://logongas.es/lib/exe/fetch.php?media=responsive-medium.jpg" />   
-  <!-- img tag for browsers that do not support picture element --> +  <img src="https://logongas.es/lib/exe/fetch.php?media=responsive-small.jpg />
-  <img src="images/kitten-small.png" alt="a cute kitten" />+
 </picture> </picture>
 </sxh> </sxh>
Línea 388: Línea 539:
    
 @media (min-width: 576px) { @media (min-width: 576px) {
-    .g--font-size-1\@movil {+    .g--font-size-1\@tablet {
         font-size: 40px;         font-size: 40px;
     }     }
-    .g--font-size-2\@movil {+    .g--font-size-2\@tablet {
         font-size: 50px;         font-size: 50px;
     }     }
-    .g--font-size-3\@movil {+    .g--font-size-3\@tablet {
         font-size: 55px;         font-size: 55px;
     }     }
-    .g--font-size-4\@movil {+    .g--font-size-4\@tablet {
         font-size: 70px;         font-size: 70px;
     }     }
Línea 403: Línea 554:
    
 @media (min-width: 768px) { @media (min-width: 768px) {
-    .g--font-size-1\@tablet {+    .g--font-size-1\@desktop {
         font-size: 40px;         font-size: 40px;
     }     }
-    .g--font-size-2\@tablet {+    .g--font-size-2\@desktop {
         font-size: 50px;         font-size: 50px;
     }     }
-    .g--font-size-3\@tablet {+    .g--font-size-3\@desktop {
         font-size: 55px;         font-size: 55px;
     }     }
-    .g--font-size-4\@tablet {+    .g--font-size-4\@desktop {
         font-size: 70px;         font-size: 70px;
     }     }
Línea 418: Línea 569:
    
 @media (min-width: 992px) { @media (min-width: 992px) {
-    .g--font-size-1\@desktop {+    .g--font-size-1\@fulldesktop {
         font-size: 40px;         font-size: 40px;
     }     }
-    .g--font-size-2\@desktop {+    .g--font-size-2\@fulldesktop {
         font-size: 50px;         font-size: 50px;
     }     }
-    .g--font-size-3\@desktop {+    .g--font-size-3\@fulldesktop {
         font-size: 55px;         font-size: 55px;
     }     }
-    .g--font-size-4\@desktop {+    .g--font-size-4\@fulldesktop {
         font-size: 70px;         font-size: 70px;
     }     }
Línea 434: Línea 585:
  
 <sxh html> <sxh html>
-<p class="g--font-size-1  g--font-size-3@desktop">Hola mundo</p>     +<p class="g--font-size-1  g--font-size-3@fulldesktop">Hola mundo</p>     
 </sxh> </sxh>
  
 En el ejemplo por defecto el tamaño de la fuente será de 40px pero en resoluciones mayores de 992px será de 55px. 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 ''@movil'' , ''@tablet'' o ''@desktop''. E indicando en el HTML que tamaño usar según la resolución de la pantalla.+Lo que hacemos es crear todas los modificadores globales o modificadores de bloques para las distintas resoluciones pero añadiendo el sufijo  ''@tablet'' , ''@desktop'' o ''@fulldesktop''. E indicando en el HTML que tamaño usar según la resolución de la pantalla.
  
 Otro ejemplo de ello lo podemos ver en [[https://www.webstoemp.com/blog/notes-on-using-css-grid-in-production/|Notes on using CSS Grid in production]] Otro ejemplo de ello lo podemos ver en [[https://www.webstoemp.com/blog/notes-on-using-css-grid-in-production/|Notes on using CSS Grid in production]]
-===== Ejemplo de Menu responsivo ===== 
  
-{{menu.zip|}}+También en Boostrap qu permite clases responsivas: [[https://getbootstrap.com/docs/5.0/utilities/api/|Utility API]] indicando ''responsive=true'' 
 + 
 +===== 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://dev.to/polypane/css-breakpoints-used-by-popular-css-frameworks-hl9|CSS breakpoints used by popular CSS frameworks]] 
 +  * [[https://gist.github.com/ptibbetts/7b726ae20914c11eb953fdfdf3ee34ed|Comparing Breakpoints in CSS Toolkits and Frameworks]] 
 + 
 + 
 +  * **Bootstrap** 
 + 
 +^  Nombre  ^  Descripcion  ^  Ancho Mínimo 
 +|  --    Extra small devices (portrait phones)    none   | 
 +|  sm    Small devices (landscape phones)    576px   | 
 +|  md    Medium devices (tablet)    768px   | 
 +|  lg    Large devices (desktops)    992px   | 
 +|  xl    Extra large devices (large desktops)    1200px 
 +|  xxl    Extra Extra large devices (extra large desktops)    1400px 
 + 
 +  * **Tailwind** 
 + 
 +^  Nombre  ^  Ancho Mínimo 
 +|  sm    640px   | 
 +|  md    768px   | 
 +|  lg    1024px   | 
 +|  xl    1280px   | 
 + 
 +===== Menu responsivo ===== 
 + 
 +{{..:1eval:menu.zip|}}
  
 <sxh html;title: HTML> <sxh html;title: HTML>
Línea 536: Línea 715:
         }         }
 </sxh> </sxh>
 +
 +===== 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  ^  Externo 
 +^  Fluido  | El propio componente decide como se hace responsivo y lo hace de forma fluida al tamaño del dispositivo. | El que usa el componente decide como se hace responsivo y lo hace de forma fluida al tamaño del dispositivo.  |
 +^  Escalonado  | El propio componente decide como se hace responsivo y lo hace solo para diversos tamaños de pantalla | El que usa el componente decide como se hace responsivo y lo hace solo para diversos tamaños de pantalla |
 +
 +
 +<note tip>
 +El tipo **Externo/Escalonado** es el mas normal y es el que usan frameworks como Tailwind o Bootstrap. 
 +</note>
 +
 +  * Interno/Fluido: Se suele usar con imágenes.
 +
 +<sxh css>
 +.c-titulo {
 +  font-size: 10vw
 +}
 +</sxh>
 +<sxh html>
 +<h1 class="c-titulo">Hola mundo</h1>
 +</sxh>
 +
 +
 +  * Interno/Escalonado: Se usa en un menú responsivo con hamburguesa.
 +
 +<sxh css>
 +.c-titulo {
 +    font-size: 40px;
 +}
 +  
 +@media (min-width: 768px) {
 +    .c-titulo {
 +        font-size: 55px;
 +    }
 +}
 +
 +</sxh>
 +<sxh html>
 +<h1 class="c-titulo">Hola mundo</h1>
 +</sxh>
 +
 +  * Externo/Fluido: Se usa muy poco.
 +
 +<sxh html>
 +            <thead>
 +              <tr>
 +                <th class="c-table__head c-table__head--min-width-2 c-table__head--max-width-3">Author</th>
 +                <th class="c-table__head c-table__head--min-width-2 c-table__head--max-width-3 ">Title</th>
 +                <th class="c-table__head c-table__head--min-width-1 c-table__head--max-width-2">Year</th>
 +                <th class="c-table__head c-table__head--min-width-1 c-table__head--max-width-2">ISBN-13</th>
 +                <th class="c-table__head c-table__head--min-width-1 c-table__head--max-width-2">ISBN-10</th>
 +              </tr>
 +            </thead>
 +</sxh>
 +
 +  * Externo/Escalonado: Es el que usamos con ''@tablet'' o ''@desktop'' , etc.
 +
 +<sxh html>
 +<p class="g--font-size-1  g--font-size-3@tablet">Hola mundo</p>  
 +</sxh>
 +
  
 ===== Ejercicios ===== ===== Ejercicios =====
Línea 545: Línea 788:
   * 1 div cuadrado azul de tamaño 400px   * 1 div cuadrado azul de tamaño 400px
   * 1 div cuadrado verde 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 10+  * 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 10vw+  * Dentro cada cuadrado verde , añade otro div de color rojo con tamaño 20vw
  
  
 Ahora: Ahora:
-  * Explica la diferencia de tamaños entre los de 10% y 10vw+  * 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   * 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
  
Línea 592: Línea 835:
 ==== Ejercicio 5 ==== ==== 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 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
- 
  
 ==== Ejercicio 6 ==== ==== Ejercicio 6 ====
 +Crea una clase css llamada ''.g--color-fondo-responsivo'' de forma que cambia el color de fondo si el ancho del dispositivo (o ventana) tiene:
 +
 +  * Menos de 500px sea de color rojo
 +  * Entre 500px y 750px sea de color verde
 +  * Entre 750px y 1000px sea de color azul
 +  * Más de 1000px 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:#FF0000;
 +}
 +.g--bg-color-green {
 +  background-color:#00FF00;
 +}
 +.g--bg-color-blue {
 +  background-color:#0000FF;
 +}
 +.g--bg-color-orange {
 +  background-color:#FFA500;
 +}
 +
 +
 +</sxh>
 +
 +Y modificalas con el sufijo "@tabled", "@desktop" y "@fulldesktop" y repite el ejercicio anterior pero en vez de usar la clase ''.g--color-fondo-responsivo'' uses las clases que acabas de crear
 +
 +==== Ejercicio 8 ====
 Crea modificadores globales para las siguientes propiedades CSS: Crea modificadores globales para las siguientes propiedades CSS:
   * ''width''   * ''width''
Línea 614: Línea 888:
   * Que si la tabla no cabe, aparezcan las barras de scroll.   * Que si la tabla no cabe, aparezcan las barras de scroll.
  
-==== Ejercicio ====+==== Ejercicio ====
 Modifica el ejercicio anterior de forma que ahora los modificadores globales se puedan usar de forma responsiva con Modifica el ejercicio anterior de forma que ahora los modificadores globales se puedan usar de forma responsiva con
-  * @movil 
   * @tablet   * @tablet
   * @desktop   * @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. 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 ====+==== 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 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
-  * @movil 
   * @tablet   * @tablet
   * @desktop   * @desktop
 +  * @fulldesktop
  
  
-==== Ejercicio ====+==== 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 : 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   * El tamaño de los títulos
clase/daw/diw/2eval/tema06.1610371191.txt.gz · Última modificación: 2021/01/11 14:19 por admin