Foros del Web » Creando para Internet » CSS »

Problema conceptual: Bordes, paddings, y floats

Estas en el tema de Problema conceptual: Bordes, paddings, y floats en el foro de CSS en Foros del Web. Hola a todos! Quería hacer una consulta que tengo desde hace un tiempo. Tengo un problema conceptual que no logro entender. Por un lado, cómo ...
  #1 (permalink)  
Antiguo 28/05/2012, 15:09
 
Fecha de Ingreso: febrero-2009
Mensajes: 193
Antigüedad: 15 años, 2 meses
Puntos: 3
Problema conceptual: Bordes, paddings, y floats

Hola a todos!

Quería hacer una consulta que tengo desde hace un tiempo. Tengo un problema conceptual que no logro entender. Por un lado, cómo hacer paddings y bordes de divs y por otro como hacer para que me queden bien los divs cuando tengo por ejemplo uno alineado a la izquierda otro a la derecha y luego otro abajo.

Tengo armado un css con estas dudas y quisiera saber su opinión acerca de que se podría cambiar para que funcione en ie 6+, mozilla etc.

El código ejemplo:

Código CSS:
Ver original
  1. <style type="text/css">
  2.  
  3. .top{
  4. width:100%;
  5. background:blue;
  6. margin-bottom:20px;
  7. }
  8.  
  9. .contenedor{
  10. width:100%;
  11. }
  12.  
  13. .contenedor-b{
  14. padding:20px;
  15. border:solid 1px red;
  16. }
  17.  
  18. .contenido-l{
  19. background:red;
  20. float:left;
  21. }
  22.  
  23. .contenido-r{
  24. background:green;
  25. float:right;
  26. }
  27.  
  28. .footer{
  29. width:100%;
  30. margin-top:20px;
  31. background:yellow;
  32. }
  33.  
  34. /* clearfix */
  35.  
  36. .clearfix:after {
  37. content:".";
  38. display:block;
  39. height:0;
  40. clear:both;
  41. visibility:hidden;
  42. }
  43. .clearfix {
  44. display:inline-block;
  45. }
  46. .clearfix {
  47. display:block;
  48. }
  49. * html .clearfix {
  50. height:1px;
  51. }
  52.  
  53. </style>
  54.  
  55.  
  56.  
  57. <div class="top">Top</div>
  58.  
  59.  
  60. <div class="contenedor"><div class="contenedor-b">
  61.  
  62. <div class="contenido-l">Izquierda</div>
  63. <div class="contenido-r">Derecha<br /><br /><br /><br /><br /><br /><br /><br /><br /></div>
  64. <div class="clearfix"></div>
  65. </div></div>
  66.  
  67. <div class="footer">Footer</div>

Nota1: Lo que sigue al texto comentado en el css clearfix es un hack que saqué de http://www.csslab.cl/2006/07/20/flot...incertidumbre/

Nota2: El código que puse recién se ve mal en ie 6,7, pero en mozilla se ve bien.


Ya que bordes paddings y floats es lo que más uso, me gustaría saber cómo sería la manera ideal para hacerlo según las buenas costumbres. Es decir no me interesa corregir este si está mal la base sino entender la mejor manera de hacerlo.

Cualquier opinión u ayuda es más que agradecida!
  #2 (permalink)  
Antiguo 29/05/2012, 23:40
Avatar de webosiris
Moderador egiptólogo
 
Fecha de Ingreso: febrero-2002
Ubicación: Luxor, Egipto
Mensajes: 10.725
Antigüedad: 22 años, 2 meses
Puntos: 998
Respuesta: Problema conceptual: Bordes, paddings, y floats

hola!
muy positiva tu actitud, entender lo que uno está haciendo es el único camino para realmente aprender, sino terminás copiando y pegando csas que no sabes ni porqué.

voy a analizar tu código.

1) el elemento DIV, igual que todos los otros elementos de bloque, tienen por defecto un width automático que equivale a "todo el espacio disponible" Por lo tanto no es necesario que le pongas width:100% a los divs [lo explico en el punto 3].

2) entiendo que tienes 2 contenedores porque un width del 100% + 40px de padding evidentemente suma más del 100%. Sin embargo sabiendo lo que te dije en el punto 1, puedes eliminar totalmente el width, y con eso se va la necesidad de tener .contenedor-b [de aquí hasta el final voy a considerar que .contenedor-b ya no existe]

