Unidad 2

Desarrollo de Sitios y Aplicaciones Web

CSS

Índice

Que es el CSS

¿Cómo funciona el CSS?

Insertando el CSS en el HTML

Insertando el CSS de forma externa

Anatomía de un estilo

Selectores CSS

Las pseudo clases

Pseudo-elementos

Los prefijos

Modelo de cajas

Unidades de medida

Cuestiones al margen

Nuevas etiquetas con viejos navegadores

Color y degradé CSS3

El modelo RGBa

El modelo HSL

Degrades sin imágenes con CSS3

Degradé lineal repetido

Degradé radial

Decorando con bordes sombras y fondos

Bordes redondeados

Imágenes de borde

Regulando las repeticiones a los lados

Efectos de sombra

Tarjetas

EL CSS son las siglas de “Cascading Style Sheets” (hojas de estilo en cascada), es otro de los estándares que regula la W3C. El propósito de CSS es separar lo que es la estructura y contenido (HTML) de lo que es su estilo, color, tamaño, decoraciones varias por nombrar algunos ejemplos.

¿Cómo funciona el CSS?

Mediante el CSS, se definen las particularidades visuales y de estilo de una o varias etiquetas. Cuando hablamos de estilos que se pueden aplicar a una etiqueta, nos referimos a por ejemplo: color, fuente tipográfica, alineación, tamaño, posición.

Los ingredientes necesarios para aplicar un estilo son:


