2012-01-14 9 views

Respuesta

15

se puede lograr esto mediante la transición height, padding 's y border-width. He aquí un ejemplo:

$('.run-css').click(function() { 
 
    $('.cont').toggleClass('toggled'); 
 
});
.cont { 
 
    width: 100px; 
 
    height: 100px; 
 
    border: 1px #CCC solid; 
 
    background-color: #EEE; 
 
    padding: 5px; 
 
    -webkit-transition: height .3s linear, padding-top .3s linear, padding-bottom .3s linear, border-top-width .3s linear, border-top-width .3s linear; 
 
    transition: height .3s linear, padding-top .3s linear, padding-bottom .3s linear, border-top-width .3s linear, border-top-width .3s linear; 
 
} 
 
.toggled { 
 
    overflow: hidden; 
 
    padding-top: 0; 
 
    padding-bottom: 0; 
 
    height: 0; 
 
    border-width: 0 1px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script> 
 
<button class="run-css">CSS slideToggle</button> 
 

 
<div class="cont">Toggle this div</div>

+0

gracias. Esto parece que funcionará para mí. – sevens

+1

Esto no es puro css –

+8

Sí lo es. Pure CSS significa que el efecto en sí no requiere JavaScript. Usé JS con fines de demostración para alternar la clase que desencadena el efecto. – dfsq

0

Creo que Animatable debería hacer el truco. Es un marco de CSS Transitions, y aunque yo no desarrollo iOS, Lea Verou menciona que lo prueba en FF y Chrome para iOS.

Hay otras bibliotecas de animación CSS, como move.js que usan transiciones CSS y javascript.

+0

gracias por la respuesta. – sevens

12

Lo sentimos, pero este no es compatible con CSS3 a menos que sepa la altura exacta. No hay forma de animar entre 0 y automático. Si conoce la altura exacta, puede generar algunos códigos de transición aquí: http://css3generator.com/

+0

Eso es lo que estoy buscando la solución sin mencionar 'height' – Muhammed

4

Cierto, no puede animar entre 0 y la altura automática, pero puede alternar la altura máxima.

Alterne (a través de JS) entre la altura máxima: 0 y la altura máxima: 1000 px y obtendrá el resultado logrado, aunque no será tan suave como la función slideToggle de jQuery.

Combínalo con un fundido de opacidad y se ve bastante bien. Sin embargo, sugiero solo usar esta técnica en contenedores relativamente cortos, ya que los más grandes pueden crear una animación desigual.

+1

Interesante. Jugué con esto y no es el tamaño del contenedor lo que lo hace desigual ... es la diferencia entre la 'altura máxima' y la altura real del contenido. Por lo tanto, es posible que también necesite saber la altura del contenido, si desea evitar una experiencia espasmódica (y si conoce la altura del contenido, puede hacer una transición de "altura"). – bryanbraun

3
.container { 
    overflow-y: hidden; 
    max-height: 0; 

    transition: max-height 0.5s ease; 
} 
.container.open { 
    max-height: 1000px; /* approx */ 
} 
Cuestiones relacionadas