Situación: Una página con una tabla con varias filas. Quiero solucionar el problema cuando thead llegue a la parte superior de la página cuando se desplaza, usando jquery o cualquier secuencia de comandos determinada. No quiero desbordar la mesa en sí.Fix thead en la página de desplazamiento
Respuesta
Puede utilizar el código de Lobstrosity con una ligera modificación: en lugar de position: fixed
absolute
.
position: fixed
ahora es ampliamente adoptado por todos los navegadores, incluido IE8 en adelante. Por cierto, los arreglos fijos son mucho mejores en dispositivos móviles/tabletas que position: absolute
.
me encontré con que en una mesa con anchos dinámicos para cada columna, la posición absoluta < culata en T> perdería las anchuras del resto de las columnas, por lo que para solucionar este me ocurrió con el siguiente código:
lo que este código hace es la siguiente:
Determina el ancho de cada columna de la tabla mirando encima de los anchos de CSS de la primera tbody> < tr> < td> fila < y almacenarlos en una matriz para más adelante . Cuando el usuario se desplaza, la clase 'fixed' se agrega al < thead> (El comportamiento predeterminado del navegador alterará el ancho de los < th> 's y no coincidirán con el < tbody>. Por lo tanto, para solucionar esto, retroactivamente establezca los anchos de < th> a los valores que hemos leído anteriormente.
De todos modos aquí está el código:
CSS
table.entries {width: 100%;border-spacing: 0px;margin:0;}
table.entries thead.fixed {position:fixed;top:0;}
HTML
<table class="entries" id="entriestable">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Location</th>
<th>DOB</th>
<th>Opt in</th>
<th>Added</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name">Ricky Bobby</td>
<td>[email protected]</td>
<td class="addy"><i>Kent, GB</i></td>
<td class="dob">20/08/1984</td>
<td>Yes</td>
<td class="date">4 hours ago</td>
</tr>
</tbody>
</table>
JavaScript
TableThing = function(params) {
settings = {
table: $('#entriestable'),
thead: []
};
this.fixThead = function() {
// empty our array to begin with
settings.thead = [];
// loop over the first row of td's in <tbody> and get the widths of individual <td>'s
$('tbody tr:eq(1) td', settings.table).each(function(i,v){
settings.thead.push($(v).width());
});
// now loop over our array setting the widths we've got to the <th>'s
for(i=0;i<settings.thead.length;i++) {
$('thead th:eq('+i+')', settings.table).width(settings.thead[i]);
}
// here we attach to the scroll, adding the class 'fixed' to the <thead>
$(window).scroll(function() {
var windowTop = $(window).scrollTop();
if (windowTop > settings.table.offset().top) {
$("thead", settings.table).addClass("fixed");
}
else {
$("thead", settings.table).removeClass("fixed");
}
});
}
}
$(function(){
var table = new TableThing();
table.fixThead();
$(window).resize(function(){
table.fixThead();
});
});
Si tiene varias tablas, debe pasar la identificación '# entriestable' como parámetro y declarar las configuraciones de variables locales dentro de la función' var settings = {table: $ (params.id), thead: []} ' – matteospampani
Esto es algo que tipo de funciona (probado rápidamente en FF 3.5, Chrome 3 e IE 8) que usted puede ser capaz de adaptar a sus necesidades.
Utiliza la posición absoluta del thead
. Cuando el thead
se coloca completamente, esto básicamente lo quita del flujo original del table
y los anchos de todos los tbody
td
s se ajustan en consecuencia. Así que obtienes un comportamiento desagradable si no especificas el ancho de las columnas o si el encabezado de una columna es más ancho que cualquier otra celda en esa columna.
CSS
#Grid thead.Fixed
{
position: absolute;
}
HTML
<table id="Grid">
<thead>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<!-- etc. -->
</tbody>
</table>
jQuery
$(function() {
var table = $("#Grid");
$(window).scroll(function() {
var windowTop = $(window).scrollTop();
if (windowTop > table.offset().top) {
$("thead", table).addClass("Fixed").css("top", windowTop);
}
else {
$("thead", table).removeClass("Fixed");
}
});
});
me di cuenta de que no funciona en IE u NLES se especifica un tipo de documento XHTML estricto:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<!-- etc. -->
sí, comencé a usar una posición fija, y ese comportamiento feo me llevó a preguntar para una solución aquí, para ahorrar tiempo. por ahora, ¡la tuya es la solución! gracias. – egidiocs
(function ($) {
$.fn.fixedHeader = function() {
return this.filter('table').each(function() {
var that = this;
var $head = $('<div></div>').addClass('head');
$(this).before($head);
$('th', this).each(function() {
var $el = $(this);
var $div = $('<div></div>').width($el.outerWidth()).text(
$el.text());
$head.append($div);
});
$(window).on('scroll', function() {
var $that = $(that);
var w = $(window).scrollTop();
var o = $('th', that).first().offset().top;
var tableO = $that.offset().top + $that.height();
if (o < w && tableO > w) {
$head.show();
} else {
$head.hide();
}
});
});
};
})(jQuery);
Puede usar este plugin jquery (debe adaptar el estilo .head a su estilo thead). Ejemplo de trabajo aquí: http://jsfiddle.net/lukasi/7K52p/1/
- 1. La barra de desplazamiento no aparece en la página web
- 2. Fuerza la posición de desplazamiento de la página hacia arriba al actualizar la página en HTML
- 3. CSS a PDF, usando THEAD para repetir el encabezado en la nueva página
- 4. Desplazamiento vertical suave de la página con la rueda del mouse y la barra de desplazamiento
- 5. Animate desplazamiento para ID en la página de carga
- 6. CSS: Fix altura de la fila
- 7. Diseño múltiple thead/tbody
- 8. cómo recordar la posición de desplazamiento de la página
- 9. Django fix Admin plural
- 10. log forging fortify fix
- 11. get will_paginate para definir un desplazamiento en la primera página
- 12. mysql fix Usando where;
- 13. análisis de código CA1060 Fix
- 14. Django marco flotante Safari Fix
- 15. jQuery fadeIn fadeOut hace desplazamiento de página
- 16. automático de desplazamiento hacia abajo de la página con jQuery
- 17. jQuery móvil desactivar el contenido de la página desplazamiento vertical
- 18. ¿Cómo evitar el desplazamiento de la página al usar qtip?
- 19. C# create thead y tbody
- 20. ¿Cómo detener el desplazamiento de la página mientras ... aún permite el desplazamiento?
- 21. Analizando el protocolo FIX en expresiones regulares?
- 22. Mantener la posición de desplazamiento en cuadros de lista en paneles de actualización, NO la página
- 23. Open Source FIX Client Simulator
- 24. Fix Node Position en D3 Diseño orientado a la fuerza
- 25. Agregar barra de desplazamiento a la tabla
- 26. Evitar desplazamiento de página al arrastrar en IOS y Android
- 27. Desplazamiento horizontal con la rueda de desplazamiento en Eclipse
- 28. Cómo hacer desplazamiento modal con la página principal
- 29. Importancia de XHTML thead, tfoot y tbody
- 30. ¿Cómo probar mi cliente FIX? ¿Hay un intercambio de FIX falso por ahí que pueda usar?
Escribí un complemento que hace esto usando una posición fija o absoluta. Si bien el código en la respuesta funciona para la tabla * that *, no funcionará para todas las tablas, por ejemplo, tablas con colspans o columnas ocultas. Pruebe esto en su lugar: http://mkoryak.github.io/floatThead/ – mkoryak
https://github.com/karaxuna/fixed-table-header – karaxuna