— Un elemento HTML (por ejemplo: div, header, body, p.)
— El estilo propiamente dicho (un conjunto de atributos como pueden ser color, tamaño, posición, etc.


Un selector mediante el cual se indica a que etiqueta que aplicará el estilo.

Insertando el CSS en el HTML

IMPORTANTE: En este momento las nuevas incorporaciones de CSS3 están siendo implementadas en las últimas versiones de los navegadores más populares, pero algunas de ellas se encuentran aún en estado experimental. Por esta razón, estos nuevos estilos deberán ser precedidos por prefijos tales como –moz- o -webkit- para ser efectivamente interpretados.

Sintaxis  CSS

Una regla CSS consta de un selector y un bloque de declaración, cada declaración esta separada por un punto y coma (;) en el bloque.


El selector apunta al elemento HTML al que desea aplicar estilo.


En este ejemplo, todos los elementos <p> estarán alineados al centro, con un color de texto rojo, esto se asigna en <style> y se aplicara en <body> cuando encuentre un indicador <p>, es decir  p{.....} tiene el estilo y cuando encuentre p <  > se aplicara en esta etiqueta:

p { color: red;  text-align: center; }

Ejemplo explicado

p es un selector en CSS (apunta al elemento HTML al que desea aplicar estilo: <p>).

El color es una propiedad y el rojo es el valor de la propiedad.

text-align es una propiedad y el centro es el valor de la propiedad

Cuando un navegador lee una hoja de estilo, formateará el documento HTML de acuerdo con la información de la hoja de estilo.

Veamos cómo insertar código CSS en nuestro HTML. El código para CSS puede ser colocado directamente en la etiqueta que se quiera estilizar.

Veremos un ejemplo aplicando un color gris en lugar del negro, que es el color por defecto, a todo texto del <body>, utilizando el atributo style:

<body style="color#333333">

Pero esta práctica nos priva de la ventaja de tener separado el contenido de su estilo de presentación y no nos permite reutilizar código entre varias páginas, ya que solo aplicaría a esta pagina.

La manera de agregar el estilo antes que se cargue el contenido, es insertarlo en el <head>.

Veamos cómo seria la etiqueta <head>:

<head>
<meta charset="utf-8" />
<title>México</title>
<style type="text/css">
body { color:#333333 }
</style>
</head>


consideremos el siguiente ejemplo, con el nombre ejemplocss1.html:

ejemplocss1.html

<!DOCTYPE html>
<html>

<head>
<style>

body {
  background-color: lightblue;
}

h1 {
  color: white;
  text-align: center;
}

p {
  font-family: verdana;
  font-size: 20px;
}

</style>
</head>

<body>

<h1>Mi primer ejemplo de CSS</h1>
<p>Y esto es un parrafo</p>

</body>
</html>

El resultado:



Explicación del código.

NOTA: Es posible agregar comentarios en los estilos con los caracteres:  /*    y     */


<head>
<style>

body {
  background-color: lightblue;   /* indica que el color de fondo es de color azul ligero también se puede colocar el color en hex #00ffff, pero hay que localizar el código adecuado*/
}

h1 {
  color: white;
/* indica que el color del texto es de color blanco también se puede colocar el color en hex #ffffff, esto se le conoce como selector h1, mas adelante se explican*/
 
  text-align: center;
/* indica que va centrado */
}

p {
  font-family: verdana;
  font-size: 20px;
}

</style>
</head>


en el cuerpo del código de html se ve el efecto de:

<body>

<h1>Mi primer ejemplo de CSS</h1>
<p>Y esto es un párrafo</p>

</body>
</html>

Realizamos otro ejemplo de CSS en HTML lo llamaremos ejemplocss2.html

ejemplocss2.html

<!DOCTYPE html>
<html>
<title> Ejemplo 2 de CSS. Estilos genéricos </title>
<head>
      <style type="text/css">

         body {
         background-color: #33ff66;
        
background-position:0px;
        cursor:hand;
        }

       h1 {color: #205596;
background-color:#ffcc00;}
        a {color:#303030;font-style:italic}

       </style>

</head>


<body>

<h1>Mi segundo ejemplo de CSS</h1>
<a href="enlace">Enlace de texto</a>

</body>
</html>


El resultado es este, un color muy llamativo:



Insertando el CSS de forma externa

Una de las ventajas fundamentales del CSS es compartir un mismo estilo entre diferentes páginas HTML. De esta manera, si se quiere cambiar el estilo de todo un sitio, solamente sería necesario modificar los CSS externos y cambiarían los estilos de todas las páginas que carguen el CSS de manera externa.

Existen dos maneras de insertar CSS externo. En ambos casos, es necesario generar un archivo de texto plano con extensión: .css

Sigamos nuestro ejemplo donde lo haríamos de esta manera en un archivo llamado: estilos.css, guardamos el siguiente código:

body {
color:#999999;
}
h1 {
     color : navy;
     margin-left: 20 px;
     }

en este ejemplo usare el editor llamado bluefish, pero pueden usar cualquier otro editor, este esta disponible para Windows en licencia GNU.



Luego en el <head> veremos una manera de cargar el archivo css, en cualquiera de los dos casos, se pueden importar tantos .css como se requiera.

Veamos cada caso:

Carga de un archivo css mediante import,

<style type="text/css">
@import "estilos.css';
</style>

y carga de un archivo css mediante link:

<link rel="stylesheet" href="estilos.css">

usemos esto:

ejemplocss3.html

<!DOCTYPE html>
<html>

<head>
<link rel="stylesheet" href="estilos.css">
</head>

<body>

<h2>Mi tercer  ejemplo de CSS</h2>
<p>Y esto es un parrafo</p>

</body>
</html>

el resultado es que cuando veamos esta pagina en body sera afectado incluyendo todo del color #999999, en lugar del color negro que se ha establecido como preferencia, este ejemplo la llamaremos ejemplocss3.html, en este texto lo pondremos de color gris, ligero para que aprecien los estilos que aplicaremos sobre secciones de nuestro ejercicio :


El atributo rel hace referencia al tipo de relación entre el HTML y el archivo CSS y el atributo href es la URL que puede ser relativo o absoluto. Y podemos apreciar que solo se ha aplicado el estilo para body, H1 no sido usado así que solo se aplica en body.

Revisemos estos conceptos, antes de continuar ya que son necesarios para la aplicación de los estilos :

Anatomía de un estilo

A cada uno de los estilos se lo conoce como “regla”. Vemos quienes son :

— <style >: es la etiqueta que especifica que contendría estilos.

— body: es una variable del tipo de selector. Este atribulo determina qué etiquetas serán afectadas. Mediante distintas sintaxis que veremos inmediatamente, se define cómo se “seleccionará” un elemento determinado para aplicarle el estilo.

— {} ; el estilo es un objeto que contiene diferentes atributos para ser aplicado a un elemento determinado.

— color:#999999: a cada uno de los atributos (que pueden ser uno o más) de un estilo se le llama declaración.

Ésta, a su vez, está compuesta por el nombre del atributo (ej. color) y su valor (ej. #999999).

Selectores CSS

Como hemos visto, una regla CSS (es decir, un estilo) está conformado por:

Existen varios tipos de selectores y formas de combinarlos. Nos centraremos en los más comunes y tienen un uso más generalizado.

Selector universal

Este  selecciona todos los elementos de un documento HTML. Por ejemplo, esta regla aplicará a todos los elementos de una página HTML un fondo de color gris claro.

* {
background-color:#DDDDDD;
}

¿Cómo se lee este selector?
Este selector significa aplicar este estilo a todos los elementos.

Selector por etiqueta

El selector por etiqueta se le utiliza poniendo el nombre de la etiqueta como selector.
Si, por ejemplo, queremos modificar la tipografía de cualquier etiqueta <h1> y que todos se vean igual, lo hacemos de esta manera:

h1 {
color:#DDDDDD;
}

¿Cómo se entiende este selector?

Este selector significa aplicar este estilo a todo elemento cuyo nombre de etiqueta sea igual ahí h1.

Esta modificación afecta a la etiqueta que tenga el nombre del selector y a sus hijos. Si, por ejemplo, tenemos esta situación:

body {
Color:#FF0000;
}
h1 {
color:#DDDDDD;
}

Todos los elementos <body> y todos sus hijos obtendrán el valor de color, exceptuando los elementos que tengan este atributo asignado.
En nuestro ejemplo, <h1> sobrescribirá la propiedad color de <body>.

Aplicando un estilo a varias etiquetas

Un mismo estilo se puede aplicar a varias etiquetas, si tenemos por ejemplo:

h1 {
background-color = #FF0000;
h2 {
background-color = #FF0000;
}

Se puede aplicar un mismo estilo a varias etiquetas separando los nombres de etiqueta con el signo de coma (,). El siguiente código es exactamente lo mismo que el código anterior:

h1, h2 {
background-color = #FF0000;
}

Lo que significa: aplicar este estilo a toda etiqueta que se llame h1 o h2.

Es posible agregar atributos a un estilo.

Sería como una especie de “herencia”. En donde algunos atributos pueden ser compartidos con otras etiquetas y otros ser exclusivos de una o varias etiquetas en particular.
Por ejemplo, en este caso, la etiqueta h1 compartirá el valor del atributo background-color y tendrá un valor exclusivo para el atributo font-family.

h1, h2 {
background-color = #FF0000;
}
h1 {
font-family:
Georgia,
serif;
}

Selector descendente por etiqueta

Este tipo de selector permite “seleccionar” una etiqueta que esté dentro de otras.
Lamentablemente, la sintaxis puede ser promotora de errores. Para indicar que se quiere afectar únicamente a una etiqueta que esté a su vez dentro de otra, se lo indica colocando el nombre de una etiqueta al lado de la otra separado por espacios. Por ejemplo, este estilo:

header h1 {
font-family: Georgia, serif;
font-size: 36px;
}

¿Cómo se lee el selector descendente?

De acuerdo a nuestro ejemplo, se lee como: aplicar este estilo a toda etiqueta <h1> que sea hijo o descendiente de <header>.

Selector por id

Este tipo de selección permite que solo se vean afectados los elementos que tengan un id determinado. La sintaxis para determinar un selector por id es anteponiendo el signo: # al valor del atributo id presente en el HTML distintos tipos de elementos con un mismo valor para el atributo lodos los valores que coincidan con el nombre del selector (sin el signo #) serán afectados. Supongamos que tuviéramos la siguiente linea en un HTML

<h1 id="tituloPrincipal">Castillo Chapultepec /h1>

El elemento de nuestro ejemplo y cualquier otro elemento cuyo atributo id sea igual a: tituloPrincipal será afectado por este código en un CSS:

#tituloPrincipal {
font-family:Georgia, serif;
font-size:36px;
}

¿Cómo se lee el selector por Id?

Este selector significa aplicar este estilo a todo elemento cuyo atributo id sea igual a tituloPrincipal.

Selector por clase

La selección por el atributo clase permite aplicar un estilo a un elemento, en base al valor del atributo class. La forma de hacerlo es anteponiendo el signo de punto (.) al valor del atributo class que se quiera modificar.

Esta práctica permite tener más precisión y “selectividad”. En el caso que haya varias etiquetas con el mismo nombre, y solo quisiéramos afectar a una de ellas y no podemos hacerlo por medio de su nombre de id o dado el caso no es conveniente hacerlo, se puede utilizar esta técnica.

Veamos un ejemplo.

Si tenemos una etiqueta como se muestra, a continuación, en un HTML:

<h1 class="titulo">Castillo de Chapultepec</h1>

Podríamos aplicarle un estilo en el CSS de esta manera:

.titulo {
}
font-family: Georgia, serif;
line-height: 50px;
}

¿Cómo se lee un selector de clase?

Este selector significa aplicar el estilo a toda etiqueta cuyo atribulo class sea igual a: titulo.
Aplicando varios estilos con el selector de clase. A un atributo class se le puede asignar varios nombres. En este caso, se aplicará a la etiqueta los estilos correspondientes de cada una de las clases.

En el HTML:

<h1 class="titulo resaltado" >Castillo de Chapultepec </h1>

En el CSS:

.titulo {
font-family: Georgia, serif;
font-size: 36px;
}

.resaltado {
color: white;
}

También es posible seleccionar una etiqueta que tenga una o más clases. Por ejemplo:

.titulo.resaltado {
background-color: red }

Esta regla se lee como: aplicar el estilo a toda etiqueta cuyo atribulo class contenga entre sus valores a: titulo y resaltado.

Selector descendiente de clases

Este selector no debe ser confundido con el selector de clases múltiple.
Es muy fácil confundirse y tiene una aplicación distinta:

.titulo .resaltado {
background-color: red;
}

Este selector significa aplicar este estilo a toda etiqueta que tenga un atributo class con el valor .resaltado y que sea descendiente de una etiqueta que tenga un atributo class cuyo valor sea igual a .titulo

Combinación de selectores

Si aún se necesita ser más específico en la selección de etiquetas. Se pueden combinar los diferentes selectores.
Combinación del selector de etiqueta y selector universal

header * h1 { color: red;}

Este estilo significa aplicar el estilo a toda etiqueta que sea, a su vez, hijo de una etiqueta <header>. Vale aclarar que este estilo no será aplicado a todo hijo directo de una etiqueta <header>, porque el selector comienza a tener efecto a partir de los hijos de esta etiqueta.

Combinación del selector de etiqueta con el selector de id

p#titulo { color: red;}

Este estilo significa aplicar este estilo a toda etiqueta <p> cuyo atributo id sea igual a titulo.

Combinación del selector de etiqueta con el selector de clase

p.resaltado { color: red;}

Este estilo significa aplicar este estilo a toda etiqueta <p> que tenga como valor del atributo class el valor: resaltado. Si tuviéramos etiquetas <p> en alguna parte de un HTML, con la regla de nuestro ejemplo, se debería ver en color rojo solamente el <p> que dice: Este texto se debe ver Rojo, que es la única etiqueta que cumple con la condición de la regla.

<p> Este texto se verá negro</p>
<p class="resaltado">Este texto se debe verse Rojo</p>

Combinación de combinaciones

También es posible combinar combinaciones:

header#principal h1.titulo { color: red;}
<body>
    <article
       <header id=principal>
           <hgroup>
             <h1 class="titulo">Castillo Chapultepec</hl>
             <h3>Escenarios majestuosos de México</h3>
          </hgroup>
       </header>
    </article>
</body>

En este caso, significa: aplicar el estilo a toda etiqueta <h> cuyo atributo class sea igual a titulo y que sea descendiente de una etiqueta <header> cuyo id sea igual a principal.

Para ello tomaremos un ejercicio de la unidad anterior para poder apreciarlo usemos el ejemplo4.html, y lo guardamos como ejemplo4css.html y consideramos lo siguiente:

para estilos.css

body {
color:#999999;
}
h1 {
  color: navy;
  margin-left: 20px;
  }
 
  .titulo {
font-family: Georgia, serif;
font-size: 36px;
}

.resaltado {
color: red;
}

y en ejemplocss4.html, los cambios se ven aquí en color

ejemplocss4.html

<!DOCTYPE html>
<html lang="es">

<head>
      
         <meta charset="utf-8" />
        <meta name=”description” content=”Ejemplo de HTML5”>
        <meta name=”keywords” content=”CECATI No. 89, Celaya, Guanajuato”>
        <link rel="stylesheet" href="estilos.css">
        <title>Conociendo HTML5</title>

</head>
<body>

<article>
<header>
             <h1 class="titulo resaltado">Castillo de Chapultepec</h1> /* a pesar que se definio h1 el estilo llamado con class declara titulo resaltado como estilos desde css */
             <h1>El Castillo de Chapultepec es un edificio ubicado en la primera sección del bosque de Chapultepec en la Ciudad de México, a 2325 metros sobre el nivel del mar. Tiene una superficie de 11.8 hectáreas ​ y un diseño arquitectónico principalmente barroco y neoclásico.</h1> /* aqui se aplica directamente el estilo h1 desde css, este es por etiqueta*/
    </header>
    <section>

           <h4> Información general del Castillo </h4> 
              <p>El castillo de Chapultepec .</p>
              <p>Las columnas están recubiertas de yeso y las cornisas contienen medallones con el emblema de la República Mexicana </p>
    </section>

    <section>
                <h4>Acceso:</h4>
               <p>Si utilizas el S. T. C. Metro, las estaciones más cercanas son: </p>
               <p>Chapultepec - línea 1. Esta estación tiene acceso directo al Bosque de Chapultepec.</p>
               <p>Auditorio - línea 7. Una vez que hayas llegado a la estación Auditorio, debes tomar la línea 7 del Metrobús y bajarte en la estación Gandhi. De ahí hay que caminar al interior del Bosque hasta la rampa que sube al museo.</p>
     </section>

    <section>
             <h4 class="titulo"> Entrada general: $90.00 </h4> /* se aplica solo el estilo titulo */
             <p>Los domingos la entrada es gratuita para todo el público nacional y para los extranjeros residentes en México.</p>
             <p>El museo informa: los únicos puntos de venta autorizados para la compra de boletos del museo son el sitio web: https://ventadeboletosenlinea.inah.gob.mx/</p>
   </section>
   <section>
             <h4 class="resaltado"> Horarios : </h4> /* se aplica solo el estilo resaltado */
             <p>Horario: martes a domingo, 9 a 17 horas. (Este horario no cambia en días festivos o periodos vacacionales)</p>
    </section>
   <footer>
           <h5>Todos los derechos reservados</h5>
   </footer>
</article>

</body>
</html>

el resultado de esto:


Ahora realizamos los siguientes cambios, en estilos.css, agreguemos esto:

 body {
color:#999999;
}
h1 {
  color: navy;
  margin-left: 20px;
  }
 
.titulo {
font-family: Georgia, serif;
font-size: 36px;
}

.resaltado {
color: red;
}

.importante {
    font-weight:bold;
    color:#330033;
}

y en ejemplocss4.html

<section>
             <h4 class="resaltado"> Horarios : </h4>
             <p class="importante">Horario: martes a domingo, 9 a 17 horas. (Este horario no cambia en días festivos o periodos vacacionales)</p>
</section>

  lo que se observara es lo siguiente en la sección:

otro ejemplo es poner lo siguiente al final en estilos.css, este esta relacionado con id en HTML, pone de color #999900, y lo envía a la derecha :

#noticia1 {
color:#999900;
float:right;
}

y esto en html:

<footer>
           <h5 id="noticia1">Todos los derechos reservados</h5>
</footer>

el resultado debería ser:


Evidencia: modifiquen el ejemplocss4.html, para cambiar el color de fondo a un color amarillo tenue (uds. deciden el tono que mas les agrade de amarillo, y color de letras del frente a color negro) pude ser el color asignado por nombre o por numero en hexadecimal.

se pueden  guiar de la siguiente forma en estilos.css, uds, decidan en que parte de css actúa para toda la pagina :

background-color: lightblue;
color: green;

Selectores de atributos CSS

Es posible diseñar elementos HTML que tengan atributos o valores de atributos específicos.

El selector [atributo] se utiliza para seleccionar elementos con un atributo específico.

El siguiente ejemplo selecciona todos los elementos <a> con un atributo de destino:

a[target] {
  background-color: yellow;
}

en estilos.css al final agregue:

a[target] {
  background-color: yellow;
}

y en HTML ejemplocss4.html

<p>El museo informa: los únicos puntos de venta autorizados para la compra de boletos del museo son el sitio web: <a href="https://ventadeboletosenlinea.inah.gob.mx" target="_top">Venta de Boletos</a></p>

veamos este cambio realizado 

a[target] {
  background-color: yellow;
}

en estilos.css estamos indicando que aquellas etiquetas que tengan el atributo de <a   ... /a> que es hacer referencia a un "link" externo en este caso serían marcadas de color amarillo, y que se a indicado como target="_top" (nota _top es solo la asignación de un string, pero puede ser cualquier texto como esto: target="aqui", o cualquier otro string sin espacios) cambiara su aspecto del tradicional a lo se ve en el ejemplo en la imagen, y que el "link" se vera representado por el texto Venta de boletos.

el resultado de esto:


El selector [atributo|="valor"] se utiliza para seleccionar elementos con un valor de atributo que contiene una palabra específica.

en estilos.css, agregue al final lo siguiente:

[class|="top"] {
  background: yellowgreen;
}

top  puede ser otro texto sin espacios en el.

en ejemplocss4.html agregamos en:


<section>
             <h4 class="titulo"> Entrada general: $90.00 </h4>
             <p class="top-texto">Los domingos la entrada es gratuita para todo el público nacional y para los extranjeros residentes en México.</p>
             <p>El museo informa: los únicos puntos de venta autorizados para la compra de boletos del museo son el sitio web: <a href="https://ventadeboletosenlinea.inah.gob.mx" target="_top">Venta de Boletos</a></p>
   </section>

Resultado:

revisemos el código en HTML class="top-texto" con ello solicitamos el atributo llamado top y sera aplicado al parrafo con <p > </p>, podemos ver que se declaro como top pero hemos agregado un "-" y lo puede asignar de esa forma pero no toptexto eso no seria considerado, podemos decir que si el atributo top- en HTML sera considerado usando un texto adicional pero no llevara espacios, lo cual podría ser : class="top-header" y seria aplicado.

Selector CSS [atributo^="valor"]

El selector [atributo^="valor"] se utiliza para seleccionar elementos con el atributo especificado, cuyo valor comienza con un valor especificado.

El siguiente ejemplo selecciona todos los elementos con un valor de atributo de clase que comienza con "top":

Nota: ¡El valor no tiene que ser una palabra completa!

agregue al final de estilos.css

[class^="top1"] {
  background: orangered;
}

en ejemplocss4.html esto:

 <section>

           <h4> Informacion general del Castillo </h4> 
              <p class="top1texto">El castillo de Chapultepec .</p>
              <p>Las columnas están recubiertas de yeso y las cornisas contienen medallones con el emblema de la República Mexicana </p>
</section>

este caso es muy similar al anterior pero agrega la característica que con que lleve la secuencia del nombre top1 y tenga un "-" o no se aplica el atributo


El selector [attribute$="value"] se utiliza para seleccionar elementos cuyo valor de atributo termina con un valor específico.
El siguiente ejemplo selecciona todos los elementos con un valor de atributo de clase que termina en "prueba":


Nota: ¡El valor no tiene que ser una palabra completa!

en estilos.css agregue al final:

[class$="prueba"] {
  background: blueviolet;
  color:white;
}


en ejemplocss4.html:

<section>
           <h4> Informacion general del Castillo </h4> 
              <p class="top1texto">El castillo de Chapultepec .</p>
              <p class="primer_prueba">Las columnas están recubiertas de yeso y las cornisas contienen medallones con el emblema de la República Mexicana </p>
</section>

resultado:

el <p class="primer_prueba"> también puede ser como <p class="primerprueba"> o bien <p class="mi-prueba">

El selector [attribute*="value"] se utiliza para seleccionar elementos cuyo valor de atributo contiene un valor específico.
El siguiente ejemplo selecciona todos los elementos con un valor de atributo de clase que contiene "mus" al final del nombre :

Nota: ¡El valor no tiene que ser una palabra completa!

agrege al final en estilos.css

[class*="mus"] {
  background: greenyellow;
}

en ejemplocss4.hml

<p class="revision-mus">El museo informa: los únicos puntos de venta autorizados para la compra de boletos del museo son el sitio web: <a href="https://ventadeboletosenlinea.inah.gob.mx" target="aqui">Venta de Boletos</a></p>

Resultado :

aquí usamos este estilo y en la misma linea usamos el estilo por la etiqueta <a...../a> y aquellas que tengan "mus" en el nombre al final.

Las pseudoclases

Se utiliza una pseudoclase para definir un estado especial de un elemento.

Existen dos tipos de pseudo-clases: las que indican estados y los estructurales.

Entre las que se refieren a estados, en el CSS “viejo” podemos encontrar las siguientes:


:link
:visited
:hover
:focus
:active

Por ejemplo, se puede utilizar para:


Aplicar estilo a un elemento cuando un usuario pasa el mouse sobre él, diseñe los enlaces visitados y no visitados de manera diferente.

Aplicar estilo a un elemento cuando recibe el foco (cuando se pasa el ratón por encima del elemento)

La sintaxis de pseudo-classes:

selector:pseudo-class {
  property: value;
}

Los enlaces se pueden mostrar de diferentes maneras, para realizar este ejercicio crearemos otro css del nombre estilos_2.css, que contendrá lo siguiente, los enlaces se pueden mostrar de diferentes maneras, así como se vio en la unidad anterior el "link" se muestra de un color, al ingresar el color cambia en las pseudo-clases se puede personalizar :

/* link no visitado */

a:link {
  color: #FF0000; /* rojo */
}

/* link  visitado*/
a:visited {
  color: #00FF00; /* verde */
}

/* mouse sobre un link */
a:hover {
  color: #FF00FF; /* magenta */
}

/* link selecionado */
a:active {
  color: #0000FF; /*azul profundo*/
}

y en el ejemplocss4.html se le agregara el otro css. de la siguiente manera:

<head>
       
         <meta charset="utf-8" />
        <meta name=”description” content=”Ejemplo de HTML5”>
        <meta name=”keywords” content=”CECATI No. 89, Celaya, Guanajuato”>
        <link rel="stylesheet" href="estilos.css">
        <link rel="stylesheet" href="estilos_2.css">
        <title>Conociendo HTML5</title>

</head>

y en la otra parte de body:

<section>
             <h4 class="titulo"> Entrada general: $90.00 </h4>
             <p class="top-texto">Los domingos la entrada es gratuita para todo el público nacional y para los extranjeros residentes en México.</p>
             <p class="revision-mus">El museo informa: los únicos puntos de venta autorizados para la compra de boletos del museo son el sitio web: <a href="https://ventadeboletosenlinea.inah.gob.mx" target="aqui">Venta de Boletos</a></p>
            
             <p><b><a href="http://cecati89-plantel-ind.com" target="cecati">link a la pagina de este curso</a></b></p>

   </section>

lo que indica:
1.- se carga otra hoja de estilos estilos_2.css
2.- se solicita el estilo de la nueva referencia de estilos_2.css

el link agregado debería ser de color verde y cuando se coloca el cursor sobre el se vería de color magenta, pero tiene un fondo de color amarillo, pero de donde viene ese color amarillo si no lo he indicado aqui ? espero sus conclusiones de este estilo en particular.

Nota: a:hover DEBE venir después de a:link y a:visited en la definición de CSS para que sea efectivo. a:active DEBE venir después de a:hover en la definición de CSS para que sea efectivo. Los nombres de pseudoclases no distinguen entre mayúsculas y minúsculas.

El resultado cuando no esta el ratón sobre el link que se agrego:

y cuando el cursor esta sobre el link:


Para colocar un hover on <div> (colocar el cursor sobre un <div> )
:hover pseudo-class  a <div> :

div:hover {
  background-color: blue;
}

Este ejemplo es de forma directa solo seria cuestión de separar en css y html lo que es necesario, como es una prueba individual llamemos esto individual1.html:

<!DOCTYPE html>
<html>
<head>
<style>
div {
  background-color: green;
  color: white;
  padding: 25px;
  text-align: center;
}

div:hover {
  background-color: blue;
}

</style>
</head>
<body>

<p>Pase el mouse sobre el elemento div a continuación para cambiar su color de fondo:</p>

<div>Pasa el ratón sobre esto</div>

</body>
</html>

el resultado es el siguiente:




Uds. hagan este ejercicio y revisen lo que sucede, y analicen el código.

este otro como individual2.html

<!DOCTYPE html>
<html>
<head>
<style>
p {
  display: none;
  background-color: yellow;
  padding: 20px;
}

div:hover p {
  display: block;
}

</style>
</head>
<body>

<div>Desplaza el ratón por este lugar para ver lo que hago
  <p>Aquí estoy Hola!</p>
</div>

</body>
</html>


el resultado lo capturan y lo enviarán como actividad individual2.html, con sus capturas de pantalla, prueben cambiando el color de fondo e intenten cambiar el color de la letra

La pseudo clase :first-child coincide con un elemento específico que es el primer hijo de otro elemento.

En el siguiente ejemplo, el selector coincide con cualquier elemento <p> que sea el primer hijo de cualquier elemento, individual3.html:

<!DOCTYPE html>
<html>
<head>
<style>
p:first-child {
  color: red;
}

</style>
</head>
<body>

<p>Algún Texto</p>
<p>Algún Texto</p>

<div>
<p>Algún Texto</p>
<p>Algún Texto</p>
</div>

</body>
</html>

Resultado:

En el siguiente ejemplo, el selector coincide con el primer elemento <i> de todos los elementos <p> individual4.html

:

<!DOCTYPE html>
<html>
<head>
<style>
p i:first-child {
  color: blue;
}

</style>
</head>
<body>

<p>Yo soy una persona <i>presistente</i> en mis proyectos. Yo soy una persona <i>persistente</i> en mis proyectos.</p>
<p>Yo soy una persona <i>presistente</i> en mis proyectos. Yo soy una persona <i>persistente</i> en mis proyectos.</p>

</body>
</html>

Resultado:

La pseudoclase :lang le permite definir reglas especiales para diferentes idiomas.

En el siguiente ejemplo, :lang define las comillas para los elementos <q> con lang="no": individual5.html

<!DOCTYPE html>
<html>
<head>
<style>
q:lang(no) {
  quotes: "~" "~";
}

</style>
</head>
<body>

<p>En el texto <q lang="no">una marca en el parrafo</q> en el texto.</p>
<p>En este ejemplo, :lang define la marcación para elementos q con lang="no":</p>

</body>
</html>

Resultado:

Evidencia:
Establezca el color de fondo en rojo cuando pase el ratón sobre un enlace, presento una fracción del código uds. completen lo que falta, y lo envían como evidencia de pseudoclases, ( pseudoclases_1.html ) y con capturas de pantalla (html completo y la imagen del resultado)

<style>

.......
 {
  background-color: red;
}
</style>

<body>

<h1>Este es encabezado.</h1>
<p>Esto es un parrafo</p>
<a href="https://cecati89-plantel-ind.com">Esto es un link</a>

</body>



pseudo-clases estructurales

:lang(idioma)
Apunta hacia elementos que tengan definido el atributo lang con el valor indicado entre los paréntesis. Por ejemplo:
:lang(en){...}
Seleccionará elementos como:
<p lang="en">English text</p>
:first-child
Selecciona el primer elemento de una serie de elementos similares. Ejemplo: el primer “li” de una lista, el primer “tr" de una tabla, el primero de una serie de párrafos, etc.

pseudo-clases relativas a los estados

:target
Selecciona el elemento cuyo id fue utilizado en la URL que cargó la página (usando enlaces comúnmente llamados “anclas”, que terminan con un numeral y el id del elemento).
Por ejemplo: si pulsamos un enlace similar a este:
<a href="#noticia3">Noticia 3</a>
El navegador desplazará el contenido de la página, dejando al inicio de la ventana el elemento cuyo id sea igual a “noticia3”, y en ese momento, le sucederá el estado “target”. Es decir, se aplicará lo definido en la hoja para ese estado:
div:target{
background-color:gray;
border:lpx solid black;
}
:enabled
Selecciona los elementos de la interfaz que pueden llegar a tomar el foco o ser seleccionados. Típicamente se aplica a elementos de formulario, que no estén específicamente deshabilitados.
Ejemplo:
input:enabled{...}
:disabled
Por el contrario, apunta a los elementos específicamente deshabilitados mediante el atributo disabled de HTML o mediante JavaScript.
Ejemplo:
input:disabled{...}
:checked
Se aplica cuando el elemento de formulario de tipo checkbox o radio tiene definidos los atributos "selected” o “checked”.
Ejemplo:
input:checked{...}
:not(selector)
Existen casos en los que es más simple seleccionar lo que “no” sea determinado selector. Por ejemplo, si en un formulario queremos aplicar un estilo a todos los inputs menos al input de tipo submit. En vez de hacer la lista de los ¡dentificadores o clases que deberíamos aplicar a todos los inputs que no sean de tipo “submit”. Podríamos seleccionarlos así:
input: not ( [type=" submit" ]){...}

pseudo-clases relativas a los estructurales recientemente incorporadas

:root
Ejemplo:
:root{...}
No muy usado, ya que solo seleccionará el elemento raíz de un documento HTML, que siempre será la etiqueta <html>:
<html lang="sp">
:nth-chlld(n)
Selecciona el elemento indicado de una serie de elementos similares, anidados dentro de un mismo elemento padre. Por ejemplo: el segundo “11” de una lista, el lercer “tr" de una tabla, el penúltimo párrafo de una serie, etc.
Ii:nth-child(2) {...}
Este ejemplo selecciona el segundo li de una serie.
Dentro de los paréntesis podemos escribir un número, o las palabras even (impar) y odd (par).
Ejemplo: selecciona las filas impares de una tabla:

tr:nth-child(odd){
background-color:gray;
}
Si el valor es negativo, comenzará a contar desde el último elemento de la serie hacia el principio (de atrás hacia adelante):
Este ejemplo seleccionará el anteúltimo tr de una tabla:

tr:nth-child(-2){
color: red;
}
:nth-last-child(n)
Selecciona el número que indiquemos entre sus paréntesis, pero comenzando desde el último elemento hacia adelante:

li:nth-last-child(3){
color:red;
}

(seleccionará el tercer li desde el último hacia adelante)
:nth-of-
type(n)
A diferencia de los anteriores selectores, que requerían una serie ininterrumpida de elementos homogéneos (tr, li), los selectores que incluyen “of-type” en su nombre permiten seleccionar el segundo, tercer elemento, etc. pero de una serie no necesariamente homogénea. Por ejemplo, permiten seleccionar “el tercer párrafo de la página”, más allá de que no existan tres párrafos seguidos y aunque estén Interrumpidos por encabezados h2, h3, etc. Veamos el c.r.o

<h2>Título</h2>
<p>Primer párrafo</p>
<h3>Subtítulo</h3>
<p>Segundo párrafo</p>
<h3>0tro subtítulo</h3 >
<p>Tercer párrafo</p>
Si queremos apuntar al tercer párrafo, lo haremos así:

p:nth-of-type(3){ }
:nth-
last-of-
type(n)
Lo mismo que el anterior, pero comenzando desde el final (equivale a utilizar números negativos dentro de los paréntesis del selector anterior).
:last-chíld
Similar a first-chiId pero para seleccionar el último elemento de una serie:

td:nth-last-child{
text-align:right;
}

Esto alineará a la derecha el texto del último td de cada fila de una tabla (algo muy útil para precios y demás datos numéricos).
:first-of-
type
Selecciona la primera aparición del elemento indicado dentro del mismo elemento padre. Por ejemplo, el primer div que exista en el body o el primero de los elementos que tenga aplicada una clase:

div:first-of-type{...}
.importante:first-of-type{...}
:last-of-type

Lo mismo que el anterior, pero de atrás hacia adelante.
:only-child
Selecciona el elemento cuando es el único de su tipo dentro del elemento padre que lo contiene. Útil para cuando el contenido es dinámico, y proviene de una base de datos, pudiendo detectar así cuando devolvió un único resultado, de modo de darle formato diferente solo en ese caso.

Ii:only-child{...}
:only-of-type
Igual al anterior, pero sin importar en qué parte del conjunto aparece.
:empty
Solo aplica lo declarado si el elemento no posee contenidos entre su apertura y su cierre, por ejemplo:

p:empty{...}
Si en el código hubiera un párrafo vacío, lo seleccionará:

<px/p>

Su uso es práctico cuando el contenido de un elemento proviene de una consulta a una base de datos, que pudiera no obtener resultados.

Pseudo-elementos

Un pseudoelemento CSS se utiliza para diseñar partes específicas de un elemento.

Por ejemplo, se puede utilizar para:

Aplicar estilo a la primera letra o línea de un elemento
Insertar contenido antes o después del contenido de un elemento

Sintaxis:

selector::pseudo-elemento {
  property: value;
}

El pseudoelemento ::first-line se utiliza para agregar un estilo especial a la primera línea de un texto.

El siguiente ejemplo da formato a la primera línea del texto en todos los elementos <p>, realicemos un ejemplo de esto con el

ejemplocss_p1.html:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta charset="UTF-8">
    <style>
p::first-line {
  color: #ff0000;
  font-variant: small-caps;
}

</style>
  </head>
  <body>
    <p>Puede utilizar el pseudoelemento ::first-line para agregar un
      efecto especial a la primera línea de un texto. Un poco más de
      texto. Y aún más, y más, y más, y más, y más, y más, y más, y más,
      y más, y más, y más, y más.</p>
    <table width="25%" cellspacing="2" cellpadding="2" border="1">
      <tbody>
        <tr>
          <td valign="top">
            <p>Ejemplo de primer linea cuando hay un
              elemento p que llega al final del espacio por la linea de texto </p>
          </td>
          <td valign="top">Otro texto ocupando celda del lado derecho<br>
          </td>
        </tr>
        <tr>
          <td valign="top"><br>
          </td>
          <td valign="top"><br>
          </td>
        </tr>
      </tbody>
    </table>
    <p>Aqui vemos otro efecto de ::first-line este efecto se limita al ajuste del texto que se entre los elementos p </p>
    <p> </p>
  </body>
</html>

Resultado:


Nota: El pseudoelemento ::first-line solo se puede aplicar a elementos a nivel de bloque.


Las siguientes propiedades se aplican al pseudoelemento :: de primera línea:

propiedades de fuente

propiedades de color

propiedades de fondo

espaciado de palabras

espaciado de letras

decoracion-de-texto

alineación vertical

transformación de texto

altura de la línea

claro

Observe la notación de dos puntos dobles: ::primera línea versus :primera línea

Los dos puntos dobles reemplazaron la notación de dos puntos para los pseudoelementos en CSS3. Este fue un intento del W3C de distinguir entre pseudoclases y pseudoelementos.

La sintaxis de dos puntos se utilizó tanto para pseudoclases como para pseudoelementos en CSS2 y CSS1.

Para compatibilidad con versiones anteriores, la sintaxis de dos puntos es aceptable para los pseudoelementos CSS2 y CSS1.



El pseudoelemento ::first-letter se utiliza para agregar un estilo especial a la primera letra de un texto.


El siguiente ejemplo da formato a la primera letra del texto en todos los elementos <p>, ejemplo de esto con el

 ejemplocss_p2.html:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta charset="UTF-8">
    <style>
p::first-line {
  color: #ff0000;
  font-variant: small-caps;
}

p::first-letter {
  color: #009900;
  font-size: xx-large;
}

</style>
  </head>
  <body>
    <p>Puede utilizar el pseudoelemento ::first-line para agregar un
      efecto especial a la primera línea de un texto. Un poco más de
      texto. Y aún más, y más, y más, y más, y más, y más, y más, y más,
      y más, y más, y más, y más.</p>
    <table width="25%" cellspacing="2" cellpadding="2" border="1">
      <tbody>
        <tr>
          <td valign="top">
            <p>Ejemplo de primer linea cuando hay un
              elemento p que llega al final del espacio por la linea de texto </p>
          </td>
          <td valign="top">Otro texto ocupando celda del lado derecho aquí no lleva el elemento p <br>
          </td>
        </tr>
        <tr>
          <td valign="top"><br>
          </td>
          <td valign="top"><br>
          </td>
        </tr>
      </tbody>
    </table>
    <p>Aqui vemos otro efecto de ::first-line este efecto se limita al ajuste del texto que se entre los elementos p </p>
    <p>Hemos usado ::first-letter pseudo-elemento para agregar efecto especial al primer carácter de los textos de este ejemplo!</p>
  </body>
</html>


El resultado:



tenemos una asignación de tamaño nuevo: xx-small, x-small, small, medium, large, x-large, xx-large, xxx-large

Es el tamaño absoluto, basadas en el tamaño de fuente predeterminado del usuario (que es mediano). Prueba cambiar font-size: xx-large; con xx-small, x-small, small, medium, large, x-large, xxx-large

En todos los navegadores es funcional este codigo.

El pseudoelemento ::before se puede utilizar para insertar algún contenido antes del contenido de un elemento ejemplo de esto con el 

ejemplocss_p3.html


El siguiente ejemplo inserta una imagen antes del contenido de cada elemento <h1>:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta charset="UTF-8">
    <style>
h1::before {
  content: url(smiley.gif);
}

</style>
  </head>
  <body>
   

<h1>Esto es un header h1 </h1>
<p>::before pseudo-elemento inserta el contenido antes de un elemento.</p> 
  </body>
</html>

para la imagen que esta en content: url(smiley.gif); pueden descargar de internet una imagen de este tipo, y dejala en el directorio donde esta el ejemplo de html,  coloquen el nombre correcto y el resultado:


El pseudoelemento ::after se puede utilizar para insertar algún contenido después del contenido de un elemento.

El siguiente ejemplo inserta una imagen después del contenido de cada elemento <h1>, ejemplo de esto con el

 ejemplocss_p4.html

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta charset="UTF-8">
    <style>
h1::after {
  content: url(smiley.gif);
}

</style>
  </head>
  <body>
   
<h1>Esto es un header h1 </h1>
<p>::after pseudo-elemento inserta el contenido después de un elemento.</p> 
  </body>
</html>

El pseudoelemento ::selection Las siguientes propiedades CSS se pueden aplicar a ::selection: color, background, cursor, outline.

El siguiente ejemplo hace que el texto seleccionado sea rojo sobre un fondo amarillo, cuando se cargue en el navegador seleccione un texto, o parte de el, ejemplo de esto con el ejemplocss_p5.html

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta charset="UTF-8">
    <style>
::selection {
  color: red;
  background: yellow;
}

</style>
  </head>
  <body>
   

<h1>Esto es un header h1 </h1>
<p>::selection pseudo-elemento en algún lugar seleccione texto</p> 
  </body>
</html>

Evidencia:

Establece el color de fondo en rojo, de la primera línea del párrafo, agrega lo necesario para que sea interpretado en el navegador, lo envían como evidencia de pseudoelementos, ( pseudoelementos_1.html ) y con capturas de pantalla (html completo y la imagen del resultado), las pseudoclases se pueden combinar con los pseudoelementos , primero la pseudoclase y despues el pseudoelemento, .p_class::p_elemento

<style>
............... {
  background-color: red;
}
</style>

<body>

<p class="intro">
En mis años más jóvenes y vulnerables
mi padre me dio algunos consejos que he
estado dando vueltas en mi mente desde entonces.
"Siempre que tengas ganas de criticar a alguien", me dijo,
'Solo recuerda que todas las personas en este mundo
No he tenido las ventajas que has tenido.
</p>

</body>

Resumen de las psudoclases

Selector

Ejemplo

Descripcion

:active a:active Seleciona el link activo
:checked input:checked Selecciona cada elemento <input> marcado
:disabled input:disabled Selecciona cada elemento <input> deshabilitado
:empty p:empty Selecciona cada elemento <p> que no tiene hijos
:enabled input:enabled Selecciona cada elemento <input> habilitado
:first-child p:first-child Selecciona cada elemento <p> que sea el primer hijo de su padre
:first-of-type p:first-of-type Selecciona cada elemento <p> que sea el primer elemento <p> de su padre
:focus input:focus Selecciona el elemento <input> que tiene foco
:hover a:hover Selecciona enlaces al pasar el mouse sobre el
:in-range input:in-range Selecciona elementos <input> con un valor dentro de un rango específico
:invalid input:invalid Selecciona todos los elementos <input> con un valor no válido
:lang(language) p:lang(it) Selecciona cada elemento <p> con un valor de atributo lang que comienza con "it"
:last-child p:last-child Selecciona cada elemento <p> que sea el último hijo de su padre
:last-of-type p:last-of-type Selecciona cada elemento <p> que sea el último elemento <p> de su padre
:link a:link Selecciona todos los enlaces no visitados
:not(selector) :not(p) Selecciona cada elemento que no sea un elemento <p>
:nth-child(n) p:nth-child(2) Selecciona cada elemento <p> que es el segundo hijo de su padre
:nth-last-child(n) p:nth-last-child(2) Selecciona cada elemento <p> que sea el segundo hijo de su padre, contando desde el último hijo
:nth-last-of-type(n) p:nth-last-of-type(2) Selecciona cada elemento <p> que sea el segundo elemento <p> de su padre, contando desde el último hijo
:nth-of-type(n) p:nth-of-type(2) Selecciona cada elemento <p> que es el segundo elemento <p> de su padre
:only-of-type p:only-of-type Selecciona cada elemento <p> que sea el único elemento <p> de su padre
:only-child p:only-child Selecciona cada elemento <p> que sea el único hijo de su padre
:optional input:optional Selecciona elementos <input> sin atributo "requerido"
:out-of-range input:out-of-range Selecciona elementos <input> con un valor fuera de un rango especificado
:read-only input:read-only Selecciona elementos <input> con un atributo de "solo lectura" especificado
:read-write input:read-write Selecciona elementos <input> sin atributo de "solo lectura"
:required input:required Selecciona elementos <input> con un atributo "requerido" especificado
:root root Selecciona el elemento raíz del documento.
:target #news:target Selecciona el elemento #news activo actual (se hace clic en una URL que contiene ese nombre de ancla)
:valid input:valid Selecciona todos los elementos <input> con un valor válido
:visited a:visited Selecciona todos los enlaces visitados

Resumen de los psudoelementos

Selector

Ejemplo

Descripcion

::after p::after Insertar algo después del contenido de cada elemento <p>
::before p::before Insertar algo antes del contenido de cada elemento <p>
::first-letter p::first-letter Selecciona la primera letra de cada elemento <p>
::first-line p::first-line Selecciona la primera línea de cada elemento <p>
::marker ::marker Selecciona los marcadores de los elementos de la lista.
::selection p::selection Selecciona la parte de un elemento que es seleccionada por un usuario


Los prefijos

Vamos a adelantarnos a un tema relacionado con la sintaxis de CSS, que aplicaremos mucho a partir de los siguientes capítulos: los prefijos.

En el proceso de evolución de los navegadores, algunos eligen adelantarse y comenzar a interpretar experimentalmente algunas propiedades CSS cuando aún no están estandarizadas; en ese caso, el W3C no les permite implementarlas con la sintaxis futura, y por lo tanto los desarrolladores de navegadores recurren a agregar un prefijo, que solo funcionará en ese navegador, advirtiendo al diseñador que quiera hacer uso de esa funcionalidad que todavía no es parte del estándar (y previniendo que en el futuro todavía pudiera cambiar la sintaxis definitiva de esa propiedad, lo que haría que dejase de funcionar si el diseñador hubiera usado directamente la sintaxis sin prefijo, obligándolo a corregir todos sus códigos). Este cambio de sintaxis ha sucedido varias veces ya en la breve historia de HTML5, por ejemplo, en el caso de los degradés.

Esta política nos permite generar código compatibilizado, ya que si deseamos que los usuarios de versiones de algún navegador que se animó a interpretar algo “antes de tiempo" puedan ver ese efecto, simplemente deberemos agregar a siguientes prefijos:

Prefijo:        Navegador:
-moz-            Mozilla Firefox
-webkit-        Safari y Chrome
-0-                Opera
-ms-             Internet Explorer

-khtml- Konqueror (navegador preinstalado en algunos Linux)

Un ejemplo de código ya compatibilizado:

.tres__columnas {
-moz-column-count: 3;
-webkit-column-count: 3;
column-count: 3;

-moz-column-width: 120px;
-webkit-column-width: 120px;
column-width: 120px;

-moz-column-gap: 24px;
-webkit-column-gap: 24px;
column-gap: 24px;

-moz-column-rule : Ipx solid #999;
-webkit-column-rule: lpx solid #999;
column-rule: lpx solid #999;
}


Unidades de medida

Las unidades de medida son comunes a varios atributos como margin, width, padding por mencionar algunos.

Toda medida que no tenga asignada una unidad de medida será ignorada. Excepto que el número asignado sea 0 (cero). Las unidades de medida deben colocarse a continuación de un número sin espacios.

Unidades de medida absolutas


Unidades de medida relativas

Modelo de cajas

El CSS se basa en el diseño de cajas. Es decir, todo contenido que coloquemos dentro de una etiqueta estará dentro de un rectángulo.
Dicho sea de paso, en geometría, un cuadrado también es considerado un rectángulo.
Es fundamental entender el llamado Modelo de cajas y como se estructura una caja.

Las cajas tienen la estructura de varias cajas superpuestas. Entendiendo su estructura podremos entender qué efecto tendía su modificación.



Veamos los detalles:

Contenido: en esta caja, se ubica el texto, imagen, etc.

Padding: se trata del área que se encuentra a partir del limite del contenido hacia el exterior.

El padding tomará el color de fondo

Border: el borde es el contorno del padding. Puede tener color, grosor y diferentes opciones de estilo como, por ejemplo, línea como sólida, punteada y rayas.

Margin: es un área a partir del borde. Esta área siempre será transparente, no tendrá ningún tipo de color o relleno.

Los fondos que pueden ser de color, o bien, pueden ser una imagen. Entonces, el esquema completo de las cajas quedará como se muestra en la siguiente figura:


Por lo tanto, si tenemos una etiqueta que tiene un fondo de color y una imagen configurada mediante los atributos: background-color y background- image respectivamente.

Si la etiqueta tiene asignado un color y una imagen. La imagen se verá sobre el fondo. Si la imagen fuera más chica o tuviera partes transparentes se verá el color de fondo por detrás. En resumen:

En el padding: se verá la imagen y el color de fondo si han sido definidos.

En el margin: no se verá nada, es transparente. Se verá el color de fondo o imagen del padre de la etiqueta.

Cuestiones al “margen”

Algunas cuestiones del margin que debemos tener en cuenta.

La primera es con respecto al tamaño de una etiqueta. El tamaño de una etiqueta está dado por la suma del tamaño de sus propiedades:

padding, border y margin. Las propiedades width y height únicamente afectan el ancho y alto del contenido.

Entonces, por ejemplo, una etiqueta que tenga esta regla:

.dimensiones {
width: 300px;
height: 250px;
padding: 10px;
border: 5px;
margin: 15px;
}

Para obtener el ancho de la etiqueta, debemos sumar:

width:                                   300 px
padding izquierdo y derecho: 20 px (10 x 2)
border izquierdo y derecho:   10 px (5 x 2)
margin izquierdo y derecho:  30 px (15x 2)
Total:                                    360 px

Para obtener el alto de la etiqueta debemos sumar:

height:                                  250 px
padding izquierdo y derecho: 20 px (10 x 2)
border izquierdo y derecho:   10 px (5 x 2)
margin izquierdo y derecho:   30 px (15x 2)
Total:                                   310 px

código con “estilo”

A nuestra página de ejemplo, le agregaremos más texto y haremos algunos ajustes en el CSS para que quede estilizada.

Es posible agregar comentarios en los estilos dentro de los caracteres: /* y */

En las reglas para cada elemento, hay una breve explicación de los atributos utilizados. Se puede encontrar una referencia de todos los atributos en: http://www.w3schools.com/cssref/

Ejemplo: estilos_3.css:

* {
/* Define el máximo ancho de un elemento */
max-width:700;
}
body {
/* Determina el color del texto */
color:#333333;
max-width: 930px;
}

article {
/* Hace "flotar" el elemento, es decir acomoda un elemento de tal forma que el texto lo rodee */
float: right;
/* Determina el ancho de un elemento */
width: 620px; /* puedes modificar este tamaño y ver el resultado */
}

section {
/* Se define un tipo de línea en la parte inferior del elemento */
border-bottom:1px solid #eeeeee;
}

h1 {
/* define la fuente de texto. En caso que el navegador no soporta una fuente utilizara las siguientes
separadas por coma. Si la fuente tiene dos o más palabras,se lo debe poner entre comillas */
font-family:Georgia,serif;

/* Tamaño de la fuente */
font-size:36px;
color: #AA1111;
border-bottom: 1px dotted #AA1111;
/* Determina el interlineado del texto */
line-height: 50px;
/* Define el área más externa. El margen no tiene fondo es completamente transparente */
margin-top: 0px;
}

h3 {
font-family:Verdana; /*Geneva; ,sans-serif;*/
font-size:16px;
font-style:italic;
line-height: 12px;
}

h4 {
font-family: "Lucida Grande", Verdana,sans-serif;
font-size:15px;
}

p {
font-family:"Palatino Linotype","Book Antigua",Palatino,serif;
/* Define el tipo de alineación del texto*/
text-align: justify;
}

header {
margin-top: 0px;
height:100px;
1ine-height:80 %;
}

figure {
float: left;
/* Establece el grosor alrededor del contenido y hasta el borde si el elemento lo tuviera. El padding a
diferencia del margin tiene fondo y toma el color de fondo del contenido */
padding: 5px;
margin-top:10px;
margin-bottom:0px;
margin-left:0px;
margin-right:10px;
border: 1px solid #eeeeee;
}

figcaption {
font-family:Arial, Helvética,sans-serif;
font-size: 90%;
text-align: left;
}

footer {
font-family:Thaoma,sans-serif;
text-align:right ;
color:#DFDFDF;
padding-right: 20px;
/* Fondo de color del elemento */
background: #c0c0c0;
}

Puedes cambiar valores según se vayan presentado los formatos, texto, importancia del texto, acomodos de cajas, etc. lo que no debes de olvidar que puedes cambiar colores fuentes , tamaños, ... etc. en .css para no alterar el html principal

Del ejemplo13.html modificarlo con lo siguiente (es el fragmento del inicio)  y pasarlo como

 ejemplocss_p6.html

<!DOCTYPE html>
<html lang="es">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <meta name="”description”" content="”Ejemplo" de="" html5”="">
    <meta name="”keywords”" content="”CECATI" no.="" 89,="" celaya,="" guanajuato”="">
      <link rel="stylesheet" href="estilos_3.css">
    <title>Conociendo HTML5</title>
  </head>
<body>
................
.................
</body>
</html>

Resultado:






Ahora cambie los siguientes valores:


<figure>
        <!-- estos elementos hacen un comentario en html5 -->
        <!-- imagen a la que se hace referencia y una descripción --> <img
          src="images1/chapultepec.jpg" alt="Castillo de Chapultepec"
          width="487" height="365"> <figcaption>Esta es una fotografía
          del interior del castillo de Chapultepec</figcaption>
</figure>

Realiza comentarios sobre lo que has observado en este ultimo ejemplo de HTML Y CSS y enviar la evidencia des este ejercicio de html y css, con el nombre que les corresponden, enviar los al correo donde recibes tu enlace al curso, y menciona que es evidencia de html - css.

Nuevas etiquetas con viejos navegadores

Con respecto a las etiquetas semánticas, ¿qué ocurre con los navegadores antiguos que no las soportan? Porque hasta ahora todo suena muy lindo e incluso con mucho sentido, gracias a la semántica de las etiquetas HTML5, que tienen un propósito.
Pero así como existe todo lo bueno, también existe Internet Explorer 8 (en adelante, IE) y sus viejas versiones que son el dolor de cabeza de los desarrolladores Web, el ángel caído de los navegadores el obstáculo más eficiente para impedir la completa felicidad de los desarrolladores y de la humanidad.

Las etiquetas que la mayoría de los navegadores no conocen, al menos las representan y hay formas de indicarles que traten a etiquetas como header, article y cualquier otra etiqueta nueva que pudiera salir como lo hacen con un contenedor <div>. Pero, en las versiones anteriores a IE 9, no permiten este comportamiento.


Para mitigar este inconveniente, existe una solución que permite utilizar la nueva semántica y no tener que esperar hasta el año 2085 para poder utilizar la nueva semántica del CSS.

La solución se llama: HTML5 Shiv y consiste en un código JavaScript que habilita el uso de la nueva semántica en navegadores anteriores al IE 9.

Antes de agregar nuestros estilos en el <head>, deberemos añadir la siguiente línea:

<!--[if lt IE 9]>
<script
src="http://html5shim.googlecode.com/svn/trunk/html5. j s"><
/script>
<! [endif]-->

Este código cargará la solución para que se pueda desplegar la nueva semántica de CSS, únicamente si el navegador es anterior al IE9.

También, podrías bajar el archivo y guardarlo en el servidor donde se sirve tu sitio. Pero cargarlo directamente del sitio, garantiza tener siempre la última versión actualizada y desentenderse del tema.

Si el navegador es una versión anterior a IE9, este código se bajara y ejecutará para que la semántica de CSS funcione.

Resumen de esta sección

Presentación visual de una pagina WEB por secciones



Color y degradé CSS3

Efectos de translucidez y nuevos modelos de color

Una de las primeras propiedades CSS3 en popularizarse fue opacity (opacidad). Es común encontrar sitios que la aplican para generar translucidez, debido a que muchos navegadores comenzaron a implementarla hace varios años. Como sabemos, ese es el punto crítico de cualquier nueva tecnología web: que el programa navegador que utilizará el usuario sepa interpretarla.

Podemos agrupar las novedades de CSS3 referidas al manejo de colores en dos grandes áreas:

• Efectos de translucidez (tanto de textos como de colores de fondo de cajas) sin necesidad de imágenes PNG.

• Efectos de degradé, lineales o radiales, e incluso repetidos en franjas, sin utilizar imágenes.

A continuación veremos en detalle cómo utilizar cada una de estas técnicas.

Esta propiedad puede compatíbilizarse con Exploradores utilizando filtros propietarios de ese navegador, con dos sintaxis diferentes para distintas versiones de Explorer, de la siguiente manera:

#algo{
filter:alpha(opacity=50); /* Para versiones de Explorer anteriores a la 8 */
-ms-filter: "progid:DXImageTransform.Microsoft .
Alpha(Opacity=50)"; /* Para Explorer 8 */
opacity: 0.5;
}

El uso de opacity no es ideal para volver translúcidos los colores de fondo con textos dentro, pero sin embargo sigue siendo muy interesante para volver translúcidas imágenes de fondo que se superponen a otras, o para volver completamente invisible un elemento provisoriamente (y transformarlo interactivamente en visible más adelante).

En el caso de buscar colores de fondo o de texto que se vuelvan translúcidos, es más conveniente utilizar los nuevos modelos de color RGBa y HSLa. Tienen la ventaja de que no “contagian” la translucidez a sus elementos anidados dentro, solucionando el problema que describimos anteriormente.

Revisemos cómo se utilizan estos nuevos modelos de color que permiten aplicar translucidez.

El modelo RGBa

El modelo RGBa simplemente agrega un canal alpha (o nivel de translucidez) a un color RGB común.

Su sintaxis es:

rgba(255,255,255, 0.5);

Donde los 3 primeros valores son los de un color RGB tradicional (red, green y blue, o sea, cantidad de rojo, verde y azul), y el cuarto valor es la traslucidez, desde 0 (totalmente transparente) hasta 1 (sólido por completo). Podemos aplicarlo a cualquier propiedad CSS que necesite un color como parámetro, por ejemplo, background-color:

#caja{
background-color: rgba(255,255,255,0.5);
}

Ese fue el valor aplicado a la caja de texto que permite manera de volver translúcido su color blanco de fondo. A diferencia de opacity, la transparencia de color lograda con RGBa no tiene impacto sobre el texto y demás elementos y cajas anidados dentro del elemento cuyo color de fondo se volvió translúcido. Además, no solamente podemos aplicarle el modelo de color RGBa a colores de fondo, sino que también podemos utilizarlo como color de texto, para crear letras translúcidas.

Por ejemplo:

#texto{
color: rgba(255,255,255,0.5) ; }

