miércoles, 1 de agosto de 2018

Estructura Simple

Cabecera


Una estructura web común o típica, normalmente tiene una cabecera arriba del todo donde suele situarse el título o nombre de la web, a menudo con un diseño o alguna imagen.
Eso es lo que vamos a hacer, pero primero, es conveniente y recomendable crear un contenedor.
El contenedor será un <div> donde introduciremos todos los elementos. 
Digamos que es una caja con unas medidas para delimitar el tamaño de la web y facilitarnos la organización.


Le ponemos un color de fondo para visualizarlo, un ancho fijo en píxeles y un alto de 100%, que será el total de lo que vemos en el navegador.
Si no pusiéramos márgenes, aparecería alineado a la izquierda.
Podríamos darle un margen izquierdo para centrar el contenedor, pero mejor que eso, podemos centrarlo automáticamente, dando los valores auto a los márgenes izquierdo y derecho. (Líneas 5 y 6).
Nuestro código HTML sería tan solo crear un div con nuestro id:

<div id="contenedor"></div>

Y este sería el resultado:

martes, 31 de julio de 2018

TEXTO CSS

Alineación de textos


Con CSS podemos elegir la alineación del texto dentro de los elementos.
Basta con modificar la propiedad text-align con 4 posibles valores: left, right, justify y center.


Hemos creado 4 reglas, cada una con un valor en la propiedad text-align. Y la aplicamos a cada elemento div.




Nota: los símbolos + y - en Notepad++ nos permiten mostrar u ocultar elementos, en este caso he ocultado 3 div para que no sea tan alta la imagen, ya que el contenido de todos es el mismo. 
Otra propiedad interesante de los textos es text-indent, esto consiste en una sangría en la primera línea del párrafo.
Vemos el ejemplo con el primer párrafo.



Como la hemos aplicado a la etiqueta <p>, tenemos que crear un párrafo para que tenga efecto.


Cursor


El cursor es lo que comúnmente conocemos como "la flechita del ratón".
Podemos tener cierto control sobre él y modificar su aspecto en determinadas ocasiones.
En esta tabla podemos ver diferentes diseños de cursor si pasamos el ratón por encima.


cursor:crosshair
cursor:default
cursor:help
cursor:move
cursor:pointer
cursor:progress
cursor:text
cursor:wait
Cuidado, el ratón no es un elemento al que aplicar la regla de cursor.
Ésta hay que modificarla o bien en un elemento o una regla propia donde queramos que el cursor cambie su diseño.
Nosotros vamos a aplicarla en un elemento <span> por ejemplo.



Para poder apreciar este ejemplo, no puedo poner una imagen, así que lo coloco aquí abajo:
  •  Este texto transforma el cursor. 

Eso es todo en cuanto a cursores.
Aunque no parezca muy útil, a priori, puede mejorar el diseño de nuestra página en algunos sitios donde queramos darle otro aspecto al cursor en un determinado momento.

Posicionamiento absoluto

El posicionamiento de los elementos en la página se indica con las propiedades top, right, bottom y left.
El posicionamiento absoluto es cuando indicamos los valores exactos donde queremos colocar el elemento en relación a su contenedor. Vamos a verlo en un ejemplo:
Vamos a crear una caja (div) grande y otra más pequeña, primero unas reglas para ellas:


Grande y pequeño son muy parecidos, sólo cambia el tamaño y que al pequeño le hemos dado unos valores de posicionamiento.



Creamos primero el grande y luego el pequeño. Vamos a ver que ocurre en la página:


El cuadrado de puntos rojos indica la posición que le hemos dado al pequeño si tuviera posicionamiento absoluto, pero éste se sitúa debajo del grande porque está en el mismo contenedor que él y evitan solaparse.
A menos, claro, que le indiquemos

position:absolute.

Vamos a ver su comportamiento en un vídeo:


Posicionamiento relativo


Este tipo de posicionamiento es cuando los valores que le damos son relativos a otros elementos que estén en el mismo contenedor que el que estemos posicionando, evitando el solapamiento. 
Vamos a utilizar exactamente el mismo ejemplo que en la lección anterior, mismas reglas, mismo documento HTML.


