2010-04-22 14 views
16

Estoy tratando de hacer un diseño de 2 columnas, aparentemente la pesadilla de CSS. Sé que no deberías usar tablas para el diseño, pero me he decidido por este CSS. Tenga en cuenta el uso de la pantalla: mesa, etc.¿Es un mal uso "display: table;" para organizar un diseño en 2 columnas?

div.container { 
    width: 600px; height: 300px; margin: auto; 
    display: table; table-layout: fixed; 
    } 

ul { 
    white-space: nowrap; overflow: hidden; 
    display: table-cell; 
    width: 40%; 
    } 

div.inner { 
    display: table-cell; 
    width: auto; 
    } 

Con este diseño:

<div class="container"> 

    <ul> 
    <li>First</li> 
    <li>Second</li> 
    <li>Third</li> 
    </ul> 

    <div class="inner"> 
    <p>Hello world</p> 
    </div> 

    </div> 

Esto parece funcionar de manera admirable. Sin embargo, no puedo evitar preguntarme: ¿estoy obedeciendo la regla de "no usar tablas", pero no el espíritu? Creo que está bien, ya que no hay marcado de posicionamiento en el código HTML, pero no estoy seguro de la forma "correcta" de hacerlo.

No puedo usar css float, porque quiero que las columnas se expandan y contraigan con el espacio disponible.

Por favor, desbordamiento de pila, ayúdame a resolver mi sentido existencial del temor en estas pseudo-tablas.

Respuesta

17

Hay dos argumentos esenciales para no usar tablas:

  1. marcado semántico.
  2. Evitando la sopa de etiquetas. (demasiadas etiquetas)

Por lo tanto, su método no infringe ninguno de esos objetivos. Sin embargo, debe verificar este código en IE7 e IE6: es probable que vea algunas inconsistencias allí.

Como se mencionó, no se preocupe por cumplir estrictamente estas reglas. Son pautas, y debe usar la herramienta correcta para el trabajo que está haciendo. Lo importante aquí es saber para qué son las mejores técnicas y cuándo usarlas. A veces, usar una mesa es la mejor herramienta para lo que estás tratando de hacer, otras no.

+0

La sopa de etiquetas en realidad no se refiere tanto a las marcas demasiado como a las marcas no válidas o descuidadas. La forma en que se implementan las tablas CSS significa que * podría * potencialmente escribir tanto como, o incluso más detallado que, si usara tablas, eso normalmente no es una preocupación. La única razón por la que siento que alguien necesita es la # 1. En cuanto a IE7 e IE6, para aclarar, ambos no admiten tablas CSS de ninguna manera. IE8 sí, con errores que son comparables a casi cualquier otro navegador (aunque hilarantemente con [al menos una regresión en versiones posteriores] (http://stackoverflow.com/a/24693779)). – BoltClock

+0

, pero ¿qué pasa con el soporte del navegador? o diseño receptivo? o una mejor manera? –

4

Sería genial si todos los diseños posibles se pudieran hacer con css, sin tablas o pseudo-tablas a la vista. Pero hay excepciones, y hasta que html y css (y el soporte del navegador) nos permita hacerlo, siéntete cómodo con tus tablas. El objetivo, después de todo, es satisfacer a los usuarios, no adherirse a la filosofía de otra persona.

4

El problema con el uso de etiquetas de tabla para datos no tabulares en HTML es que imponen el formato en lo que deberían ser solo los datos.

Dado que está poniendo su formato de tabla en su CSS, su HTML sigue siendo semánticamente correcto. Soy de la opinión de que, siempre que su HTML sea semánticamente correcto, lo que haga en el CSS para que se vea bien es asunto suyo, y creo que su temor existencial está fuera de lugar.

En una nota lateral, estoy bastante seguro de que IE 6 no es compatible con la pantalla: tabla-celda, por lo que dependiendo de su destino es posible que tenga que hacer arreglos alternativos.

10

Este es el tipo de ejemplo para el que se diseñó display: table-cell;. Después de todo, usted está poniendo el formato en la hoja de estilo, no en el marcado. Entonces relájate! Está bien.

+0

, pero ¿qué pasa con el soporte del navegador? o diseño receptivo? o una mejor manera? –

0
display: table-cell 

es un estilo, no una estructura de tabla como la siguiente:

<table> 
    <tbody> 
     <tr> 
      <td> 
      </td> 
     </tr> 
    </tbody> 
</table> 

por lo que creo que está bien para usarlo.

Por cierto, no creo que la mesa sea realmente mala después de todo.

Personalmente prefiero la tabla para mostrar datos tabulares (solo para datos) que la estructura "div". Mi razón principal es que el usuario puede copiar fácilmente pegar los datos en la hoja de cálculo desde su navegador. Completando mi pereza: "> y reduciendo la carga de la página (al no incluir" descargar como excel, o csv u otro ") ... jejeje ...: D. Ah, uno más, en diferentes navegadores se muestra consistente también.

+3

Para datos tabulares, se debe usar 'table' * *. Es el propósito exacto de 'tabla'. Las tablas no son malas, usando tablas para el diseño es. –