Para tener una alternativa para aquellos navegadores que no entienden este modelo de color y para que estos no dejen sin ningún color al elemento al que le apliquemos un color RGBa, deberemos declarar un color alternativo en un modo de color antiguo: hexadecimal o RGB. Es fundamental que hagamos este agregado en primer lugar ya que el orden es clave como veremos en unas líneas:

#caja{
/* Fallback sólido, antes de lo que realmente queremos aplicar */
background-color:rgb(100,20,40);
/* Propiedad nueva, que algún navegador no podrá procesar */
background-color:rgba(100,20,40,0.5);
}

Ante todo, tanto para éste como para otros trucos solamente en Explorers, lo ideal es colocar este código en una hoja de estilos externa vinculada mediante comentarios condicionales (para que la lean solo los Explorers, y la ignoren el resto de navegadores).

<!--[if IE]>
<link rel="stylesheet"href="hoja-para-explorer.css"
<![endif]-->

Dentro de esa “hoja-para-explorer.css” que solo leerán los Explorers, colocaremos un filtro, pero como no existe un filtro especifico para colores translúcidos, nos valdremos de un truco ingenioso. Utilizáronlos el filtro para degrades, realizando un degradé que comience desde un color translúcido y que termine en ese mismo color translúcido:

.translucido {
background:transparent;
filter:progid:DXImageTransform.
Microsoft.gradient(startColorstr=#99000050,endColorstr=#99
000050);
/* mismo valor de inicio y fin /
zoom: 1;
}

Notemos varios puntos:

• Ante todo, al principio hemos aplicado el valor transparent al color de fondo. Esto es necesario ya que el Explorer ha leído previamente la hoja de estilos normal que leen todos los navegadores cuyo link, siempre debe ir antes del link entre comentarios condicionales, para que el Explorer sobre-escriba los valores que nos interesa modificarle.

Debido a esto, si habíamos aplicado un color sólido de fallback al Explorer por ahora el elemento destinatario le quedó pintado de ese color sólido. Y como vamos a aplicarle un color translúcido, es mejor asegurarnos de que estemos comenzando con un fondo limpio, transparente.

• El formato de color de inicio y fin no es el mismo que el de RGBa, sino que es el siguiente:

— AARRGGBB

Donde los dos primeros dígitos (AA) son los valores de Alpha (la translucidez). Sus valores pueden variar entre 00 (transparente) hasta FF (sólido). Los valores se expresan en hexadecimal, con dos dígitos, a diferencia de opacity, que iba de 0 a 1. Luego vienen dos dígitos hexadecimales para Red (RR), dos para Green (GG) y dos para Blue (BB). Por ejemplo, si el color a volver un 45% translúcido fuera FFCC00 el código quedaría:

99FFCC00

Si partimos de un color RGB, podemos usar un conversor para obtener el valor hexadecimal correspondiente

http://www.javascripter.net/faq/rgbtohex.htm

Y una vez que tenemos ese valor hexadecimal, podemos convertirlo a RGBa con un segundo conversor:

http://hex2rgba.devoth.com/

Por último, hemos aplicado zoom:1. Este valor es necesario para evitar problemas con los filtros en Explorer. Los Explorers permiten aplicar algunos filtros únicamente a elementos HTML según el criterio de que tengan definida una propiedad no estándar llamada “hasLayout”. Esa propiedad se define con un valor de “true” (verdadero) bajo circunstancias muy arbitrarias, por lo que es mejor prevenir y forzar a que hasLayout tenga un valor de “true”. Para eso pueden aplicarse distintos trucos que le colocan ese valor, siendo el más inofensivo el de zoom:1 (escalar al tamaño 100%, es decir, no modificar el tamaño original del elemento). A partir de esta declaración, Explorer procesará correctamente el filtro a cualquier elemento al que se nos ocurra aplicarlo.

Por último, hemos aplicado zoom:1. Este valor es necesario para evitar problemas con los filtros en Explorer. Los Explorers permiten aplicar algunos filtros únicamente a elementos HTML según el criterio de que tengan definida una propiedad no estándar llamada “hasLayout”. Esa propiedad se define con un valor de “true” (verdadero) bajo circunstancias muy arbitrarias, por lo que es mejor prevenir y forzar a que hasLayout tenga un valor de “true”. Para eso pueden aplicarse distintos trucos que le colocan ese valor, siendo el más inofensivo el de zoom:1 (escalar al tamaño 100%, es decir, no modificar el tamaño original del elemento). A partir de esta declaración, Explorer procesará correctamente el filtro a cualquier elemento al que se nos ocurra aplicarlo.

para mostrar lo anterior hagamos un cambio a estilos_3.css, al final de esta hoja de estilos, de esta forma:


p.fod {
background:rgba(139,00,139,0.5);
/* este color localizarlo en la pagina http://www.javascripter.net/faq/rgbtohex.htm */
}