El cuadrado de puntos rojos indica la posición que le hemos dado al pequeño, con posicionamiento relativo.
Vemos, en este caso, como el posicionamiento relativo, el valor top los calcula en relación al elemento que tiene arriba en el mismo contenedor.
Vamos a ver su comportamiento en un vídeo:

La estructura de una página web, son definidas a menudo mediante tablas.
En el siguiente enlace os muestro una estructura muy simple de una página web estructurada con una tabla:


Este tipo de estructura es correcta y se puede seguir utilizando, pero con CSS podemos crear estructuras más complejas y con más posibilidades de diseño y organización. 
Mientras que las estructuras con tablas quedan siempre muy encasilladas y son poco versátiles. 
En las próximas lecciones vamos a aprender a crear una estructura utilizando CSS, jugando com elementos <div> simulando los huecos de las tablas. Con márgenes, bordes, relleno, etc... 
Para no liarnos, vamos a ir paso a paso con cada elemento. Haremos una página web simple pero que contenga todos los elementos básicos, que son: 
  • Cabecera
  • Menú
  • Cuerpo
  • Pie
En definitiva, una web completa (sólo estructurada, del diseño se encargará cada uno) con la que aprenderemos a estructurar y crear una organización propia de la forma que más nos guste.

lunes, 30 de julio de 2018

Imagenes CSS

Imágenes


Con imágenes podemos crear efectos interesantes, vamos a centrarnos en efectos propios de una galería de imágenes. Lo primero será introducir una miniatura de la imagen en un <div>.
Creamos nuestro código HTML:

<div>
<a href="imagen1.jpg"><img src="imagen1.jpg" width="120px"></a>
Foto 1. Mar.
</div>
<div>
<a href="imagen2.jpg"><img src="imagen2.jpg" width="120px"></a>
Foto 2. Campo.
</div>

Nota: el enlace (href) depende de donde tengamos la imagen guardada, si la tenemos en la misma carpeta que nuestro archivo HTML, la dejamos tal como está en el ejemplo.

Son 2 imágenes, cada una metida en un <div>, redimensionamos la imagen para mostrar una miniatura. Y le ponemos un título a cada una. De momento esto se nos vería así:


Pero le daremos un diseño al contenedor <div> y a las imágenes (<img>) para hacerlo más bonito:



Nada nuevo aquí, pero repasemos el diseño; al elemento div le hemos dado un borde, unas medidas, un pequeño relleno, alineación del texto centrada, colocación a la izquierda del elemento anterior (float:left), un pequeño margen entre ellos y un color de fondo blanco.

Y al elemento img le hemos dado un pequeño margen para encuadrarlo bien dentro del div.
Ahora esto tiene un diseño más similar a una galería de imágenes. 


Podemos darle un aspecto aún más vistoso si le añadimos un borde a la imagen cuando pasamos el cursor del ratón por encima:



Imágenes II


Una de las propiedades más interesantes de las imágenes, es la transparencia. Para modificar la transparencia de una imagen, basta con dar un valor decimal por debajo de 1 a la propiedad opacity.


Con este valor hacemos que una imagen no sea opaca, y podemos darle diferentes valores de transparencia. Aqui vemos las diferencias entre una imagen normal (opacity:1) y otra con un 50% de opacidad (opacity:0.5).

Con esta propiedad podemos añadir un efecto :hover muy interesante a nuestra galería de imágenes de la lección anterior.
Sólo debemos asegurarnos de añadir en el diseño de img:hover la opacidad a 1.


La propiedad opacity se puede modificar en otros elementos.
Jugando con eso podemos crear, por ejemplo, elementos <div> semitransparentes y conseguir diseños interesantes.


CSS 2

Pseudo-clases I


Las pseudo-clases nos permiten diseñar situaciones especiales.
Veamos un ejemplo con enlace:


En este enlace utilizamos 2 pseudo-clases, :hover y :visited.
La primera es para cuando pasamos el ratón sobre el elemento, y la segunda cuando el enlace ya ha sido visitado.
Tenemos 3 reglas diferentes en este enlace, las vemos a continuación:



Para cada "estado" se necesita una regla. Para declararlo, se pone el nombre del elemento, seguido de la pseudo-clase, sin olvidar los dos puntos (:).
Aquí os muestro la única forma correcta de hacerlo y lo que no debemos hacer:


Las pseudo-clases :link y :visited son exclusivas para los enlaces, no así la pseudo-clase :hover, que sirve para cualquier elemento.
La pseudo-clase :link se refiere al elemento como enlace, o sea, en su estado natural.
A menos que hagamos reglas complejas no necesitaremos esa pseudo-clase.
Vamos a ver el uso de :hover en otro elemento, por ejemplo en una fila de una tabla.
Si pasamos el ratón por encima de una fila ésta cambia de color, acorde al diseño que le hemos dado.
De la misma forma podemos hacerlo con otros elementos. El código de este ejemplo a continuación:



Funcionaría en cualquier tabla.

Pseudo-clases II


Hay dos pseudo-clases interesantes como son :active y :focus. Vamos a verlas en acción.

La pseudo-clase :focus es para cuando tenemos el foco de un elemento, si vamos cambiando el foco entre los 2 campos de texto (<input>) podemos notarlo.
Éste también tiene un diseño para su estado :active, que es mientras mantenemos pulsado el ratón sobre el elemento.
El botón (<button>) también tiene asignado otro diseño para :active.
Vamos a ver los códigos HTML y CSS del ejemplo:




Vemos el uso de :active en ambos elementos y de :focus en el campo de texto.
No hay muchas más pseudo-clases, me gustaría destacar una más que puede ser interesante, es :first-letter y se refiere a la primera letra de un elemento.
Este párrafo tiene asignado un diseño con :first-letter.
Como vemos, la primera letra tiene el diseño que queramos darle mediante una regla.
En nuestro caso un tamaño mayor, diferente color y cursiva.
Vemos la regla:


Podemos asignarlo sólo a los elementos que queramos creando reglas propias comunes.
En cuyo caso sólo tenemos que cambiar en la declaración la etiqueta p por el nombre de nuestro elemento, por ejemplo .miparrafo y a continuación la pseudo-clase.
Así:
.miparrafo:first-letter

Creación de un menú I




Un menú de navegación se puede crear de diferentes formas, pero la forma más ordenada y eficaz es utilizar listas en HTML con las etiquetas <ul> y <li>.

Vamos a crear una lista con 4 elementos típicos de un menú como ejemplo.
<ul>
<li><a href="#">Inicio</a></li>
<li><a href="#">Noticias</a></li>
<li><a href="#">Foro</a></li>
<li><a href="#">Contacto</a></li>
</ul>

La lista quedaría algo así:




En la lista introducimos los enlaces a las diferentes secciones.
Tal como está, nos valdría como menú de navegación, pero vamos a darle un diseño atractivo con CSS.
Empezamos por quitar los puntos de la lista con una regla para el elemento <ul>.}


El atributo list-style-type modifica el diseño de los puntos de la lista, en este caso queremos que no tenga, así que le damos el valor none.
Y ponemos margen y relleno a 0 para evitar problemas de posicionamiento.
Vamos a modificar un par de propiedades a los enlaces para crear "bloques" en lugar de texto.
De esta forma el menú será más similar a la pulsación de botones en lugar de enlaces de texto.



Aún así, ahora no se aprecia visualmente.
Pero si pasamos el ratón por la derecha del texto, veremos que el enlace es el ancho de 70px que le hemos dado.
Este es el aspecto de nuestro menú ahora mismo.


Para terminar de diseñar un menú atractivo, podemos darle color a los elementos y quitamos el subrayado a los enlaces para mejorar su aspecto.


Hemos añadido las líneas resaltadas en blanco, en orden: color de fondo, color de fuente, eliminado el subrayado y un pequeño relleno.
Nuestro menú está casi acabado: 
Podemos mejorar el aspecto añadiendo un diseño con la pseudo-clase :hover.

Creación de un menú II


En la lección anterior hemos visto como crear un menú desde una lista, éste en posición vertical.
Vamos a hacer el mismo menú en posición horizontal.
Para ello partimos del código anterior:

<ul>
<li><a href="#">Inicio</a></li>
<li><a href="#">Noticias</a></li>
<li><a href="#">Foro</a></li>
<li><a href="#">Contacto</a></li>
</ul>

