CSS: Box Model-display-float-positioning de los elementos

Anderson Sánchez
Academia Hack
Published in
8 min readJul 19, 2019

Aprendiendo un poco mas acerca de CSS.

La manera de mostrar la información puede definir el éxito de una aplicación web. Por lo que se hace esencial saber desarrollar layouts con una interfaz que sea sencilla, que se explique por si misma, y sobretodo con buena estética.

En este artículo vamos a conocer algunos conceptos y propiedades de diseño web que nos ayudan a crear excelentes layouts, el primero es:

Box Model

TODO elemento en diseño web es una caja rectangular. Este fue mi momento “ah-ha”, que realmente me ayudo a empezar a entender el diseño web basado en CSS, y lograr desarrollar los diseños que quería. ¿Que quiero decir con esto?. Veamos por que dicen por allí que ¿Una imagen vale mas que mil palabras no?

Imagen por Mike Topalovich en https://www.topalovich.com

Veamos como se calcula el tamaño de la caja exactamente.

  • Cada elemento tiene un tamaño de alto y ancho en su contenido(azul en el diagrama).
  • Padding - Limpia una area alrededor del contenido. El padding es transparente
  • Border - Es un simple borde que va alrededor del padding y el contenido.
  • El Margin(naranja en el diagrama) es el único que no afecta el tamaño de la caja como tal, sin embargo, afecta otro contenido que esté interactuando con la caja, y esto sin duda es una parte importante del CSS box Model.
Photo by Mikael Kristenson on Unsplash

¿Como se calcula el alto y ancho de un elemento?

Al definir el height o el width de un elemento, solo estamos definiendo el tamaño de su contenido, para calcular su tamaño total, debes sumarle el tamaño de los paddings, margins y borders.

El ancho se calcula con la suma de estos atributos: width + padding-left + padding-right + border-left + border-right + left margin + right margin.

El alto se calcula con la suma de estos atributos: height + padding-top + padding-bottom + border-top + border-bottom + top margin + bottom margin.

¿Que ocurre si estos valores no son declarados?

Si el padding, border o margin no están declarados, hay dos opciones: estos son definidos con valores por defecto por el browser o están en cero(lo mas seguro es que estés usando alguna técnica de reinicio de CSS).

Hablando de ello, ¿Porque esto es importante?.

Básicamente un reinicio de CSS remueve los estilos por defecto de los elementos de la página, de esta manera puedes empezar a maquetar solo con los atributos que tu elijas aplicar.

Esto es importante por dos motivos principalmente:

  • Te aseguras que tu aplicación luce igual en todos los diferentes navegadores.
  • Te permite dar estética pensando en añadir atributos en vez de tener que remover atributos de los diferentes elementos de tu sitio web.

Si quieres conocer mas acerca de esto, puedes hacerlo acá. Personalmente utilizo el CSS reset propuesto por Eric Meyers al ser muy conocido en la web, además de ser de libre uso.

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li, fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video
{ margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}

blockquote, q {
quotes: none;
}

blockquote:before, blockquote:after, q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}

Propiedad Display

Como hablamos hace un rato, cada elemento en una aplicación web es una caja rectangular. La propiedad display en CSS, solo determina como dicha caja se va a comportar. Hay solo algunos valores de esta propiedad que son utilizados comúnmente:

div {       display: inline; /* Default de cada elemento HTML*/       display: inline-block; /* Caracteristicas de block, pero se comporta como inline */       display: block;  /* El browser coloca algunos elementos como block */

display: none; /* Esconder el elemento */
}

Block

Un elemento de nivel de bloque siempre inicia en una nueva linea y toma el ancho total disponible (Se agranda a la izquierda y derecha tanto como pueda). Algunos de ellos son: <div>,<h1> — <h6>, <p>, <form, <header>, <footer> y <section>.

Inline

Un elemento en linea no inicia en una nueva linea y solo toma el ancho que necesite. Algunos de ellos son: <span>, <a>, <img>

Inline-Block

La principal diferencia con inline, es que te permite setear un tamaño(width y height) específico al elemento, además, el elemento respeta los margenes y paddings de los otros elementos.

La principal diferencia con block es que no obliga al elemento a ir a la siguiente linea, de esta manera el elemento puede estar al lado de otros.

Ejemplo de W3Schools.

Display: None

display: none; es comúnmente utilizado con JavaScript para esconder y mostrar elementos sin borrarlos y crearlos de nuevo.

Photo by Andreas Weiland on Unsplash

Propiedad Float

La propiedad float en CSS es utilizada para el posicionamiento y el diseño de los sitios webs. Por ejemplo, dejar una imagen flotar a la izquierda del texto en un container.