Es una etiqueta usando clase (class), en ejemplocss_p6.html agreguemos esto:

<td valign="top"><p class="fod">En la Planta Baja encontrarás la Sala
                Siqueiros que exhibe los siguientes temas:</p> <br>
              </td>

El resultado es:

   si modificamos la transparencia a 0.25 

El modelo HSL

Este segundo modelo de color nuevo, si bien no es translúcido, lo incluimos porque tiene una variante que sí lo es y que veremos, a continuación. Forma sus tonos de una manera mucho más intuitiva para programadores que el modelo RGB a partir de tres datos: el tono, la saturación y el brillo. En inglés la sigla es HSL (Hue, Saturation,Lightnees )

#objeto{
color: hsl(360,100%,20%);
}

El resultado es similar al que podría lograrse con cualquier otro modelo de color sólido ya difundido como RGB o hexadecimal, por lo que no recomendamos su uso en circunstancias normales. Solo tiene sentido utilizarlo si se van a manipular los valores de cada parámetro mediante programación.

Los valores de tono se extraen del valor del ángulo seleccionado dentro del círculo cromático y van de 0 a 360 (0 rojo, 120 verde, 240 azul, 360 rojo):



Valores para HSL tomados de un ángulo del círculo cromático.

Los valores del segundo parámetro, la saturación, van desde 0 (gris,ausencia de color) hasta 100% (el color saturado al máximo).