Tenemos las mismas reglas CSS, por lo tenemos el mismo menú ahora mismo. 
Quitamos las propiedades display y width del elemento <a>, y añadimos una regla para los elementos <li> de la lista, quedando así:


Ponemos display:inline al elemento <li>, y nuestro menú se verá así: 
Esto nos valdría, pero cada elemento tiene un ancho, además hay huecos entre ellos.
Podemos mejorar el aspecto eliminando esos huecos y dando el mismo ancho a cada "botón". 
Para ello volvemos a poner la regla de los enlaces como estaba, para que se muestre en bloque y un ancho fijo, así:

Y al elemento <li> le modificamos una propiedad de posicionamiento que es float, le ponemos left.

Esto hace que los elementos de la lista se posicionen "flotando" a la izquierda, pegados al elemento anterior. Vemos como efectivamente esto ocurre y no dejan espacios entre ellos: 
Ya hemos creado dos tipos de menús, vertical y horizontal. Con esta base y jugando con los diseños, podemos personalizarlo cuanto queramos, sólo es cuestión de probar.

CSS

MEDIDAS CSS


Hasta ahora, sólo hemos cambiado propiedades de colores a los elementos.
Otra de las propiedades básicas de los elementos son ancho (width), alto (height) o tamaño de letra (font-size) entre otros que requieren de unidades de medida
Existen muchas unidades de medida para dar formato a los elementos en CSS, pero nos vamos a centrar en las unidades relativas.
Se recomienda su uso, ya que una página web puede ser visualizada desde diferentes fuentes, y así siempre mantendrá su proporción.
Éstas son px (píxel), em y ex
  • px - El píxel es la unidad de medida en informática para imágenes. Esto variará las proporciones respecto a la resolución de pantalla que usemos.
  • em - Es una unidad de medida respecto al tipo de letra que se use. 1 em es equivalente al ancho de la letra eme mayúscula (M) de la fuente que usemos.
  • ex - Sus proporciones dependen también del tipo de letra. En este caso 1 ex equivale a la altura de la letra equis minúscula (x).
Además, para tener un mayor control sobre las proporciones de la página, podemos utilizar porcentajes (%).

Bordes I

Otra propiedad que podemos modificar en los elementos son los bordes. Podemos definir su color, grosor y estilo. Vamos a empezar con los estilos.

Creamos una regla común de la siguiente manera:


En nuestra nueva regla le hemos asignado un tamaño al borde, si no, no se verá, y hemos modificado la propiedad border-style para crear un borde sólido(solid).
Lo asignamos a un párrafo en nuestro código HTML:


Y vemos el resultado:


Como no le hemos dado un ancho específico, el borde continúa hasta al final de la página.

A continuación os muestro todos los tipos de bordes en un ejemplo:


Bordes II

A los bordes también podemos darles un color y un ancho específico, además podemos hacer que sea diferente cada lado.
Vamos a crear un párrafo con bordes diferentes a cada lado del rectángulo.

Esta sería la regla:


Cada borde puede ir de un color distinto, vemos que el color por defecto es negro. Y el estilo por defecto es "none", por eso le hemos indicado el estilo "solid"
Siguiendo la misma forma, podemos cambiar el estilo de cada borde con las siguientes propiedades: 
  • border-top-style
  • border-right-style
  • border-bottom-style
  • border-left-style 
Al igual, si queremos definir un ancho fijo para todos los bordes o un color, se usan las siguientes propiedades: 
  • border-width
  • border-color
Por último, podemos dar valores a cada lado en una sola línea opcionalmente, se haría así:

Esto supone un ahorro de espacio y de tiempo.
También funciona con el estilo, y el orden de aplicación siempre es el mismo:
superior, derecha, inferior e izquierda.


Diseñando tablas

Conociendo los atributos de colores y de medidas, podemos empezar a darle forma a diferentes elementos, empecemos con las tablas.
Dejamos el código de una tabla sencilla sobre la que trabajaremos:

Código HTML
<table border="1">
  <tr>
     <th>Nombre</th>
     <th>Edad</th>
     <th>Profesión</th>
  </tr>
  <tr>
     <td>Laura</td>
     <td>23</td>
     <td>Camarera</td>
  </tr>
  <tr>
     <td>Antonio</td>
     <td>25</td>
     <td>Transportista</td>
  </tr>
