Tengo una tabla grande que se desplaza horizontal y verticalmente con la primera columna pegajosa y las tres filas de encabezado pegajosas. Esto funciona hasta cierto punto. Sin embargo, la mesa se extiende más allá del lado derecho de la pantalla.
Me gustaría que permaneciera en los límites de la pantalla. En la imagen se puede ver que tengo dos problemas:
Cuando agrego este css:
table { display: block; overflow: scroll; }La mesa está dentro de los límites de la pantalla; sin embargo, el adhesivo en las filas de encabezado no funciona. La columna izquierda pegajosa tampoco es tan buena (ver la imagen).
Por favor vea mi intento de jfiddle; sin embargo, no puedo hacer que Bootstrap funcione (incluí los cdns).
https://jsfiddle.net/Glyndwr/2tfLu87a/11/
Mi objetivo es tener:
Un poco más de explicación relacionada con hacer que la celda "Nombre" en la esquina superior derecha sea pegajosa. Esta es la posición inicial:
Cuando me desplazo hacia la derecha, la columna "Nombre" está al frente, lo cual es correcto:
Sin embargo, cuando me desplazo hacia abajo, la celda "Nombre" no se pega:
Entonces, lo que necesito es que la celda "Nombre" se pegue tanto en el desplazamiento hacia la derecha como hacia abajo.
Puede configurar/hacer que la thead sea sticky en lugar de filas/ tr s individuales. En cuanto a los nombres en la fila, dado que son el primer hijo de los tr s de cada tbody , puede seleccionarlos y aplicar estilos, así:
tbody>tr>td:first-child{ background: red; position: sticky; left: 0; }Luego puede envolver la tabla dentro de un contenedor de bloques para darle desplazamiento vertical y horizontal. Vea el ejemplo de CSS a continuación:
.table-wrapper{ margin: 0 auto; display: block; width: 98vw; height: 95vh; overflow: auto; border: 1px solid black; }He editado tu jsfiddle aquí .
Una respuesta parcial. Todavía necesito descubrir cómo solucionar mi problema principal de mantener la tabla dentro de la pantalla. @Yong responde en parte al problema de la celda "Nombre".
Reemplazar:
table thead tr.first th { padding: 3px; position: -webkit-sticky; position: sticky; top: 0; z-index: 1; background: white; } table thead tr.second th { padding: 3px; position: -webkit-sticky; position: sticky; z-index: 1; background: white; } table thead tr.third th { padding: 3px; position: -webkit-sticky; position: sticky; z-index: 1; background: white; }Con el código de Yong (se me ocurrió reemplazar z-index: 1 con z-index-3):
thead { position: -webkit-sticky; position: sticky; top: 0; z-index: 3;/*replace 1 with 3 */ background: white; border: 1px solid black; }Esto también hace que el código sea mucho más simple. También podríamos reemplazar el índice z del código original: 1 con el índice z-3.