Y el brillo va desde 0 (ausencia de luz) hasta 100% (blanco), lo cual logra una serie de tonos pastel entre medio.

Siendo los valores de estos dos últimos parámetros (saturación y brillo) variables entre 0 y 100%, son más sencillos de manejar interactivamente en aplicaciones web por programadores que el modelo hexadecimal o que el RGB. Tal como dijimos anteriormente, ese es el único escenario en el que valdría la pena utilizar este modelo de color.

Recordemos también que debemos colocar un color en un modelo antiguo (RGB por ejemplo) como primera opción, para el caso de los navegadores que no comprendan este nuevo modelo.

Si en el momento de codificar no disponemos de programas editores de color como el Photoshop, podemos utilizar un conversor para buscar un valor RGB similar al HSL elegido y usarlo como fallback:

https://serennu.com/colour/hsltorgb.php

El modelo HSLa

Al igual que RGBa para colores en RGB, HSLa aplica un canal de translucidez a un color expresado en el modelo HSL. Su sintaxis es:

Tono, saturación, brillo + Translucidez: HSLa

#objeto{
background: hsla(300,130%,65%, 0.5);
}

El resultado es idéntico al logrado con RGBa.

Al igual que HSL, solo conviene utilizarlo si el color va a ser manipulado mediante programación, de lo contrario, es mejor utilizar RGBa para que podamos compatibilizarlo fácilmente.

Degrades sin imágenes con CSS3

Ahora que conocemos los nuevos modelos de color de CSS3, sigamos profundizando en las novedades relativas al color, pero esta vez en base a la combinación de dos o más colores mediante transiciones paulatinas entre ellos: los degrades, también llamados degradados o gradiente:.

Su aplicación es muy difundida en botones, fondos de cajas y de página, y muchos otros elementos de una página.

Para crear degrades, hasta ahora necesitábamos aplicar una imagen repetida en mosaico, la típica “franja" con repeat x (o en sentido vertical con repeat y):

La sintaxis necesaria para crear un degradé es un tanto compleja, e incluso ha cambiado varias veces, por lo cual nuestra propuesta es utilizar en primer lugar alguno de los tantos generadores de degrades

visuales, como por ejemplo el de Colorzilla:

http://www.colorzilla.com/gradient-editor/

Luego de generar un degradé básico, ajustaremos y corregiremos manualmente los detalles que no hayan quedado a nuestro gusto. Desde ya que para hacer esos ajustes, necesitaremos conocer la sintaxis de las propiedades CSS implicadas, y por eso haremos una completa referencia a continuación.

Para clasificar y ordenar nuestro trabajo, diremos que existen cuatro tipos de degrades:

1. Lineal

2. Lineal repetido,

3. Radial, y

4. Radial repetido.


1. Degradé lineal

Antes de comenzar, notemos que la propiedad que se utiliza para aplicar un degradé no es background-color, sino que es background-image, por lo que aún nos queda libre la propiedad background-color para aplicar un color liso como “plan B”, para navegadores que no soporten esta funcionalidad.

La sintaxis mínima de la propiedad background-image que genera un degradé linear elemental es:

#caja{
background-image: linear-gradient(white, black);
}

Cuando no especificamos más que los dos colores, el degradado comenzará en el lado superior (top) y descenderá hasla el fondo (bottom).

Los prefijos existentes

-khtml-           Konqueror, navegador para Linux
-moz-             Mozilla Firefox
-ms-               Microsoft Internet Explorer
-o-                  Opera
-webkit-         Webkit, es decir, Google Chrome y Safari

La forma de utilizarlos es muy simple, por ejemplo:


background-image: -moz-linear-gradient(white, black);

Esto solamente será ejecutado en versiones de Firefox que no soporten la versión estándar de linear-gradient.

Además, al igual que en los modos nuevos de color, podemos definir un fallback para casos en que el navegador no entienda este degradé, por lo que el código de un degradé compatibilizado terminará siendo similar al siguiente:

#caja{
background-color: #444444; /* recordemos que background-color no era utilizado por los degrades */
background-image: url(foto/fallback.png);
/* imagen en mosaico, recordar definir repetición */
/* Firefox 3.6+ */
background .image: -moz-linear - gradient(white,black);
/* Safari 5.1+, Chrome 10+ */
background-image: -webkit-linear-gradient(white, black);
/* Opera 11.10+ /
background-image: -o-linear-gradient(white, black);
/* Sintaxis sin prefijjos, para navegadores nuevos */
background-image: linear-gradient(white, black);
}

Podemos evitar el escribir manualmente todos estos prefijos y generarlos automáticamente con herramientas online como Prefixr. A partir de su uso, simplemente pegamos el código en su sintaxis sin prefijos y nos devuelve el código repetido tantas veces como sea necesario, cada una con su respectivo prefijo.

Otros detalles que debemos considerar, más allá de fallbacks y prefijos, es que algunas versiones de los navegadores con motor Webkil (Safari y Chrome) necesitan otra sintaxis, y los Explorer utilizan el mismo filtro que ya hemos utilizado para crear colores RGBa, con lo cual la sintaxis completa de un degradé compatible con todos los navegadores sería similar a la que sigue:

#caja{
background-color: #444444;
background-image: url(foto/fallback.png);
background-image: -webkit-gradient(linear, left top, left
bottom, from(#444444), to(#999999)); /* sintaxis Webkit */
background-image: -webkit-linear-gradient(top, #444444,#999999);
background-image: -moz-linear-gradient(top, #444444,#999999);
background-image: -ms-linear-gradient(top, #444444,#999999);
background-image: -o-linear-gradient(top, #444444,#999999);
background-image: linear-gradient(top, #444444, #999999);
filter:
progid; DXImageTransform.Microsoft.gradient(startColorStr= '#444444', EndColorStr='#999999'); /* Explorer 6 a 9 */
}

Dirección del degradé

Releamos el código del ejemplo anterior:

background-image: linear-gradient (top, #444444, #999999);

Esta sintaxis que aún soportan muchas versiones de navegadores populares, todavía podíamos especificar la dirección en la que se realizaría el cambio de un color hacia otro simplemente indicando un punto de inicio (en este ejemplo, la palabra “top”).

Desde que en 2012 se decidió que la palabra a colocar al inicio de linear-gradient debería llevar antepuesta la palabra “to”, y por lo tanto, indica el lugar de llegada, hacia donde terminará el degradé, y no su punto de inicio, como antes. Por ejemplo, si antes decíamos:

background-image: linear-gradient (top, #444444, #999999);

Ahora deberíamos decir:

background-image: linear-gradient (to bottom, #444444, #999999) ;

Se trata de un cambio bastante molesto, si queremos evitarlo, la mejor forma es no utilizar nunca las palabras clave (top, bottom, left o right) sino por el contrario, definir en grados la dirección o punto de finalización de nuestro degradé, de la siguiente manera:

background-image: linear-gradient (0deg, #444444, #999999)) ;  0deg, significa 0 (cero) Grados  que es donde parte el efecto.


Veamos un ejemplo para entenderlo mejor (de ahora en más, simplificaremos sin poner los prefijos ni fallbacks), en este ejemplo no indicamos el orden, se toma de arriba a bajo, agrege esto al final de estilos_3.css:


#grad1 {
  height: 200px;
  background-color: red; /* Para navegdores que no soportan los gradientes */
  background-image: linear-gradient(red, yellow);
}

si ya se, que me dirían que es esta exagerado pero si, es para que uds. lo modifiquen y en ejemplocss_p6.html se mofique de esta manera:

 <td valign="top" id="grad1">Cuenta con un acervo especializado en
                historia de México, arte, numismática, pintura,
                indumentaria, mobiliario y arquitectura. Horario: Lunes
                a viernes, de 9:00 a 16:30 horas. Ubicación: Edificio anexo
                al Castillo de Chapultepec. Está abierta a todo el
                público para consulta en sala.<br>
              </td>

y el resultado es:



cambien el color, y lo envian como evidencia, de captura de pantalla con el nombre, degradado1.png

ahora modifiquemos el codigo a lo siguiente:

#grad1 {
  height: 200px;
  background-color: red; /* Para navegadores que no soportan gradientes*/
  background-image: linear-gradient(red 15%, yellow 85%);
}


revisa el resultado, y realiza tu comentario.

red 15%, yellow 85%, esto indica que de color rojo sera 15% y amarillo de 85%, bueno no necesariamente debe ser rojo.

Veamos un ejemplo de esto con más de dos colores. Hemos colocado cada color en una línea para mayor legibilidad. Además, agregamos la sintaxis específica para Webkit al final, pues bien estas transiciones de llaman stop, entonces agreguemos esto al final de estilos_3.css:

#grad2 {
background-image: linear-gradient(
90deg,
rgb(14,115,115) 50%,
rgb(167,163,212) 90%,
rgb(121,66,204) 95%
) ;
/* Sintaxis de stops para Webkit */
background-image: -webkit-linear-gradient(
linear, 0% 0%, 100% 0%,
color-stop(0.5, rgb (14,115,115)),
color-stop(0.9, rgb(167,163,212)),
color-stop(0.95, rgb(121,66,204))
);
}

y en ejemplocss_p6.html

<td valign="top" id="grad2">¿Cómo llegar?<br>
              </td>
              <td valign="top">Puede llegarse por el Paseo de la
                Reforma, el Circuito Interior o la Avenida
                Constituyentes. Las estaciones de metro más cercanas son
                Auditorio y Chapultepec. Esta última cuenta con un
                acceso directo al bosque.<br>
              </td>



el resultado es en Google Chrome                                en FireFox                                       en Brave

     

en Opera                                                                               en Seamonkey             

    

Vemos como es el efecto en los diversos navegadores, usando la etiqueta Webkit,

Para obtener lo que necesito es necesario probar con diferentes navegadores y detectar lo necesario para que se pueda apreciar los que estoy mostrando.

En este ejemplo cómo el primer color se ha mantenido intacto hasta el 50% que indica en su stop. Luego, el segundo tramo del degradé ha sido la transición entre ese primer color y el segundo, entre el 50% y el 90% de la longitud de la caja;. Y por último, el cambio del segundo al tercer color tuvo lugar entre el 90% y el 95%, quedando último color sólido entre el 95% y el final.

Un detalle extra antes de finalizar: se pueden realizar degrades desde un color hasta una transparencia total, pero cuidemos de no utilizar la palabra “transparent" para ello, ya que esto equivale a colocar un cero en cada parámetro de un color RGBa. Por ejemplo, equivale a rgba(0,0,0,0), y eso, siendo estrictos, es un color "negro transparente" porque el cero en cada canal RGB equivale a negro. Por lo tanto, un degradé desde un color claro, supongamos blanco, hacia transparente, usando la palabra transparent, pasará por una escala de grises, hasta llegar a la transparencia y ésta será muy notoria, sobre todo por estar sobre un color claro de fondo, como en este ejemplo:

translucido{
width: 300px;
helght : 120px;
background-color: #FFCC00;
background-image: linear-gradient(90deg,rgb(255,255,255), transparent);
}

Notemos como del naranja se pasa a un “color oscuro”, y luego cada vez más claro hasta volverse transparente.

La solución es utilizar como punto de llegada del degradé el mismo color del que partimos, por ejemplo, blanco, pero dentro de una sintaxis RGBa que llegue al valor “0” de alpha para ese color en particular:

#translucido{
width: 300px;
height: 120px;
background-color: #FFCC00;
background-image: linear-gradient(90deg,rgb(255,255,255), rgba(255,255,255,0) );
}

De esta manera, el degradé será desde blanco rgb(255,255,255) hasta blanco transparente rgba(255,255,255,0) que, en este caso, nos deja ver el color claro de fondo aplicado a la figura en la zona derecha pero evitando esos grises que aparecían al usar la palabra "transparent”, como se puede aprecier en elcodigo es un efecto usando un relleno color naranja y despues colocar un gradiente de color blanco para dar la aparencia de degradacion del color.

Añada este codigo a estilos_3.css, y en ejemplocss_p6.html agrege esto en la siguiente seccion del codigo:

<td valign="top" id="grad2">¿Cómo llegar?<br>
              </td>
              <td valign="top" id="translucido">Puede llegarse por el Paseo de la
                Reforma, el Circuito Interior o la Avenida
                Constituyentes. Las estaciones de metro más cercanas son
                Auditorio y Chapultepec. Esta última cuenta con un
                acceso directo al bosque.<br>
              </td>

Resultado de esto:

Para Chrome:                                                             Para FireFox:                                                              Para Seamonkey:


          

Degradé lineal repetido

Una variante de los degrades lineales es que el degradé se repita, a la manera de un mosaico, como acostumbramos hacer con imágenes. Para eso, se usa la propiedad repeating-linear-gradient:

background-image: repeating-linear-gradient(origen -opcional, lista de colores);

Al igual que en el degradé lineal no repetido, el punto de origen puede ser una posición (left, top, etc.) o un ángulo, y puede omitirse. Pero lo importante en el degradé lineal repetido es determinar el ancho cada “franja", lo que a su vez indica cuántas veces se repite. Para ello usaremos un porcentaje, al igual que hacíamos con los stops, con la particularidad de que ese porcentaje será el del último color, que señalará el punto de finalización de cada franja, y por lo tanto "espesor” de la misma.

Ejemplo de repetición lineal:

#caja{
background: repeating-linear-gradient(#FFF, #3CF 20%);
}

Ese 20% al lado del último color de la lista indica que ese color finalizará al 20% de la longitud de la caja, y a la vez, que allí finalizará un degradé completo, comenzando a repetirse a partir de ese punto tantas veces como quepan en el 100% en este caso, ocupa 20% cada repetición, por lo que se obtendrán 5 repeticiones:


Notemos que cada 20% se percibe claramente el “empalme” entre el final de una franja y el comienzo de la siguiente; si queremos evitarlo, podemos realizar un degradé que tenga al menos 3 colores: uno inicial, uno intermedio, y luego volver al mismo color inicial, para que al empalmarse no se note la unión. Sería así:

#caja{
background: repeating-linear-gradient(#FFF, #000, #FFF 25%) ;
}



Por el contrario, si queremos lograr franjas totalmente “macizas", sin transiciones, mediante un stop podemos hacer coincidir el punto de fin de un color con el punto de inicio del color siguiente:

#caja{
background: repeating-linear-gradient(45deg, green, green 20px, gray 20px, gray 40px);
}

Además del ángulo de 45 grados para indicar una dirección en diagonal, notemos que el valor de 40px al lado del color final indica el espesor de la franja (40px), mientras que se logró mantener cada color sn cambios de tono indicando el comienzo (green, en el punto inicial de la franja) y luego un segundo color... green también, a los 20px. Hasta allí, tenemos una franja de un color liso hasta el mismo color liso. Luego se indica que el siguiente color (gray) comience en el exacto punto en que terminó el anterior (20px) y que haga un degradé hacia el mismo color gray, pero ubicado en el punto 40px (que coincide con el final de la franja). A partir de allí, se repetirán franjas de 40px de espesor, 20 grises, 20 verdes.

Agreganos este codigo a estilos_3.css


#diagonal1{
color: #ffffff; /* modificamos el color del texto para que se vea notorio*/
background: repeating-linear-gradient(45deg, green, green 20px, gray 20px, gray 40px);
}

y esto a ejemploscss_p6.html

<td valign="top" id="diagonal1">En la Planta Alta:<br>
              </td>

Resultado:



Degradé radial

Otro tipo de degrades es el radial (expandiéndose circularmente, o de forma de elipse). Un generador online para hacerlos fácilmente es el de Westciv, tambien encontramos otros ejemplos para crear gradientes lineales, 

http://westciv.com/tools/radialgradients/index.html

El esquema de la sintaxis completa de un degradé radial es:

background: radial-gradient(parámetros);

Aquí los parámetros posibles son:

1) Punto central de inicio del primer color

2) Forma: circle | ellipse y Tamaño: closest-side | closest-corner | farthest-side | farthest-corner

2b) Ancho y alto

3) Lista de colores y sus stops, si los hubiera

Describiremos a continuación los posibles valores de cada uno de los parámetros.

1) Punto central del degradé: a diferencia del degradé lineal, donde teníamos que definir una dirección, un sentido para la transición entre dos colores, aquí lo que debemos definir es el centro desde el cual omenzará el primero de los colores. Al tratarse de un punto en el plano, serán necesarios dos valores: una coordenada en el eje X y una en el eje Y.

Por ejemplo:

background: radial-gradient(100px 50px, [etc...]);

Eso equivale a indicar que a 100 px del lado izquierdo y 50 del lado superior estará el punto central donde el primer color estará a su 100% de intensidad.

En el siguiente ejemplo, se toman los tamaños dados en px pixeles

individual6.html:

<!DOCTYPE html>
<html>
<head>
<style>
#grad1 {
  height: 150px;
  width: 200px;
  background-color: red; /* para navegadores que no soportan gradientes */
  background-image: radial-gradient(red, yellow, green);
}
</style>
</head>
<body>

<h1>Gradiente Radial  Paradas de color espaciadas uniformemente</h1>

<div id="grad1"></div>

</body>
</html>

el resultado es:


Para establecer colores espaciados

individual7.html:


<!DOCTYPE html>
<html>
<head>
<style>
#grad1 {
  height: 150px;
  width: 200px;
  background-color: red; /* para navegadores que no soportan gradientes */
  background-image: radial-gradient(red 5%, yellow 15%, green 60%);
}
</style>
</head>
<body>

<h1>Gradiente Radial - Paradas de color diferentemente espaciadas</h1>

<div id="grad1"></div>

</body>
</html>


Formas del degradado.

Siguiendo con los parámetros posibles, el segundo parámetro es doble, define dos cosas a la vez: la forma y el tamaño de la transición circular entre los dos colores. La forma tiene solo dos valores posibles:

circle y ellipse, y el valor por omisión es ellipse.

Es decir, que si omitimos el parámetro de la forma, se generará un degradé con forma de elipse, a excepción de que la caja donde lo aplicamos tenga forma exactamente cuadrada, en cuyo caso se generará un círculo de todos modos.


individual8.html:

<!DOCTYPE html>
<html>
<head>
<style>
#grad1 {
  height: 150px;
  width: 200px;
  background-color: red; /* Para navegadores que no soportan gradientes */
  background-image: radial-gradient(red, yellow, green);
}

#grad2 {
  height: 150px;
  width: 200px;
  background-color: red; /* Para navegadores que no soportan gradientes */
  background-image: radial-gradient(circle, red, yellow, green);
}
</style>
</head>
<body>

<h1>Degradado radial: formas</h1>

<h2>Elipse (esto es el valor predeterminado):</h2>
<div id="grad1"></div>

<h2><strong>Circulo:</strong></h2>
<div id="grad2"></div>

</body>
</html>

Resultado:

En cuanto al tamaño, existen dos posibilidades: definir un tamaño con una medida exacta (lo detallaremos mas adelante), o utilizar una palabra clave.

Las palabras que indican el tamaño son las siguientes, con su significado:

closest-side          La transición será corta y completa dentro de la figura, desde el punto inicial o centro del degrade hasta el lodo mas cercano a el.

farthest-side        La transición llegará hasta el lado más alejado del punto inicial o centro del degradé.

closest-corner      La transición irá hasta la esquina más cercana al punto inicial del degradé.

farthest-corner   La transición irá hasta la esquina más alejada del punto inicial, quedando el segundo color fuera de la caja.


individual9.html

<!DOCTYPE html>
<html>
<head>
<style>
#grad1 {
  height: 150px;
  width: 150px;
  background-color: red; /* Para navegadores que no soportan gradientes*/
  background-image: radial-gradient(closest-side at 60% 55%, red, yellow, black);
}

#grad2 {
  height: 150px;
  width: 150px;
  background-color: red; /* Para navegadores que no soportan gradientes */
  background-image: radial-gradient(farthest-side at 60% 55%, red, yellow, black);
}

#grad3 {
  height: 150px;
  width: 150px;
  background-color: red; /* Para navegadores que no soportan gradientes*/
  background-image: radial-gradient(closest-corner at 60% 55%, red, yellow, black);
}

#grad4 {
  height: 150px;
  width: 150px;
  background-color: red; /* Para navegadores que no soportan gradientes */
  background-image: radial-gradient(farthest-corner at 60% 55%, red, yellow, black);
}
</style>
</head>
<body>

<h1>Degradados radiales: palabras clave de diferentes tamaños</h1>

<h2>closest-side:</h2>
<div id="grad1"></div>

<h2>farthest-side:</h2>
<div id="grad2"></div>

<h2>closest-corner:</h2>
<div id="grad3"></div>

<h2>farthest-corner (default):</h2>
<div id="grad4"></div>

</body>
</html>




Degradé radial repetido

Al igual que el lineal, el degradé radial también puede repetirse en franjas; la propiedad es repeating-radial-gradient. Con el mismo criterio que en el linear repetido, el último valor de porcentaje o ancho en pixeles (colocado en el último color de la lista) será el que defina el espesor del degradé completo a repetir.

individual10.html

<!DOCTYPE html>
<html>
<head>
<style>
#grad1 {
  height: 150px;
  width: 200px;
  background-color: red; /* Para navegadores que no soportan gradientes */
  background-image: repeating-radial-gradient(red, yellow 10%, green 15%);
}
</style>
</head>
<body>

<h1>Gradiente Radial repetido</h1>

<div id="grad1"></div>

</body>
</html>



Y con esto, hemos completado nuestro recorrido por las novedades relativas al color de CSS3: la principal, su modelo de color RGBa que podemos aplicar a fondos y tipografías, y los degrades, que aun con sus sintaxis “cambiantes”, nos permiten ahorrar imágenes y hacer páginas mucho más livianas.

Decorando con bordes, sombras y fondos

Efectos visuales simplificados

CSS3 facilita enormemente la creación de efectos decorativos típicos, haciendo que sea el propio navegador de los usuarios el que produzca el efecto, evitando la necesidad de descargarle imágenes o incluso scripts, como era preciso hacer hasta ahora para lograr similares resultados. En consecuencia, CSS3 ahorra a nuestros usuarios miles de bytes de descarga, volviendo nuestras páginas mucho más livianas y rápidas, y además nos simplifica la creación y el mantenimiento de numerosos efectos decorativos. Estas son razones más que suficientes para comenzar a aplicarle CSS3 ya mismo a nuestros sitios.

Podemos clasificar los tipos de efectos decorativos en los siguientes grupos:

• Efectos de bordes redondeados en cajas.
• Bordes de cajas rellenados con imágenes decorativas.
• Generación de sombras en cajas y en tipografías; y creación de efectos 3D y de iluminación, logrados a partir de múltiples sombras combinadas.
• Uso de imágenes de fondo múltiples en un mismo elemento HTML, y otras propiedades nuevas relativas a fondos de caja.

Bordes redondeados

Un efecto muy difundido para quebrar la rigidez rectangular de las cajas HTML (y especialmente de botones de navegación), es el de crearles bordes redondeados; pero hasta ahora, para crear bordes redondeados debíamos modificar el marcado HTML, agregando varios divs adicionales solo para sostener la imagen de una punta curva en cada esquina del elemento real al que queríamos redondear su borde... ¡Y eso por no mencionar la época en la que teníamos que hacer una tabla de tres filas y tres columnas solo para lograr el mismo efecto, acomodando ocho imágenes diferentes: una para cada una de las cuatro esquinas, y otras para los cuatro lados!

Gracias a CSS3, es posible redondear los bordes de cualquier elemento HTML sin alterar para nada su marcado, simplemente indicando cuál de las esquinas queremos redondear, y en qué medida.

Desde ya que el elemento al que queremos redondear sus esquinas debe tener definido un borde, que es el que se redondeará (si el borde y el fondo son del mismo color, se percibirá que es la figura la que se ha redondeado).

La sintaxis mínima de esta nueva propiedad es:

#caja {
border-radius:3 5px;
}

Al especificarlo de esa manera, con un solo valor, ese valor se aplicará por igual a las cuatro esquinas del elemento en cuestión, tal como si la curvatura fuera el radio de un círculo circunscrito en cada una de las esquinas, radio de una longitud igual a la definida (35px en este ejemplo):


Desde ya que debemos incluir los prefijos para cpmpatibilizar estos bordes con navegadores antiguos, por loa que nuestro código va quedando como así:

#algo{
border:2px solid #09F;
-moz-border-radius: 35px; /* Firefox */
-webkit-border-radius: 35px; /* Safari, Chrome */
border-radius: 35px; /* estándar */

ejemplo con varios cuadros con esquinas redondeadas

individual11.html

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <meta name="”description”" content="”Ejemplo" de="" html5”="">
    <meta name="”keywords”" content="”CECATI" no.="" 89,="" celaya,=""
      guanajuato”="">
    <title>Bordes css3</title>
 
    <style>
#rcorners1 {
  border-radius: 25px;
  background: #73AD21;
  padding: 20px;
  width: 200px;
  height: 150px; 
}

#rcorners2 {
  border-radius: 25px;
  border: 2px solid #73AD21;
  padding: 20px;
  width: 200px;
  height: 150px; 
}

#rcorners3 {
  border-radius: 25px;
  background: url(images1/papel1.jpg);
  background-position: left top;
  background-repeat: repeat;
  padding: 20px;
  width: 200px;
  height: 150px; 
}
</style>
  
  </head>
  <body>
    <h1>La propiedad de radius </h1>
    <p>Esquinas redondeadas para un elemento con color de fondo particular:</p>
    <p id="rcorners1">Esquinas redondeadas ! </p>
    <p>Esquinas redondeadas con un elementos de borde:</p>
    <p id="rcorners2">Esquinas redondeadas !</p>
    <p>Esquinas redondeadas con un elementoscon una imagen :</p>
    <p id="rcorners3">Esquinas redondeadas ! </p>
  </body>