</table>

Copiamos el código en nuestra página HTML y crearemos una regla para la tabla, otra para la cabecera y otra para las celdas.
Copiamos el código en nuestra página HTML y crearemos una regla para la tabla, otra para la cabecera y otra para las celdas.

Tenemos una tabla con colores y un borde más ancho. Podemos crear una tabla sin ese borde, poniendo la propiedad border-spacing a 0. 
Pero la forma correcta de hacerlo es con la propiedad border-collapse
Ésta por defecto es "separate", tenemos que darle el valor "collapse" para eliminar el espaciado.


Márgenes

Los márgenes son indispensables para un buen diseño de página. Podemos aplicar márgenes tanto a texto como a otros elementos.

Para ello utilizaremos las unidades de medida que ya hemos visto.




Hemos creado estos 4 párrafos <p> con borde para ver mejor el resultado. Nótese, que los márgenes se aplican al bloque del párrafo. 
A cada uno de ellos le hemos aplicado un margen en un lado con las propiedades: 
  • margin-left
  • margin-top
  • margin-bottom
  • margin-right
 Ya nos imaginamos como, veremos las 4 reglas en CSS:




Y la aplicación en el código HTML.



Al igual que otras propiedades, los márgenes se pueden aplicar en una sola línea mediante la propiedad margin.


Relleno (padding)

A menudo el relleno se suele confundir con los márgenes.
Ya que es como si fuera un margen dentro del elemento, pero no debemos confundirlos. 
Para facilitar su entendimiento, vamos a utilizar el mismo ejemplo que en los márgenes y veremos como funciona:


Podemos apreciar que el relleno afecta al interior del elemento, en este caso un párrafo. 
Efectivamente, su uso viene a ser como dar unos márgenes dentro de los elementos, pero si lo entendemos así, podemos llegar a confundir términos, hay que tener cuidado.
Os dejo los códigos del diseño:





Elementos en bloque (block)


Un elemento en bloque es aquel que comienza en una nueva línea, y acaba al final de ésta. Independientemente de las circunstancias. 
Aunque aún quede espacio en la línea anterior para escribir su contenido, si creamos un elemento en bloque, comenzará en la línea siguiente.
Veamos un ejemplo:


Otra particularidad es que a los elementos de bloque podemos darle un alto mediante la propiedad height.
Aquí lo vemos con un alto de 200 px:


Este es el código HTML del ejemplo:



En cuanto comenzamos con un elemento de bloque, salta a la siguiente línea y la acaba aunque no la rellenemos con contenido. 
Los elementos de bloque en HTML son: address, blockquote, center, dir, div, dl, fieldset, form, h1, h2, h3, h4, h5, h6, hr, isindex, menu, noframes, noscript, ol, p, pre, table, ul.

Elementos en línea (inline)


Al contrario de los elementos en bloque, los elementos en línea no comienzan una nueva línea, ni la prolongan hasta el final, su "marco" perfila sólo el espacio que ocupe su contenido.


Hemos añadido un borde punteado en rojo a la etiqueta <b> para ver su comportamiento.

Vemos que el elemento en línea se escribe "por donde viene" y se termina donde acaba su contenido. 

Podemos deducir de esto, que a un elemento de línea no podemos darle un alto.
Eso dependerá de su contenido. Si ponemos el tamaño de letra más grande a la etiqueta <b>:


Os dejo el código actual de este diseño:


Vemos que en una línea le he dado un ancho de borde (2px), estilo (dotted) y color (red).



Por último tener en cuenta que... 

  • Un elemento en línea puede ir dentro de otro elemento en línea.
  • Un elemento en línea puede ir dentro de un elemento en bloque.
  • Un elemento en bloque puede ir dentro de otro elemento en bloque.
  • Un elemento en bloque NO puede ir dentro de un elemento en línea. 
Éstos son los elementos en línea de HTMLa, abbr, acronym, b, basefont, bdo, big, br, cite, code, dfn, em, font, i, img, input, kbd, label, q, s, samp, select, small, span, strike, strong, sub, sup, textarea, tt, u, var.

