2012-09-04 10 views
7

Como debe saber, position: sticky; ha aterrizado en Webkit (demo). Hasta ahora puedo ver que esto solo funciona dentro del elemento padre. Pero me gustaría saber si puedo usar esto en un div desplazable con una tabla.Posición pegada en el

Por lo tanto, necesita 'escuchar' en el evento de desplazamiento de div, no el table.

Sé que puedo hacer esto con javascript y posicionamiento absoluto, pero me preguntaba si el sticky-positioning sería compatible con esto.

Respuesta

2

Como resulta que position: sticky solo funciona en la ventana y no en un desplazamiento div.

he creado un test-case con una larga mesa con un encabezado de la tabla:

<h1>Position sticky</h1> 
<div class="testTable"> 
<table class="stickyHead"> 
    <thead> 
     <tr> 
      <th>column 1</th> 
      <th>column 2</th> 
      <th>column 3</th> 
      <th>column 4</th>    
     </tr>  
    </thead> 
    <tbody> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
     <tr> 
      <td>1</td> 
      <td>2</td> 
      <td>3</td> 
      <td>4</td> 
     </tr> 
    </tbody> 
</table> 
</div>​ 

El css utilicé:

h1 { 
    font-size: 18px; 
    font-weight: bold; 
    margin: 10px 0; 
} 
div.testTable { 
    height: 200px; 
    overflow: auto; 
} 

table.stickyHead thead { 
    position: -webkit-sticky; 
    top: 0px; 
    background: grey; 
} 
table.stickyHead td, 
table.stickyHead th { 
    padding: 2px 3px; 
}​ 

Como se puede ver, si se quita el desbordamiento de la envoltura y haga que su ventana no sea tan alta, el cabezal de la mesa se adhiere a la parte superior de la ventana. Yo no se aplica a la envoltura div incluso si usted hace dar el divposition: relative

+1

caso, la prueba no funciona en Firefox ni en Chrome (apoyo a la posición de ': sticky' probablemente fue retirado de parpadeo). Soporte actual http://caniuse.com/#feat=css-sticky – czerny

+0

hay un error en bugzilla: https://bugzilla.mozilla.org/show_bug.cgi?id=975644 – retrovertigo

6

position: stickyno funciona con elementos de la tabla (siempre y cuando su atributo display comienza con table-), ya que las tablas no son parte de specification:

otros tipos de diseño, tales como mesas, "flotante" cajas, anotaciones rubí, diseños de cuadrícula, columnas y manejo básico del contenido normal "flujo", se describen en otros módulos.

+2

No estoy seguro de eso. Mozilla aparentemente está trabajando en el envío de esto: https://bugzilla.mozilla.org/show_bug.cgi?id=975644 – retrovertigo

+1

@retrovertigo Y está arreglado ahora. – Qwertie

+0

@Qwertie Gracias por la actualización :) "VERIFIED FIJO en Firefox 59" – retrovertigo

4

Si necesita cabecera pegajosa de cromo solamente entonces se puede establecer position: sticky; top: some_value (top propiedad es obligatoria) para td elemento de un elemento de thead.

Ver:

<table border=1> 
    <thead> 
    <tr> 
     <td style='position: sticky; top: -1px;background: red'>Sticky Column</td> 
     <td>Simple column</td> 
    </tr> 
    </thead> 

table with a stiky header

+0

para mí la solución fue 'thead th {position: sticky; arriba: 0;} ' – ctf0

Cuestiones relacionadas