</html>



Bordes individuales (ovalados)

También podemos indicar la curvatura de una esquina individualmente, mediante dos sintaxis diferentes: la de definir por separado cada esquina con las propiedades border-top-left-radius, border-top-right-radius, bordei bottom-left-radius y border-bottom-right-radius; o utilizando una baim para separar la curvatura horizontal de la vertical. Veremos ambas sintaxis a continuación.

Eso nos permite definir esquinas de forma ovalada, al poder indicar dos valores por cada esquina (la distancia horizontal desde el borde izquierdo y la vertical desde el borde superior, hasta el centro de una elipse que servirá de guía para el redondeo), creando asi esquinas ovaladas. Por ejemplo:

#caja {
border-top-left-radius :100px 50px;
}

Lo que producirá el siguiente efecto:



Exactamente el mismo resultado puede lograrse mediante la sintaxis abreviada (border-radius) si separamos con una barra los valores horizontales de los verticales. Por ejemplo:

#caja {
border-radius:100px 000/ 50px 000;
}

Los valores ubicados antes de la barra, se refieren a la distancia en el eje X desde el borde izquierdo hasta el centro de la elipse que se ubicará en cada esquina (los cuatro valores siguen el orden top left, top right, bottom right y bottom left, por eso en este caso que solo queríamos redondear la esquina top left con un centro a 100px del 0 del eje X y a 50px del 0 del eje Y, hemos indicado un valor distinto a cero solo en el primero de los cuatro valores: el 100px antes de la barra es la distancia desde left al centro de la elipse).

Los valores colocados después de la barra, indican la distancia en el eje Y desde el borde superior hasta el centro de la elipse, para cada esquina respectivamente. Por eso, el 50px ubicado en primer lugar después de la barra es la distancia desde top hasta el centro de la elipse, todo referido a la esquina top-left ya que es el primero de los cuatro valores. El resultado es exactamente el mismo que en el ejemplo anterior, solo que con otra sintaxis.

Podemos lograr efectos interesantes combinando valores horizontales y verticales mediante esta sintaxis de barra, combinada con porcentajes, por ejemplo, Lados curvos:

#caja {
border-radius:30px / 50%;
}


En este caso, el primer valor -en pixeles- se aplica en sentido horizontal (el centro queda a 30 pixeles del lado izquierdo y derecho), mientras que los porcentajes se encargan de regular el redondeo en sentido vertical (el centro queda al 50% del alto de la figura en el eje Y).

Otro efecto que podemos lograr usando porcentajes es el de "anular" una esquina si aplicamos un valor de 100%, ya que el centro estará al 100% de left y al 100% de top, es decir, en la esquina inferior derecha, redondeando el borde de la esquina top-left de esta manera:


#caja {
border-radius:100% 20px 40px 20px;
}



En este otro caso, redondeará a mitades iguales entre las dos primeras esquinas, las superiores:


#caja {
border-radius:50% 50% 10px 10px / 90px 90px 10px 10px;
}



Notemos que el centro de la elipse de la primera esquina (top-left) queda definida por un 50% en el eje X (el centro horizontal) y 90px desde top (el primer valor luego de la barra), y algo similar sucede con la segunda esquina, top-right, que es definida por el segundo 50% antes de la barra y el segundo 90px después de la barra, siendo el primero la distancia en X y el otro la distancia en Y al centro de la elipse. El resto de esquinas (bottom-right y bottom-left) poseen un redondeo circular definido en pixeles de 10px de radio tanto horizontal como vertical, por eso es circular la forma de esas dos esquinas inferiores.

Revisemos esto llamándolo

 individual12.html

<!DOCTYPE html>
<html>
<head>
<style>
#rcorners1 {
  border-radius: 15px 50px 30px 5px;
  background: #73AD21;
  padding: 20px;
  width: 200px;
  height: 150px;
}

#rcorners2 {
  border-radius: 15px 50px 30px;
  background: #73AD21;
  padding: 20px;
  width: 200px;
  height: 150px;
}

#rcorners3 {
  border-radius: 15px 50px;
  background: #73AD21;
  padding: 20px;
  width: 200px;
  height: 150px;
}

#rcorners4 {
  border-radius: 15px;
  background: #73AD21;
  padding: 20px;
  width: 200px;
  height: 150px;
}
</style>
</head>
<body>

<h1>Propiedades del radius-border con esquinas redondeadas</h1>

<p>Cuatro valores - border-radius: 15px 50px 30px 5px:</p>
<p id="rcorners1"></p>

<p>Tres valores - border-radius: 15px 50px 30px:</p>
<p id="rcorners2"></p>

<p>Dos valores - border-radius: 15px 50px:</p>
<p id="rcorners3"></p>

<p>Un valor - border-radius: 15px:</p>
<p id="rcorners4"></p>

</body>
</html>



Ahora con estos ejemplos

 individual13.html

<!DOCTYPE html>
<html>
<head>
<style>
#rcorners1 {
  border-top-left-radius :100px 50px;
  background: #73AD21;
  padding: 20px;
  width: 100px;
  height: 75px;
}

#rcorners2 {
  border-radius:100px 000/ 50px 0 0 0; 
  background: #73AD21;
  padding: 20px;
  width: 100px;
  height: 75px;
}

#rcorners3 {
  border-radius:30px / 50%;
  background: #73AD21;
  padding: 20px;
  width: 100px;
  height: 75px;
}

#rcorners4 {
  border-radius:100% 20px 40px 20px;
  background: #73AD21;
  padding: 20px;
  width: 100px;
  height: 75px;
}
#corners5 {
  border-radius:50% 50% 10px 10px / 90px 90px 10px 10px;
  background: #73AD21;
  padding: 20px;
  width: 100px;
  height: 75px;
}

</style>
</head>
<body>

<h1>Propiedades del radius-border con esquinas redondeadas</h1>

<p>Ovalo - border-radius: border-top-left-radius :100px 50px;:</p>
<p id="rcorners1"></p>

<p>Segunda forma con barra - border-radius:100px 000/ 50px 0 0 0;</p>
<p id="rcorners2"></p>

<p>Otra forma como el anterior usando - border-radius:30px / 50%;</p>
<p id="rcorners3"></p>

<p>Efecto interesante 1- border-radius:100% 20px 40px 20px:</p>
<p id="rcorners4"></p>

<p>Efecto interesante 2 -:border-radius:50% 50% 10px 10px / 90px 90px 10px 10px </p>
<p id="corners5"></p>

</body>
</html>



Propiedad Descripción

border-radius

Una propiedad abreviada para configurar las cuatro propiedades de borde-*-*-radio

border-top-left-radius

Define la forma del borde de la esquina superior izquierda.

border-top-right-radius

Define la forma del borde de la esquina superior derecha.

border-bottom-right-radius


Define la forma del borde de la esquina inferior derecha.

border-bottom-left-radius

Define la forma del borde de la esquina inferior izquierda.


Imágenes de borde

Con la propiedad CSS border-image, puede configurar una imagen para usarla como borde alrededor de un elemento.

Para lograr aplicar con CSS un "marco" que envuelva al rectángulo de la imagen central, contamos con una nueva propiedad llamada "border-lmage", que se basa en la utilización de un sprite (una única imagen creada a partir de fragmentos pegados de otras imágenes). La propiedad border-image asigna cada fragmento del sprite a una esquina o lado de la caja a decorar.

La forma precisa en que se realiza esta asignación de las distintas partes de un sprite a cada zona de la caja es la clave de la sintaxis de la nueva propiedad border-image que aprenderemos a continuación.

En primer lugar, debemos indicar la URL de esa imagen sprite que se utilizará como imagen de borde.

Para aplicar border-image, debemos contar con un borde tradicional, al que deberemos definir su color, su estilo y su espesor:

#caja {
border-color: #000000;
border-style: solid;
border-width: 30px 12px 20px 40px;
}

Notemos que hasta aquí, en nuestro ejemplo tendremos un rectángulo con 4 bordes sólidos de distinto espesor

Es en el espesor de esos 4 lados definidos (30, 12, 20 y 40 pixeles en este caso) en donde aplicaremos las imágenes de borde (ese borde será la tela o "canvas" que pintaremos con partes de nuestra imagen sprite). Esos cuatro valores se declaran en el mismo orden que los cuatro valores de la vieja propiedad border: top, right, bottom y left. Notemos que en este ejemplo los hemos declarado con valores notoriamente distintos, justamente para que se aprecie qué valor genera cada borde.

Este borde tradicional también será el fallback, es decir, el borde que mostrarán navegadores muy antiguos, que no soporten border-image.

Entonces, retomando el hilo, la propiedad border-image requiere declarar primero una imagen de borde, luego un espesor de borde y un par de elementos más (algunos opcionales) que describiremos a continuación:

Un ejemplo definido con la sintaxis más completa que sea posible, podría ser el que sigue:

#caja {
border-image: url(sprite.png) 54 22 28 14 / 54 22 28
14 / 27 22 28 14 fill stretch round;
}

Podemos desglosar los cinco puntos anteriores de ese ejemplo:

1. url(sprite.png) es la ruta hacia el sprite

2. 54 22 28 14 son los tamaños de franja a aplicar de la imagen sprite, contando desde arriba, la derecha, abajo y la izquierda; si agregamos la palabra fill al final de los valores numéricos, indicaremos que la zona central de la imagen de borde será visible (por defecto, es transparente).

3. 54 22 28 14 son los espesores de los bordes (border-width) enel caso de que la figura tenga aplicado un border-width que no coincida con los tamaños de franja definidos en el punto anterior.

4. 27 22 28 14 indica si la franja se desplaza fuera de la caja.

5. stretch round indica que la parte de la imagen de borde superior e inferior se estirará (stretch) entre las esquinas derecha e izquierda, y que en cambio la zona de los laterales izquierdo y derecho repetirá en mosaico vertical redondeando (round) su tamaño si no coincidiera exactamente con la distancia entre la esquina superior y la inferior.

De los anteriores cinco puntos, podemos deducir que la propiedad border-image es en realidad una abreviatura de 5 propiedades distintas, esas propiedades (incluyendo sus valores por defecto) son:

Siguiendo con nuestra primera aproximación con la sintaxis, y como ya hemos visto en otras técnicas de CSS3, por compatibilidad con navegadores antiguos, nos conviene repetir la misma orden con distintos prefijos.

Para el siguiente ejemplo puedes usar cualquier imagen completa el que uso fue esta: el ejercicio es

 individual15.html

<!DOCTYPE html>
<html>
<head>
<style>
#borderimg1 {
  border: 30px solid transparent;
  padding: 15px;
  border-image: url(images1/bordes.jpeg) 50 round;
}

#borderimg2 {
  border: 30px solid transparent;
  padding: 15px;
  border-image: url(images1/bordes.jpeg) 20% round;
}

#borderimg3 {
  border: 30px solid transparent;
  padding: 15px;
  border-image: url(images1/bordes.jpeg) 30% round;
}
</style>
</head>
<body>

<h1>La propiedad de border-image</h1>

<p id="borderimg1">border-image: url(images1/bordes.jpeg) 50 round;</p>
<p id="borderimg2">border-image: url(images1/bordes.jpeg) 20% round;</p>
<p id="borderimg3">border-image: url(images1/bordes.jpeg) 30% round;</p>

<p><strong>Nota:</strong> Internet Explorer 10, y recientes versiones no soportan border-image.</p>

</body>
</html>

Resultado:

si queremos agregar una imagen de fondo, descargamos la imagen de preferencia o  la que sea necesaria en mi caso use:

el código es el siguiente, puedes observar  en donde se modifico :

<!DOCTYPE html>
<html>
<head>
<style>
#borderimg1 {
  border: 30px solid transparent;
  padding: 15px;
  border-image: url(images1/bordes.jpeg) 50 round;
  background: url(images1/papel2.jpg);
}

#borderimg2 {
  border: 30px solid transparent;
  padding: 15px;
  border-image: url(images1/bordes.jpeg) 20% round;
  background: url(images1/papel2.jpg);
}

#borderimg3 {
  border: 30px solid transparent;
  padding: 15px;
  border-image: url(images1/bordes.jpeg) 30% round;
  background: url(images1/papel2.jpg);
}
</style>
</head>
<body>

<h1>La propiedad de border-image</h1>

<p id="borderimg1">border-image: url(images1/bordes.jpeg) 50 round;</p>
<p id="borderimg2">border-image: url(images1/bordes.jpeg) 20% round;</p>
<p id="borderimg3">border-image: url(images1/bordes.jpeg) 30% round;</p>

<p><strong>Nota:</strong> Internet Explorer 10, y recientes versiones no soportan border-image.</p>

</body>
</html>

Resultado:



otro ejemplo

 individual16.html

<!DOCTYPE html>
<html>
<head>
<style>
#borderimg {
  border: 10px solid transparent;
  padding: 15px;
  border-image: url(images1/bordes.jpeg) 30 stretch;
}
</style>
</head>
<body>

<h1>La propiedad border-image</h1>

<p>Aqui, la mitad de la seccion esta stretch para crear el borde:</p>
<p id="borderimg">border-image: url(images1/bordes.jpeg) 30 stretch;</p>

<p>Esta es la imagen original:</p><img src="images1/bordes.jpeg">
<p><strong>Nota:</strong> En Internet Explorer 10, y versiones recientes, no soportan la propiedad border-image.</p>

</body>
</html>

Resultado:


prueba cambiando el valor de strech, border y padding, realiza comentarios al respecto

Regulando las repeticiones a los lados

La propiedad de repetición de fondo establece si y cómo se repetirá una imagen de fondo o borde.

De forma predeterminada, una imagen de fondo se repite tanto vertical como horizontalmente.

Consejo: La imagen de fondo se coloca según la propiedad de posición de fondo. Si no se especifica ninguna posición de fondo, la imagen siempre se coloca en la esquina superior izquierda del elemento.

descarguen una imagen de un tablero de ajedrez (o algo que uds. les agrade), que usaremos para este ejemplo, y guardarlo en el directorio images1, revisemos el siguiente código individual17.html :

<!DOCTYPE html>
<html>
<head>
<style>
#borderimg_{
border-width: 56px 56px 56px 56px;
border-style: solid;
border-color:#DCF99D;
border-image: url(images1/ajedrez.jpeg);
/* no indico el repeat solo estan las esquinas */
}

#borderimg_r{
border-width: 56px 56px 56px 56px;
border-style: solid;
border-color:#DCF99D;
border-image: url(images1/ajedrez.jpeg) 56 56 56 56 repeat;
/* debo de indicar los bordres para que se repita en esros border*/
}

</style>
</head>
<body>

<h3>La propiedad border-image en cada esquina</h3>
<p id="borderimg_">Imagen en borde en cada esquina</p>
<h3>La propiedad border-image en cada esquina con la imagen principal al dentro del borde</h3>
<p id="borderimg_"><img src="images1/ajedrez.jpeg"></p>

<h3>La propiedad border-image repeat</h3>
<p id="borderimg_r">border-image</p>
<h3>La propiedad border-image-repeat en cada esquina con la imagen principal al dentro del borde</h3>
<p id="borderimg_r"><img src="images1/ajedrez.jpeg"></p>


<p>Esta es la imagen original:</p><img src="images1/ajedrez.jpeg">
<p><strong>Nota:</strong> En Internet Explorer 10, y versiones recientes, no soportan la propiedad border-image.</p>

</body>
</html>

Resultado:




si deseas la imagen original que se vea mas pequeña modifica los atributos de esta imagen en altura y ancho.