Elemento

El elemento <div> es un elemento en bloque "genérico" que se utiliza para estructurar la página web. Funciona como un contenedor, para tener todo mejor organizado. 
Antes, las páginas web solían estructurarse mediante tablas (etiqueta <table>), pero con este nuevo elemento surgen más posibilidades en cuanto a diseño y esquemas.
Un elemento div es transparente por defecto. Para que tenga un color, debemos modificar su propiedad background-color. 
No basta con esto, también debemos darle unas medidas (alto y ancho), si no, al no contener nada, no tendrá ninguna superficie habilitada.
Veamos un ejemplo:


Creamos un contenedor div en nuestro código HTML así:
<div id="midiv"></div>



Nota: he cambiado el color de fondo de nuestra web para comprobar mejor la transparencia del elemento. 
Como vemos, el elemento necesita rellenarse con algo, si no tiene unas medidas o nada que lo contenga, el contenedor no necesita ser mostrado y por eso es como si no existiera. 
Sólo vemos el borde, pero nada dentro. Llega hasta el final de la línea por ser un elemento en bloque. 
Si introducimos un texto, se verá igual que un párrafo. Vamos a darle medidas y comprobaremos que el fondo es transparente, hasta que le demos nosotros un color. 
Le damos las siguientes propiedades en nuestra regla:

width: 150px;

height: 150px;

El resultado:


Como dije al principio de esta lección, los elementos div se utilizan principalmente para estructurar las páginas webs.
Al final del curso veremos más detalladamente las formas que se suelen utilizar para estructurar un página web con elementos div.

<span>


El elemento span es como un elemento div, pero en lugar de ser en bloque, es en línea.
Esto conlleva ciertas diferencias, lo veremos muy claro con el ejemplo anterior.
Vamos a crear una regla para un elemento span, igual que la que hicimos para el elemento div:



Y creamos un span en HTML:



Si nos fijamos bien, ocurre lo mismo que con el div vacío que creamos, no tiene nada que mostrar, por lo que está vacío, pero con alguna diferencia.
Ahora sí le hemos dado unas medidas de ancho y alto, sin embargo, no las acepta.

Eso es porque su ancho depende del contenido, como no hay nada, no tiene ningún ancho.
su alto depende del tamaño de letra que usemos, aunque no escribamos dentro, si modificamos el tamaño de letra el alto se vería afectado (aún si no escribimos).

Por lo tanto estas propiedades no tienen ningún sentido en los elementos span. ¿Para qué se utiliza este elemento entonces? Lo vamos a ver con un par de ejemplos.


Vemos que se hace uso para definir el estilo a fragmentos de texto, principalmente.
Es recomendable crearlos como regla común, ya que suelen ser estilos que utilicemos en más de una ocasión.
Os dejo los códigos del ejemplo.

La decisión de meterlo en un div cuadrado y de los saltos de línea en el código HTML es una cuestión de visualización.
Para que la imagen de los ejemplos no sea tan ancha.

Enlaces
En CSS también podemos modificar el estilo de los enlaces.
Como sabemos, los enlaces tienen un color por defecto azulado y están subrayados, y cuando han sido visitados, presentan un tono más oscuro.
Podemos hacer la prueba en esta enlace vacío:


Podemos crear una regla a la etiqueta <a> (que son los enlaces) y todos los enlaces de nuestra página tendrán el mismo diseño.
Pero si queremos personalizar diferentes enlaces, deberemos crear reglas comunes, queda a vuestra elección, según el diseño de vuestra página.
Veamos algunos ejemplos:

Jugando con los colores, los bordes, o la propiedad text-decoration (subrayado, tachado, etc...) podemos hacer que el diseño del enlace sea el que queramos.
El código CSS de estos diseños es el siguiente:



Lo aplicamos con el atributo class a un enlace, así:

<a href="ruta_del_enlace" class="e3">Enlace 3</a>

Un enlace, tiene diferentes "estados". Cuando pasamos el ratón por encima, cuando hacemos click sobre él o cuando ya ha sido visitado.
Estos estados podemos diseñarlos con el uso de las pseudo-clases, que las veremos en la próxima lección.