3) Para entender lo de los paddings y borders, tienes que entender lo que es el modelo de cajas que generan los elementos en bloque (DIV, P, H1-H6, etc) . Eso se resume de la siguiente manera:
ancho total = margin izq + border izq + padding izq + width + padding der + border der + margin der

si no especificas ningún width, por defecto el width tiene un valor "auto", y equivale a todo el espacio que esté libre una vez descontados el padding, border y margin.

4) Los floats. El gran dolor de cabeza de los que empiezan, vas a ver que en realidad no es algo tan difícil cuando se entiende que es lo que pasa.

Cuando flotas un elemento, lo que haces es quitarlo del flujo de contenido. Eso significa, entre otras cosas, que la altura del elemento flotado no es considerada para calcular la altura del elemento que lo contiene (elemento padre, en este caso tu div contenedor). Esto implica que, si un elemento tiene dentro solo elementos flotados (como es el caso de tu .contenedor), su altura calculada va a ser 0. Para corregir esto y que el .contenedor "vea" los divs flotados, se pueden usar diferentes técnicas, en un proceso que se conoce como LIMPIAR LOS FLOATS.

- Una de esas técnicas es la que tu enlazas (pero que la aplicaste mal, ya que la clase "clearfix" hay que asigársela al contenedor, no a un div extra), pero que data 2006, y ha llovido mucho desde entonces. Aquí tienes la misma técnica pero actualizada. Puedes ver el demo con el código.

La clase .clearfix (o .cf en el ejemplo moderno que te enlacé) se la debes de aplicar al div contenedor, puedes aplicar más de 1 clase a un mismo elemento simplemente separando los nombres con espacios, de esta forma:
Código HTML:
Ver original
  1. <div class="clase1 clase2 clase3">

- otra técnica, más sencilla (pero que tiene un inconveniente puntual que a veces imposibilita su uso), es simplemente en el css agregarle "overflow:hidden;" al .contenedor

- una tercera técnica, la más antigua pero diría que la más confiable, es agregar un div vacío (enseguida después del último elemento flotado) con el estilo "clear:both"
__________________
Pasamos tus PSD a HTML

Pobre del que lo sabe todo, porque no tiene nada más que aprender ni razón para vivir. -
  #3 (permalink)  
Antiguo 30/05/2012, 19:34
 
Fecha de Ingreso: febrero-2009
Mensajes: 193
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Problema conceptual: Bordes, paddings, y floats

Ernesto muchas gracias por tu ayuda y el tiempo dedicado en cada punto.

Tengo algunas dudas respecto a estos puntos:

2- En realidad lo que quería ejemplificar era un div con un borde y padding. Suponiendo que el div (que contiene adentro los dos floats) mide 200px y se necesite que tenga un padding de 20px, sería correcto usar dos divs en el maquetado? Quedaría así:

Código CSS:
Ver original
  1. .contenedor{
  2. width:200px;
  3. background:#fff;
  4. margin:20px;
  5. }
  6.  
  7. (el contenedor general que mide 200px exacto, con fondo, y margen de 20px a los costados)
  8.  
  9. .contenedor-b{
  10. padding:20px;
  11. border:solid 1px red;
  12. }
  13.  
  14. (asignarle al conteneedor de arriba el borde y padding aparte para que no lo sume en los 200px)

3-
Cita:
Iniciado por webosiris Ver Mensaje
ancho total = margin izq + border izq + padding izq + width + padding der + border der + margin der
Esto rige para todos los navegadores por igual?

4- Esta clarísimo este punto! No me decido entre agregar el div vacío con estilo "clear:both" o la versión actualizada. Probé los dos en varios navegadores y funcionan de igual manera. Vos cual preferís?
  #4 (permalink)  
Antiguo 31/05/2012, 07:15
Avatar de webosiris
Moderador egiptólogo
 
Fecha de Ingreso: febrero-2002
Ubicación: Luxor, Egipto
Mensajes: 10.725
Antigüedad: 22 años, 2 meses
Puntos: 998
Respuesta: Problema conceptual: Bordes, paddings, y floats