independientemente que se pueda establecer en <body> la propiedad de background, se puede hacer de esta forma

 individual18.html:

<!DOCTYPE html>
<html>
<head>
<style>
body {
  background-image: url(images1/papel2.jpg);
  background-repeat: repeat-y;
}
</style>
</head>
<body>

<h1>El fondo se repite propiamente en vertical</h1>

</body>
</html>

background-repeat: repeat-y; esto indica que sera en el eje y, eje vertical:



el mismo ejemplo pero en forma horizontal:

<!DOCTYPE html>
<html>
<head>
<style>
body {
  background-image: url(images1/papel2.jpg);
  background-repeat: repeat-x;
}
</style>
</head>
<body>

<h1>El fondo se repite propiamente en horizontal</h1>

</body>
</html>

Resultado:




Otro detalle de sintaxis es que los valores numéricos que indican la distancia desde los bordes pueden ser los 4 diferentes, o declarar solo 2 (se aplicará el primero con idéntico valor arriba y abajo, y el segundo valor a izquierda y derecha), o declarar solo 1 (se aplicará a los 4 lados por igual).

Algunos ejemplos:

1. Cuatro valores (top, right, bottom y left):

border-image: url(sprite.png) 12 24 14 18 repeat stretch;

2. Dos valores (el primero top y bottom, el segundo right y left):

border-image: url(sprite.png) 15 30 repeat stretch;

3. Un valor (el mismo a los cuatro lados):

border-image: url(sprite.png) 33 repeat stretch;

Efectos de sombra

Con CSS puedes agregar sombras al texto y a los elementos. Aprenderemos sobre las siguientes propiedades:

text-shadow

box-shadow

Sombra de texto

La propiedad text-shadow de CSS aplica sombra al texto.

En su uso más simple, solo especificas la sombra horizontal (2px) y la sombra vertical (2px),

 individual19.html:

<!DOCTYPE html>
<html>
<head>
<style>
h1 {
  text-shadow: 2px 2px;
}
h2 {
text-shadow: 3px 3px;
}
h3 {

text-shadow: 4px 4px;
}
</style>
</head>
<body>

<h1>Efecto de sombra de texto 2px</h1>

<h2>Efecto de sombra de texto 3px</h2>

<h3>Efecto de sombra de texto 4px</h3>
</body>
</html>


text-shadow: 4px 4px; el 4px es la cantidad de desplazamiento horizontal y vertical de la sombra con respecto al texto, después de este ejemplo sugerimos usar valores diferentes para observar los que sucede.

Resultado:



Añadimos un color a la sombra

 individual20.html :

<!DOCTYPE html>
<html>
<head>
<style>
h1 {
  text-shadow: 2px 2px red;
}
</style>
</head>
<body>

<h1>Efecto de sombra con color </h1>

</body>
</html>

Resultado:


Veamos este es muy interesante individual21.html :


<!DOCTYPE html>
<html>
<head>
<style>
h1 {
  text-shadow: 20px 20px 8px #009900;
}
</style>
</head>
<body>

<h1>Efecto de sombra con otro aspecto con color </h1>

</body>
</html>

Resultado, individual21.html :



modifiquen el parámetro 5px, y vean lo que sucede

Ahora con 2 y 3 sombras individual22.html :

<!DOCTYPE html>
<html>
<head>
<style>
h1 {
  text-shadow: 2px 2px #fff,
  3px 3px #666;
}
h2
{
text-shadow: 2px 5px 1px #999,
10px 15px 1px #000,
-5px 10px 1px #333;
}

</style>
</head>
<body>

<h1>Efecto de sombra con otro aspecto de doble sombra </h1>
<h2> Efecto de sombra de 3 </h2>
</body>
</html>

Resultado:



text-shadow: 2px 5px 1px #999,   
10px 15px 1px #000,   
-5px 10px 1px #333;

primer valor es el desplazamiento horizontal (+ ó -), segundo el vertical (+ ó -), el tercer valor es el grosor de la sombra y el ultimo valor es el color.

si se desea con efecto de neon usa esto: text-shadow: 0 0 3px #FF0000; se sugiere hacer un ejemplo cada quien para que vean el resultado.

este otro es muy interesante :

text-shadow: 0 0 3px #FF0000, 0 0 5px #0000FF;

que efecto sera ?

este otro que sera ?

 color: white;
  text-shadow: 1px 1px 2px black, 0 0 25px blue, 0 0 5px darkblue;

por ultimo :

color: coral;
  text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;

Otro efecto muy interesante es el siguiente

 individual23.html:

<!DOCTYPE html>
<html>
<head>
<style>
div.test {
  white-space: nowrap;
  width: 200px;
  overflow: hidden;
  border: 1px solid #000000;
}

div.test:hover {
  overflow: visible;
}
</style>
</head>
<body>

<p>Pase el cursor sobre los dos divs siguientes para ver el texto completo.</p>
<div class="test" style="text-overflow:ellipsis;">Este es un texto largo que no cabe en el cuadro.</div>
<br>
<div class="test" style="text-overflow:clip;">Este es un texto largo que no cabe en el cuadro.</div>

</body>
</html>

La propiedad white-space de CSS, determina cómo se maneja el espacio en blanco dentro de un elemento. Para hacer que las palabras se dividan en sí mismas, usa overflow-wrap (en-US), word-break (en-US), o hyphens en su lugar.

Valores

normal

Secuencias de espacios en blanco son reducidas a un solo espacio. Saltos de linea en el origen son tratados como un espacio en blanco. Agregar saltos de linea necesarios para llenar el contenedor.


nowrap

Reduce espacios en blanco igual que el modo normal, pero suprime saltos de linea del origen.


pre

Secuencias de espacios son preservados. Lineas son solo rotas en caracteres de saltos de linea encontrado en el origen y en elementos html <br>.


pre-wrap

Secuencias de espacio son preservadas. Lineas son rotas en caracteres de saltos de linea, en elementos html <br>, y agrega saltos necesarios para rellenar los cuadros de linea


pre-line

Secuencias de espacios en blanco son reducidas. Lineas son rotas en caracteres de salto de linea, en elementos html <br>, y los necesarios para rellenar los cuadros de linea


La siguiente tabla resume el comportamiento de los diversos valores de white-space:


Nuevas líneas

Espacios y tabulaciones

Ajuste de texto

normal

Contraer

Contraer

Ajustar

nowrap

Contraer

Contraer

No ajustar

pre

Preservar

Preservar

No ajustar

pre-wrap

Preservar

Preservar

Ajustar

pre-line

Preservar

Contraer

Ajustar

La propiedad de CSS text-overflow determina como el contenido que se desborda y que no es mostrado, va a hacérsele notar a los usuarios. Puede ser cortado, mostrar una elipsis ('…', U+2026 Horizontal Ellipsis), o mostrar una cadena de texto personalizada.

clip
Este es el valor predeterminado para esta propiedad. El valor de la palabra clave truncará el texto en el límite del área de contenido, por lo tanto el corte puede darse en medio de una palabra. Para recortar justo en la transición entre caracteres se puede especificar con text-overflow como una cadena vacía, si eso es compatible con sus navegadores: text-overflow: '';.

ellipsis
El valor de la palabra clave mostrará puntos suspensivos ('…', U+2026 Horizontal Ellipsis) para representar texto recortado. Los puntos suspensivos se muestran dentro del área de contenido, disminuyendo la cantidad de texto mostrado. Si no hay suficiente espacio para mostrar los puntos suspensivos, se recorta.

<string> Experimental
El <string> (en-US) que será utilizado para representar texto recortado. La cadena se muestra dentro del área de contenido, disminuyendo el tamaño del texto mostrado. Si no hay suficiente espacio para mostrar la cadena, se recorta.

fade Experimental
El valor de esta palabra clave recorta el contenido en línea del texto que se desborda y aplica un efecto de atenuación cerca del borde de la linea de la caja con total transparencia en el borde.

fade( <length> | <percentage> ) Experimental
Esta función recorta el contenido desbordante en línea y aplica un efecto de atenuación cerca del límite de la caja con total transparencia en el borde.

El argumento determina la distancia sobre la que se aplica el efecto de atenuación. El <percentage> se revuelve contra la anchura de la línea de la caja. Los valore menores que 0 se truncan a 0. Los valores mayores que el ancho de la caja se recortan al ancho de la caja.


Efectos sombra en cajas

La propiedad CSS box-shadow se utiliza para aplicar una o más sombras a un elemento.

Especificar una sombra horizontal y vertical

En su uso más simple, solo especifica una sombra horizontal y vertical. El color predeterminado de la sombra es el color del texto actual.

revisemos esto individual24.html:

<!DOCTYPE html>
<html>
<head>
<style>
div {
  width: 400px;
  height: 150px;
  padding: 15px;
  background-color: coral;
  box-shadow: 20px 10px;
}
</style>
</head>
<body>

<h1>La propiedad de sombra en caja</h1>

<div>Este es un elemento div con un cuadro de sombra.</div>

</body>
</html>

Resultado, sugiero modifique los valores y vean como cambia :



Especificar un color para la sombra

El parámetro de color define el color de la sombra individual25.html.

<!DOCTYPE html>
<html>
<head>
<style>
div {
  width: 300px;
  height: 100px;
  padding: 15px;
  background-color: coral;
  box-shadow: 10px 10px lightblue;
}
</style>
</head>
<body>

<h1>La propiedad box-shadow</h1>

<div>Un elemento div con un lightblue box-shadow</div>

</body>
</html>

Resultado:


Agregar un efecto de desenfoque a la sombra

El parámetro de desenfoque define el radio de desenfoque. Cuanto mayor sea el número, más borrosa quedará la sombra.

individual26.html.

<!DOCTYPE html>
<html>
<head>
<style>
div {
  width: 300px;
  height: 100px;
  padding: 15px;
  background-color: coral;
  box-shadow: 10px 10px 5px lightblue;
}
</style>
</head>
<body>

<h1>La propiedad box-shadow</h1>

<div>El elemento div con 5px blurred, lightblue box-shadow.</div>

</body>
</html>

Resultado, puedes apreciar la sombra que aspecto tiene individual25.html



Establecer el radio de extensión de la sombra

El parámetro de extensión define el radio de extensión. Un valor positivo aumenta el tamaño de la sombra, un valor negativo disminuye el tamaño de la sombra, 

individual27.html

<!DOCTYPE html>
<html>
<head>
<style>
div {
  width: 300px;
  height: 100px;
  padding: 15px;
  background-color: coral;
  box-shadow: 10px 10px 5px 12px lightblue;
}
</style>
</head>
<body>

<h1>La propiedad box-shadow</h1>

<div>Un elemento div con un cuadro de sombra lightblue borroso, con un radio de extensión de 12 px.</div>

</body>
</html>

Resultado, individual27.html


Establecer el parámetro de inserción

El parámetro de inserción cambia la sombra de una sombra exterior (inicial) a una sombra interior,

 invidual28.html :

<!DOCTYPE html>
<html>
<head>
<style>
div {
  width: 300px;
  height: 100px;
  padding: 15px;
  background-color: coral;
  box-shadow: 10px 10px 5px lightblue inset;
}
</style>
</head>
<body>

<h1>La propiedad box-shadow</h1>
<div>Un elemento div con un cuadro de sombra lightblue borroso, con inset box-shadow.</div>

</body>
</html>

Resultado invidual28.html :


Agregar múltiples sombras

Un elemento también puede tener múltiples sombras invidual29.html :

<!DOCTYPE html>
<html>
<head>
<style>
#example1 {
  border: 1px solid;
  padding: 10px;
  box-shadow: 5px 5px blue, 10px 10px red, 15px 15px green;
  margin: 20px;
}

#example2 {
  border: 1px solid;
  padding: 10px;
  box-shadow: 5px 5px 8px blue, 10px 10px 8px red, 15px 15px 8px green;
  margin: 20px;
}
</style>
</head>
<body>

<h1>Multiples Sombras</h1>

<div id="example1">
  <h2>Multiple Sombras</h2>
  <p>box-shadow: 5px 5px blue, 10px 10px red, 15px 15px green:</p>
</div>
<br>

<div id="example2">
  <h2>Multiples Sombras con efecto borroso</h2>
  <p>box-shadow: 5px 5px 8px blue, 10px 10px 8px red, 15px 15px 8px green:</p>
</div>

</body>
</html>


Resultado invidual29.html



Tarjetas

También puedes usar la propiedad box-shadow para crear tarjetas similares al papel:

individual30.htm

<!DOCTYPE html>
<html>
<head>
<style>
div.card {
  width: 250px;
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
  text-align: center;
}

div.header {
  background-color: #4CAF50;
  color: white;
  padding: 10px;
  font-size: 40px;
}

div.container {
  padding: 10px;
}

div.polaroid {
  width: 250px;
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
  text-align: center;
}

</style>
</head>
<body>

<h1>Creacion de Tarjetas (cards) </h1>

<p>La propiedad de box-shadow puede ser usado para crear tarjetas de papel, el div.container es util para los 2 casos si se usan separados debén contener este elemento:</p>

<div class="card">
  <div class="header">
    <h1>1</h1>
  </div>

  <div class="container">
    <p>Enero 1, 2024</p>
  </div>
</div>

<h1>Create Images</h1>

<p>La propiedad box-shadow puede ser usada para crear imagenes de postales:</p>

<div class="polaroid">
  <img src="images1/rock600x400.jpg" alt="Noruega" style="width:100%">
  <div class="container">
    <p>Hardanger, Noruega</p>
  </div>
</div>
</body>
</html>

use esta imagen de Noruega pero pueden usar cualquierotra imagen.

Resultado individual30.html


CSS Propiedades de sombras

La siguiente lista muestra las propiedades de sombras (shadow):

Propiedad         Descripción

box-shadow     Añade una o mas sombras a un elemento

text-shadow    Añade una o mas sombras al texto

Sombra en Explorer

Podemos compatibilizar estas sombras con Explorers anteriores al 9 usando un filtro:

. sombra {
zoom: 1;
filter:
progidzDXImageTransform.Microsoft.Shadow(color='#969696',
Direction=135, Strength=3);
}

El valor de 1 en zoom, como ya vimos antes, es necesario para activar la propiedad hasLayout. Este paso es requerido por los Explorers para que el filtro funcione en todas las situaciones. Desde ya que este código podría estar en una hoja de estilos exclusiva para Explorers vinculada mediante comentarios condicionales.

El parámetro Direction especifica desde qué ángulo (0 a 360) proviene la luz y por lo tanto, hacia dónde se proyectará la sombra es un valor en grados, mientras que Strength, que equivale a blur, es la solides o nivel de esfumado de la sombra.


Por supuesto aquí no termina la galería de efectos de CSS3, para mayor información de mas de estos efectos esta en : https://www.w3schools.com/css/default.asp que esta en ingles

En este sitio podrías encontrar muchos efectos en CSS3 pero seguira creciendo así que deberías de revisar esta pagina de forma periódica para enterarte de mas variaciones de esto y nuevos efectos.







(1) https://developer.mozilla.org/es/docs/Web/HTML
(2)El gran libro de HTML5, CSS3 y Javascript Juan Diego Gauchat
(3) https://dinahosting.com/blog/que-es-utf-8/
(4) https://openwebinars.net/blog/que-es-css3/
(5) https://www.freecodecamp.org/espanol/news/hojas-de-estilo-css-externas-como-vincular-css-a-html-e-importar-a-head/
https://www.w3schools.com/html/default.asp
Libro: HTML5 & CSS3 for real world Alexis Goldstein
https://lenguajehtml.com/html/