+0

De acuerdo, pero para el diseño complejo, la tabla es demasiado pesada y más difícil de modificar. –

3

Uso de la pantalla: la tabla está bien cuando se habla de semántica. En primer lugar, la razón por la que "las tablas son malas" se debe a que se supone que el marcado (HTML) describe el contenido dentro de ella. de datos, que no tiene cabida en una mesa.

Puesto que usted está sólo la creación de la forma en las pantallas de marcado (en una estructura de tabla), que está perfectamente bien.

sin embargo, esto no funcionará para todos los navegadores. Específicamente IE6 e IE7 (un d IE8 en "modo de compatibilidad") no mostrará esto correctamente.

Para más información sobre los tipos de visualización y soporte de los navegadores, puede referirse a esto: http://www.quirksmode.org/css/display.html

0

Dijiste usando display:table para un gran auto-ancho como columnas?

No puedo usar css float, porque quiero que las columnas se expandan y se contraigan con el espacio disponible.

¡Entonces, también podría usar las propiedades de flexión! Vamos a conseguir porque:

En CSS3 había muchas propiedades añadidas, hay un grupo de llamada flexión que se utiliza para tener divs flexibles sin usar tablas o display: table; también se usa cuando el usuario está usando una pantalla pequeña (¿tal vez una mini computadora portátil, una tableta, un teléfono inteligente grande como la serie Galaxy o una pequeña ...?). Estas son las propiedades:

  • Padres.
    • Este es el contenedor principal. Por ejemplo, digamos que tienes una web con una estructura HTML muy básica, y con tres divs (uno con la información principal, otro utilizado como barra lateral y finalmente uno para envolver los dos primeros mencionados).
    • pantalla: flex: esto se utiliza para decirle al navegador que estamos hablando de artículos flexibles. Use -webkit- antes del valor (inline-flex también es aplicable) para el soporte de Google y Safari. No necesita usar -moz- o -o-, ni -ms-.
    • flex-direction: esta es la orientación de los niños dentro de este elemento primario. Hay cuatro valores disponibles para este: row, column, row-reverse, o column-reverse.Debido a que quieres un div principal y una barra lateral, deberás usar la columna. Use -moz- y -webkit- para obtener más compatibilidad con el navegador.
    • justify-content: la alineación para el eje X. Valores: flex-start, flex-end, space-between, space-around, flex-center. Recomiendo usar el cuarto o el quinto.
  • Niño.
    • Para este caso, voy a decir con el niño como main ( no se recomienda) o div class="main" y aside o div class="sidebar".
    • orden: se utiliza para pedir los divs, sin importar cuál fue el primero en el código. Aquí CSS gana contra el código HTML utilizado. Los valores son ... números ... use -moz- n -webkit- por favor.
    • flex-grow: se utiliza para permitir que un niño sea más grande que el resto, todo depende de su valor, y si hay otros niños con otros valores para esta propiedad. -webkit- & -moz- r Rcomment ed.

Moar información en: http://css-tricks.com/snippets/css/a-guide-to-flexbox/ y http://www.w3schools.com/cssref/default.asp#flexible.

Ah, y aquí está la respuesta: sí, puede usarlo. Lea en: http: /www.w3.org/TR/css3-flexbox/#intro. Dice diseño

mesa, diseñada para el tendido de datos 2D en formato tabular

Ellos no hablan de mala idea, sólo se establece su formato a ACT (y tal vez no se ven me gusta) como una mesa.

0

Déjame desglosar por ti. elemento tenía sus encantos que fue la razón detrás de todos los que lo utilizan. Pero luego la Semántica evolucionó. Estábamos muy por encima con Syntax. Se tomaron decisiones, en nombre de las cuales se descartó XHTML 2.0 y se adoptó HTML5. Lea la historia de WHATWG (Grupo de trabajo de tecnología de aplicaciones de hipertexto web) para aclarar sus conceptos al respecto.

La postura principal detrás de la eliminación de ciertos elementos de HTML era que no estaban destinados a estructurar las cosas, sino que estaban destinadas a darles estilo, mientras que HTML no tiene nada que ver con el diseño de un elemento.

HTML está diseñado para estructurar una página web. CSS está diseñado para diseñar esa estructura.

Por lo tanto, el elemento HTML y muchos otros fueron eliminados de las especificaciones. Se usaban específicamente para estilizar en lugar de estructurar.

Para decidir el destino del elemento, se decidió mantenerlo en las especificaciones, ya que en las tablas reales se debe estructurar con él, pero para cambiar el enfoque de un diseñador web común, se deben agregar capacidades/especificaciones similares a CSS.

Ahora el elemento HTML está destinado a la estructura de una tabla y nada más. Si desea utilizar la tabla para el estilo, siga adelante y use display: table; que es una propiedad de CSS y CSS tiene como objetivo estilizar los elementos de una estructura en HTML. Por encima de eso, se puede modificar y controlar E.g.en RWD puede especificar cualquier elemento para cambiar su visualización de tabla a bloque o lo que sea.

Cuestiones relacionadas