Cita:
2- En realidad lo que quería ejemplificar era un div con un borde y padding. Suponiendo que el div (que contiene adentro los dos floats) mide 200px y se necesite que tenga un padding de 20px, sería correcto usar dos divs en el maquetado?
no entiendo porqué necesitas ese 2° div, si lo puedes hacer todo con 1 solo:
Código CSS:
Ver original
  1. .contenedor{
  2. width:200px;
  3. background:#fff;
  4. margin:20px;
  5. padding:20px;
  6. border:solid 1px red;
  7. }

Cita:
Esto rige para todos los navegadores por igual?
si, salvo para el ya difunto IE 5 y el IE6 en modo Quirks (modo quircks = tener mal el doctype)

Cita:
Probé los dos en varios navegadores y funcionan de igual manera. Vos cual preferís?
yo en realidad el que prefiero es overflow:hidden porque tiene lo mejor de ambos, no introduce html y además es mucho más corto que el clearfix. Cuando en determinados casos no lo puedo usar, uso un div vacío... por comodidad (y mejor compatibilidad en X situaciones con X navegadores) más que nada.
__________________
Pasamos tus PSD a HTML

Pobre del que lo sabe todo, porque no tiene nada más que aprender ni razón para vivir. -

Última edición por webosiris; 31/05/2012 a las 07:23
  #5 (permalink)  
Antiguo 31/05/2012, 20:26
 
Fecha de Ingreso: febrero-2009
Mensajes: 193
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Problema conceptual: Bordes, paddings, y floats

Gracias Ernesto. Si bien siempre creé mis códigos sin ningún programa del estilo de dreamweaver y bajo estándares, muchas cosas las hacía como bien comentaste en tu primera respuesta por "copiar y pegar sin saber por que". Hoy entiendo mucho mejor para que sirven algunos estilos y el doctype.


Cita:
Iniciado por webosiris Ver Mensaje
no entiendo porqué necesitas ese 2° div, si lo puedes hacer todo con 1 solo:
Código CSS:
Ver original
  1. .contenedor{
  2. width:200px;
  3. background:#fff;
  4. margin:20px;
  5. padding:20px;
  6. border:solid 1px red;
  7. }
Hacerlo en dos divs tal vez es algo que heredé de no trabajar doctype en mis inicios con la web. Luego al comenzar a utilizarlo lo seguí haciendo de esa manera (en dos divs por separado).

De todas maneras pensé que era una buena costumbre hacerlo en dos divs para que quede más "prolijo" el código y a su vez, no tener que restarle el padding (x2) y bordes (x2) al width. No me recomendás que lo haga? No es una buena práctica en los maquetadores/css?

Cita:
Iniciado por webosiris Ver Mensaje
si, salvo para el ya difunto IE 5 y el IE6 en modo Quirks (modo quircks = tener mal el doctype)
Qué doctype me recomendás que utilice para mi web y próximos proyectos?

Leí en la web que lo más avanzado es utilizar XHTML 1.0 Strict o xHTML 1.1 Strict. Probé mi sitio con cualquiera de los doctype que exponen en esa web y siempre se ve bien y por otro lado valida correctamente en w3c.
  #6 (permalink)  
Antiguo 01/06/2012, 11:37
Avatar de webosiris
Moderador egiptólogo
 
Fecha de Ingreso: febrero-2002
Ubicación: Luxor, Egipto
Mensajes: 10.725
Antigüedad: 22 años, 2 meses
Puntos: 998
Respuesta: Problema conceptual: Bordes, paddings, y floats

Cita:
e todas maneras pensé que era una buena costumbre hacerlo en dos divs para que quede más "prolijo" el código. No me recomendás que lo haga? No es una buena práctica en los maquetadores/css
técnicamente es algo innecesario, y en cualquier lenguaje escribir código innecesario no es algo recomendable.

Cita:
Qué doctype me recomendás que utilice para mi web y próximos proyectos? Leí en la web que lo más avanzado es utilizar XHTML 1.0 Strict o xHTML 1.1 Strict.
esa web tiene un error, el XHTML 1.1 Strict no existe, es 1.1 a secas (de todas formas son especificaciones muy similares).

Yo normalmente uso XHTML 1.0 Strict o HTML5, dependiendo de las necesidades. Pero cualquiera es bueno, mientras te atengas a la especificación de ese doctype. No tienen nada que ver con el nivel de conocimientos que tengas.
__________________
Pasamos tus PSD a HTML

Pobre del que lo sabe todo, porque no tiene nada más que aprender ni razón para vivir. -

Etiquetas: bordes, contenido, divs, footer, html, fondo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:34.