Estoy escribiendo una página donde necesito una tabla HTML para mantener un tamaño establecido. Necesito los encabezados en la parte superior de la tabla para permanecer allí en todo momento, pero también necesito que el cuerpo de la tabla se desplace sin importar cuántas filas se agreguen a la tabla. Piensa en una mini versión de Excel. Esto parece una tarea simple, pero casi todas las soluciones que he encontrado en la web tienen algunos inconvenientes. ¿Como puedo resolver esto?
javascript
html
css
html-table
menta
fuente
fuente
Respuestas:
Tenía que encontrar la misma respuesta. El mejor ejemplo que encontré es http://www.cssplay.co.uk/menu/tablescroll.html . Encontré que el ejemplo # 2 funcionó bien para mí. Deberá establecer la altura de la tabla interna con Java Script, el resto es CSS.
fuente
Encontré que DataTables es bastante flexible. Si bien su versión predeterminada se basa en jquery, también hay un complemento AngularJs .
fuente
Vi la excelente solución de Sean Haddy a una pregunta similar y me tomé la libertad de hacer algunas ediciones :
aria-hidden="false"
Sean hizo el trabajo pesado, sin embargo. Gracias a Matt Burland, también, por señalar la necesidad de apoyar el pie.
Véalo usted mismo en http://jsfiddle.net/jhfrench/eNP2N/
fuente
¿Has intentado usar thead y tbody y establecer una altura fija en tbody con overflow: scroll?
¿Cuáles son sus navegadores de destino?
EDITAR: Funcionó bien (casi) en Firefox: la adición de la barra de desplazamiento vertical también provocó la necesidad de una barra de desplazamiento horizontal. IE simplemente establece la altura de cada td a lo que había especificado la altura de tbody. Aquí está lo mejor que se me ocurrió:
fuente
overflow-x: hidden;
Yoverflow-y: auto
también ayuda.Lo que necesitas es:
1) tener un cuerpo de mesa de altura limitada ya que el desplazamiento se produce solo cuando el contenido es más grande que la ventana de desplazamiento. Sin embargo
tbody
, no se puede dimensionar, y debe mostrarlo comoblock
para hacerlo:2) Vuelva a sincronizar el ancho de las columnas del encabezado de la tabla y del cuerpo de la tabla, ya que esto último lo
block
convirtió en un elemento no relacionado. La única forma de hacerlo es simular la sincronización aplicando el mismo ancho de columnas a ambos .Sin embargo, dado que
tbody
es unblock
ahora, ya no puede comportarse como untable
. Ya que todavía necesitas untable
comportamiento para mostrar sus columnas correctamente, la solución es solicitar que cada una de sus filas se muestre comotable
s individuales :(Tenga en cuenta que, utilizando esta técnica, ya no podrá atravesar filas).
Una vez hecho esto, puede exigir que los anchos de columna tengan el mismo ancho en ambos
thead
ytbody
. No podrías eso:th, td { width: 20%; }
si tiene 5 columnas, por ejemplo), lo cual es más práctico (no es necesario establecer el ancho para cada instancia de la tabla) pero no puede funcionar para ningún recuento de columnasPrefiero la última opción, que requiere agregar:
Vea una demostración aquí , bifurcada de la respuesta a esta pregunta .
fuente
Editar: Esta es una respuesta muy antigua y está aquí para la prosperidad solo para mostrar que fue respaldada una vez en la década de 2000, pero se abandonó porque la estrategia de los navegadores en la década de 2010 fue respetar las especificaciones del W3C, incluso si se eliminaron algunas características: tabla desplazable con encabezado fijo / pie de página se especificó torpemente antes de HTML5.
Malas noticias
Desafortunadamente, no hay una forma elegante de manejar la tabla desplazable con fijo
thead
/tfoot
porque las especificaciones HTML / CSS no son muy claras sobre esa característica .Explicaciones
Aunque la especificación HTML 4.01 dice
thead
/tfoot
/tbody
se usa (¿se introduce?) Para desplazar el cuerpo de la tabla:Pero la función de tabla desplazable que funciona en FF 3.6 se ha eliminado en FF 3.7 porque se considera un error porque no cumple con las especificaciones HTML / CSS. Mira esto y aquello comentarios sobre errores de FF.
Consejo de red de desarrolladores de Mozilla
A continuación se muestra una versión simplificada de los consejos útiles de MDN para la tabla desplazable.
Consulte esta página archivada o la versión francesa actual.
Sin embargo, MDN también dice que esto ya no funciona en FF :-(
También he probado en IE8 => la tabla tampoco es desplazable: - ((
fuente
No estoy seguro de si alguien todavía está mirando esto, pero de la manera en que lo hice anteriormente es usar dos tablas para mostrar la tabla original única: la primera solo la línea del título de la tabla original y sin filas de cuerpo de tabla (o una fila de cuerpo vacía para hacer Validar).
El segundo está en un div separado y no tiene título y solo las filas del cuerpo de la tabla original. El div separado se hace desplazable.
La segunda tabla en su div se coloca justo debajo de la primera tabla en el HTML y parece una sola tabla con un encabezado fijo y una sección inferior desplazable. Solo he probado esto en Safari, Firefox e IE (las últimas versiones de cada uno en la primavera de 2010) pero funcionó en todos ellos.
El único problema que tenía era que la primera tabla no se validaría sin un cuerpo (validador W3.org - XHTML 1.0 estricto), y cuando agregué una sin contenido, se genera una fila en blanco. Puede usar CSS para que esto no sea visible, pero aún así ocupa espacio en la página.
fuente
display: none;
, a menos que se refiera al espacio en la fuente ...Esta solución funciona en Chrome 35, Firefox 30 e IE 11 (otras versiones no probadas)
Su CSS puro: http://jsfiddle.net/ffabreti/d4sope1u/
Todo está configurado para mostrar: bloque, la mesa necesita una altura:
fuente
Esto me causó grandes dolores de cabeza al tratar de implementar una cuadrícula de este tipo para una aplicación nuestra. Intenté todas las técnicas, pero cada una tenía problemas. Lo más cerca que llegué fue usar un complemento jQuery como Flexigrid (mire en http://www.ajaxrain.com alternativas ), pero esto no parece admitir tablas 100% anchas, que es lo que necesitaba.
Lo que terminé haciendo fue rodar el mío; Firefox admite
tbody
elementos de desplazamiento , por lo que el navegador olfateó y usé CSS apropiado (configuración de altura, desbordamiento, etc.), pregunté si desea más detalles) para hacer ese desplazamiento, y luego para otros navegadores utilicé dos tablas separadas configuradas para usartable-layout: fixed
que usan un tamaño algoritmo que se garantiza que no desborde el tamaño establecido (las tablas normales se expandirán cuando el contenido sea demasiado ancho para ajustarse). Al dar a ambas tablas anchos idénticos pude hacer que sus columnas se alinearan. Envolví el segundo en un conjunto div para desplazarse y con un poco de jiggery pokery con márgenes, etc., logré obtener la apariencia que quería.Lo siento si esta respuesta suena un poco vaga en algunos lugares Estoy escribiendo rápidamente ya que no tengo mucho tiempo. ¡Deja un comentario si quieres que me expanda más!
fuente
Aquí hay un código que realmente funciona para IE y FF (al menos):
He cambiado el código original para hacerlo más claro y también para que funcione bien en IE y también en FF.
Código original AQUÍ
fuente
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Aquí está mi alternativa. También usa diferentes DIV para el encabezado, el cuerpo y el pie de página, pero sincronizados para cambiar el tamaño de la ventana y con la búsqueda, desplazamiento, clasificación, filtrado y posicionamiento:
Mis listas de CD
Haga clic en los botones Jazz, Clásico ... para ver las tablas. Está configurado para que sea adecuado incluso si JavaScript está desactivado.
Parece correcto en IE, FF y WebKit (Chrome, Safari).
fuente
Lo siento, no he leído todas las respuestas a su pregunta.
Sí, aquí lo que quieres (ya lo he hecho)
Puede usar dos tablas, con el mismo nombre de clase para un estilo similar, una solo con el encabezado de la tabla y otra con sus filas. Ahora coloque esta tabla dentro de un div que tenga una altura fija con overflow-y: auto OR scroll.
fuente
El principal problema que tuve con las sugerencias anteriores fue poder conectar tablesorter.js Y poder flotar los encabezados para una tabla restringida a un tamaño máximo específico. Finalmente me topé con el complemento jQuery.floatThead que proporcionaba los encabezados flotantes y permitía que la clasificación continuara funcionando.
También tiene una buena página de comparación que se muestra frente a complementos similares .
fuente
Live JsFiddle
Es posible solo con HTML y CSS
fuente
Si está bien usar JavaScript aquí es mi solución Crear un conjunto de tablas de ancho fijo en todas las columnas (¡píxeles!) Agregue la clase Scrollify a la tabla y agregue esta altura de conjunto javascript + jquery 1.4.x en CSS o estilo.
Probado en: Opera, Chrome, Safari, FF, IE5.5 ( error de secuencia de comandos épica ), IE6, IE7, IE8, IE9
Editar: altura fija.
fuente
Hago esto con javascript (sin biblioteca) y CSS: el cuerpo de la tabla se desplaza con la página, y la tabla no tiene que tener un ancho o alto fijo, aunque cada columna debe tener un ancho.También puedes seguir ordenando la funcionalidad.
Básicamente:
En HTML, cree divisiones de contenedor para colocar la fila del encabezado de la tabla y el cuerpo de la tabla, también cree una división de "máscara" para ocultar el cuerpo de la tabla a medida que se desplaza más allá del encabezado
En CSS, convierta las partes de la tabla en bloques
En Javascript, obtenga el ancho de la tabla y coincida con el ancho de la máscara ... obtenga la altura del contenido de la página ... mida la posición de desplazamiento ... manipule CSS para establecer la posición de la fila del encabezado de la tabla y la altura de la máscara
Aquí está el javascript y una DEMO jsFiddle.
fuente
Para mí, nada relacionado con el desplazamiento realmente funcionó hasta que eliminé el ancho de la tabla CSS. Originalmente, la tabla CSS se veía así:
Tan pronto como eliminé el ancho: 100%; Todas las funciones de desplazamiento comenzaron a funcionar.
fuente
Si tiene estándares lo suficientemente bajos;) podría colocar una tabla que contenga solo un encabezado directamente encima de una tabla que solo tenga un cuerpo. No se desplazará horizontalmente, pero si no necesitas eso ...
fuente