Como Caja 2: superando el modelo

En el artículo donde explico de qué se trata y cómo nos afecta el modelo de caja al construir un layout con CSS, se pueden sacar algunas conclusiones, las que en realidad dejo bien claro: utilizar el reseteador universal, tratar de no definir anchos a los div‘s y el más importante, no darle padding al div u otro elemento contenedor (para no deformarlo). Con esas 3 simples reglas podemos superar bastante este inconveniente, pero me interesa entregar una recomendación para que se pueda sintetizar un poco nuestro layout y al mismo tiempo ahorrar un poco de código, logrando además más control sobre nuestra diagramación.

Un HTML con 2 columnas:

<div id="contenido">
     <p>Lorem ipsum dolor sit amet……………..</p>
</div>
<div id="menu">
     <ul>
          <li>Uno</li>
          <li>Dos</li>
     </ul>
</div>

Y el CSS muy primitivo pero funcional:

div#contenido {
     width: 500px;
     background: #CCC;
}
div#menu {
     width: 180px;
     background: #F00;
     margin-left: 20px;
}
div#menu ul {
     margin: 10px 20px;
}
div#contenido, div#menu {
     float: left;
}

Ver ejemplo funcionando

Como apreciarán, los contenedores encajan y no se desarma nada. Como se predijo funciona perfecto. Ahora, lo que se hará es darle padding al <p> y al <ul> para que se despegara un poco de los bordes, pero esto puede traer inconvenientes: ¿Qué pasa si tenemos más de un <p>? ¿Qué pasa con otros elementos que agreguemos, <h1>, <a>, <img />? ¿Debemos darle el padding a todos siempre? Un lío tras otro… en ese caso, lo que haré será agregar otro div dentro de los contenedores, los que tendrán una class que tendrá solamente el padding que necesitamos. Así, este div rodeará todos los elementos necesarios para dar ese margen interior a nuestras cajas. El HTML modificado:

<div id="contenido">
     <div class="marginado">
          <p>Lorem ipsum dolor sit amet……………..</p>
     </div>
</div>
<div id="menu">
     <div class="marginado">
          <ul>
               <li>Uno</li>
               <li>Dos</li>
          </ul>
     </div>
</div>

Y el estilo para esa modificación:

div#contenido {
     width: 500px;
     background: #CCC;
}
div#menu {
     width: 180px;
     background: #F00;
     margin-left: 20px;
}
div#menu ul {
     margin: 10px 20px;
}
div#contenido, div#menu {
     float: left;
}
div.marginado {
     padding: 10px;
}

Y si en el caso que necesitáramos darle diferentes padding a cada caja, lo especificamos en el CSS:

div#contenido div.marginado {
     padding: 10px;
}
div#menu div.marginado {
     padding: 20px;
}

Ver ejemplo final

Sobre el Autor: Jorge Epuñan

Soy quien escribe en este sitio: diseñador gráfico de profesión, desarrollador web por preferencia y amante de la interacción humano-computador. Cuando no pienso en web, salgo a trotar por mis barrios en Santiago, Chile o me junto con amigos a un bar a conversar sobre nuevas tendencias y tecnologías. Twitter profesional y personal, además del Contacto.

  1. luis

    bueno

  2. Toni :M:

    Muy interesante, hay que ver la de cosas que me estás resolviendo con las entradas de tu blog…
    Para los que nos estamos sueltos en estas artes del CSS, nos sirve de gran ayuda. Desde aquí te envío muchos animos para continuar con esa maestría.

  3. pau

    Muy bueno..!!

    No he encontrado nadie que lo haya explicado tan bien como tu.

    Enhorabuena..!!

    un saludo

  1. [...] que contenga estas propiedades, entre la caja de layout y el contenido mismo de la caja, tal como recomendé ...
    CSSLab » Review 5: DivIt
1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221| viagrea onling viagra tablets name and cost levitra and dapoxetine youtube/viagra cialis extra generic viagra accepting american express buy generic viagra online with no prescription with mastercard generic levitra 20 mg levitra pro buy viagra online in ireland is it illegal to order viagra from outside the united states cheapest generic cialis buy cheap levitra overnight delivery cialis wears off airport security generic viagra generic finasteride viagra for sale using paypal ukAccutane Online Doxycycline online Buy Cheap Lexapro Online No Prescription Prednisone Online Buy Accutane No Prescription