2010-11-05 16 views
6

Quiero crear el siguiente elemento de la tabla-como en mi página: alt textCSS estilo de tabla-como

Solía ​​hacerlo utilizando <table>...<table> etiquetas, pero ahora estoy cambiando todos mis sitios a CSS y estoy m usando DIVs y tal. Me gustaría saber cuál es la "mejor" forma de lograr este tipo de elemento (¿sigue siendo la etiqueta <table>?). No quiero crear solo 3 columnas y separar elementos en la misma columna con <BR /> ya que me gustaría controlar el espacio entre elementos en la misma columna (como entre Item1 y Item4).

Gracias!

Joel

+7

CSS es para los diseños, el contenido de tablas debe/puede todavía ser representada en tablas – Ross

+7

utilizar tablas para las tablas de tontos. – Petah

+0

¡Siempre puedes esperar por CSS3! http://www.interoperabilitybridges.com/css3-grid-align/ http://www.w3.org/TR/css3-grid/ –

Respuesta

1

Uso de tablas para crear su diseño es generalmente mal visto. El uso de los divs junto con CSS para tabular datos también está mal visto. La mejor manera, como lo hizo su pregunta, es usar tablas en esta ocasión.

A menos que, por supuesto, los elementos representados en su imagen no sean datos tabulados, sino contenedores/cajas que a su vez contendrán los datos respectivos. En cuyo caso, probablemente recomendaría CSS.

9

uso display:table, display:table-row, display:table-cell

#table {display:table;} 
 
.row {display:table-row; } 
 
.cell{display:table-cell;}
<div id="table"> 
 
    <div class="row"> 
 
    <div class="cell">Item 1</div> 
 
    <div class="cell">Item 2</div> 
 
    <div class="cell">Item 3</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell">Item 4</div> 
 
    <div class="cell">Item 5</div> 
 
    <div class="cell">Item 6</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell">Item 7</div> 
 
    <div class="cell">Item 8</div> 
 
    <div class="cell">Item 9</div> 
 
    </div> 
 
</div>

ejemplo vivo http://jsbin.com/awagu4

... pero sugiero que uses table etiqueta html si necesita una mesa. Por esta razón existe, y luego puedes modificarlo con css. En cualquier caso, ambas soluciones tienen el mismo resultado.

+4

si usa 'div' es su propósito/requisito, entonces vaya por ello. pero nunca recomendaría usar divs para crear una tabla como diseño cuando '

' ya está disponible en 'HTML '. –

+0

@Zain Shaikh, estoy de acuerdo, lo comenté también después de mi solución, pero esto es lo que preguntó. – Sotiris

+0

Eso fue lo primero que pensé, solo temía que usar DIV de esa manera pudiera ser sintácticamente incorrecto:/ – Joel

3

puede achive el mismo efecto con el uso de lista desordenada anidado en un elemento div

<div class="wrapper"> 
    <ul class="itemHolder"> 
     <li><div>item1</div></li> 
     <li><div>item2</div></li> 
     <li><div>item3</div></li> 
     <li><div>item4</div></li> 
     <li><div>item5</div></li> 
     <li><div>item6</div></li> 
     <li><div>item7</div></li> 
     <li><div>item8</div></li> 
     <li><div>item9</div></li> 
    </ul> 
</div> 

esto sería el CSS

.wrapper{ 
    width:600px; 
} 
.itemHolder{ 
    margin:0; 
    padding:0; 
} 

.itemHolder li{ 
    float:left; 
    margin-bottom:10px; 
} 
.itemHolder li div{ 
    width:200px; 
} 

se puede ver en directo here

+1

Sin embargo, es la forma más eficiente. puedes simplemente poner el "ancho: 200px" en el li y deshacerte de los divs – wheresrhys

+0

si, o deshacerte del UL/LI y simplemente hazlo con DIV y "float: left; display: block;" – BerggreenDK

+0

@wheresrhys Cierto, pero es más seguro trabajar con elementos de divs, al menos para mí :) @BerggreenDK es mejor mantenerlos organizados y dejarlos flotar :) – cac

0

Personalmente prefiero usar una cuadrícula de diseño, cuando hago diseños.

Por el momento, recomendaría este "marco": http://960.gs/ 960 El nombre se debe a que es un diseño que tiene una anchura de 960 píxeles, por lo que se puede ver en la mayoría de ordenadores que tiene mínimos 1024 píxeles de ancho. 960 es un gran número para dividir en columnas, etc., pero eche un vistazo al sitio web para obtener más información.

0

Al abordar el método que se debe utilizar:

Si esto es puramente una cuestión de diseño y los artículos no tienen ningún problema de relación semántica que usaría como su contenedor, de fila y de elementos elementos.En cuyo caso use algo como Sotiris' answer.

Si sus elementos están semánticamente relacionados, mire con quién están relacionados. Si están semánticamente en grupos, es decir, una tabla, use una tabla, particularmente si hubiera un título para cada columna. Si solo se trata de un grupo de elementos relacionados, utiliza una estructura de lista como cac's answer (aunque probablemente pierda los divs internos).

También hay algunas variaciones interesantes en el enfoque de la lista.

Al eliminar el envoltorio, o el ancho del envoltorio en la respuesta de Cac, puede crear un diseño que se ajuste a un ancho de navegador diferente, por lo que para pantallas más amplias obtendrá menos filas de elementos ya que obtendrá más elementos en la fila.

Además, no ignore la lista de definiciones, si esa es una mejor opción semántica que un unordered list.

1

También puede lograr esto con un flexbox.

.items { 
    width: 100%; 
    display: flex; 
    flex-direction: row; 
    flex-wrap: wrap; 
} 

Esto generará una estructura similar a la de una mesa sensible.

0

La caja flexible es adecuada para esto.

ul { 
 
    display: flex; 
 
    flex-flow: row wrap; 
 
} 
 

 
li { 
 
    flex-basis: 40%; 
 
}
<ul> 
 
    <li> item 1</li> 
 
    <li> item 2</li> 
 
    <li> item 3 </li> 
 
    <li> item 4 </li> 
 
</ul>

Cuestiones relacionadas