Para entender su propósito y origen, podemos mirar el diseño de una impresión, En un diseño de una impresión, las imagenes podrian estar ubicadas, de tal manera que el texto se ubica alrededor de ellas como sea necesario.

Credito: Chris Coyier en https://css-tricks.com/all-about-floats/

En diseño web este comportamiento puede ocurrir exactamente igual.

Credito: Chris Coyier en https://css-tricks.com/all-about-floats/

En la web, float puede ser usado para crear diseños de una web enteros:

Credito: Chris Coyier en https://css-tricks.com/all-about-floats/

Sin embargo, para dicha utilidad, existen algunas herramientas que hoy en día son mas utilizadas(flex, grid).

Posibles valores:

  • none: El elemento no flota. Este es el valor inicial
  • left: El elemento flota a la izquierda de su container
  • right: El elemento flota a la derecha de su container

Positioning

La propiedad position especifica el tipo de método de posicionamiento utilizado por un elemento (static, relative, fixed, absolute o sticky).

Los elementos son posicionados en el top, bottom, left y right. Sin embargo, estas propiedades no van a funcionar a no ser que la propiedad position haya sido definida. Además cada uno de estos valores va a cambiar el comportamiento del elemento.

Static

Los elementos HTML son posicionados static por defecto. Al tener este valor, no son afectados por top, bottom, left o right.

div.static {
position: static;
border: 3px solid #73AD21;
}
https://www.w3schools.com/css/css_positioning.asp

Relative

Un elemento con position: relative; es posicionado relativo a su posición normal.

Configurando el top, right, bottom o left, va a causar que el elemento sea ajustado con respecto a su posición normal. Otro contenido no va a ser ajustado para rellenar el espacio que queda.

div.relative {
position: relative;
left: 30px;
border: 3px solid #73AD21;
}
https://www.w3schools.com/css/tryit.asp?filename=trycss_position_relative

En este ejemplo, el elemento se posiciona 30 px de diferencia izquierda con su propia posición.

Fixed

Un elemento con position: fixed; es posicionado relativo al viewport, lo cual significa que siempre se va a quedar en el mismo lugar, incluso si la pagina es “scrolleada”.

div.fixed {
position: fixed;
bottom: 0;
right: 0;
width: 300px;
border: 3px solid #73AD21;
}
https://www.w3schools.com/css/tryit.asp?filename=trycss_position_fixed

En este ejemplo el elemento, se ubica con nada de diferencia del bottom y el right de la posición del viewport, y siempre va quedarse allí, incluso cuando el usuario baje a otra sección.

Configurando el top, right, bottom o left, va a causar que el elemento sea ajustado con respecto a su posición normal. Otro contenido no va a ser ajustado para rellenar el espacio que queda.

Absolute

Un elemento con position: absolute; es posicionado relativo a su “antecesor” posicionado mas cercano. Esto quiere decir que si un elemento con absolute no tiene antecesores con “relative” asignado, este va a utilizar a body como su referencia de movimiento.

div.relative {
position: relative;
width: 400px;
height: 200px;
border: 3px solid #73AD21;
}
div.absolute {
position: absolute;
top: 80px;
right: 0;
width: 200px;
height: 100px;
border: 3px solid #73AD21;
}
https://www.w3schools.com/css/tryit.asp?filename=trycss_position_absolute

Sticky

Un elemento con position: sticky; es posicionado basado en la posición del scroll del usuario.

Un elemento con sticky, cambia su position entre relative y fixed, dependiendo de la posición del scroll. Es posicionado relative hasta que el usuario empiece a moverse a diferentes secciones de la pagina web, en cuyo caso se comporta como fixed.

div.sticky {
position: -webkit-sticky;
position: sticky;
top: 0;
padding: 5px;
background-color: #cae8ca;
border: 2px solid #4CAF50;
}
https://www.w3schools.com/css/tryit.asp?filename=trycss_position_sticky

z-index

Cuando los elemento son posicionados, estos pueden sobreponerse unos sobre otros.

La propiedad z-index, especifica el orden de pila de un elemento(cual elemento debería colocarse de frente, detrás de otros).

img {
position: absolute;
left: 0px;
top: 0px;
width: 100px;
height: 140px;
z-index: -1;
}
https://www.w3schools.com/css/tryit.asp?filename=trycss_zindex

Estos valores podrían incluso ser negativos, en caso de necesitarse.

Recomendaciones finales

Luego de conocer diferentes algunos conceptos y propiedades CSS que nos permiten maquetar sitios webs con mayor flexibilidad, te invito a que practiques cada uno de ellos. Ya que esto es lo esencial para poder utilizarlos de manera correcta.

--

--