Wie kann ich den übergang height: 0; auf height: auto; Verwendung von CSS?

Ich versuche, eine <ul> nach unten schieben, mit CSS-übergängen.

Den <ul> beginnt bei height: 0;. Auf schweben, die Höhe ist festgelegt height:auto;. Dies ist jedoch verursachen, dass es zu einfach erscheinen, nicht übergang,

Wenn ich es von height: 40px; zu height: auto;, dann wird es oben schieben, um height: 0;, und dann plötzlich springen Sie auf die richtige Höhe.

Wie könnte ich sonst tun, ohne JavaScript zu verwenden?

CSS:

#child0 {
  height: 0;
  overflow: hidden;
  background-color: #dedede;
  -moz-transition: height 1s ease;
  -webkit-transition: height 1s ease;
  -o-transition: height 1s ease;
  transition: height 1s ease;
}
#parent0:hover #child0 {
  height: auto;
}
#child40 {
  height: 40px;
  overflow: hidden;
  background-color: #dedede;
  -moz-transition: height 1s ease;
  -webkit-transition: height 1s ease;
  -o-transition: height 1s ease;
  transition: height 1s ease;
}
#parent40:hover #child40 {
  height: auto;
}
h1 {
  font-weight: bold;
}

HTML:

The only difference between the two snippets of CSS is one has height: 0, the other height: 40.
<hr>
<div id="parent0">
  <h1>Hover me (height: 0)</h1>
  <div id="child0">Some content
    <br>Some content
    <br>Some content
    <br>Some content
    <br>Some content
    <br>Some content
    <br>
  </div>
</div>
<hr>
<div id="parent40">
  <h1>Hover me (height: 40)</h1>
  <div id="child40">Some content
    <br>Some content
    <br>Some content
    <br>Some content
    <br>Some content
    <br>Some content
    <br>
  </div>
</div>

  • Ich glaube, die height:auto/max-height Lösung wird nur funktionieren, wenn Sie sind wachsende Bereich ist größer als der height Sie einschränken möchten. Wenn Sie eine max-height von 300px, aber ein Kombinationsfeld, dropdown, die Rückkehr 50px, dann max-height wird dir nicht helfen, 50px ist variabel und hängt von der Anzahl der Elemente, die Sie können kommen, um eine Unmögliche situation ich kann es nicht reparieren, weil die height ist nicht festgelegt, height:auto war die Lösung, aber ich kann nicht verwenden Sie übergänge mit dieser.
  • OP versucht für css-Lösung, nicht js, sonst könnten Sie Sie nur verwenden, überlauf und animieren
  • Aber die inneren div ' s -100% margin-top erhält die Breite des wrapper-div, nicht die Höhe. Also diese Lösung hat die gleiche Art von problem, dass die max-Höhe-Lösung. Außerdem, wenn die Breite kleiner ist als die Höhe der Inhalte, alle Inhalte sind nicht versteckt, die von -100% margin-top. Das ist also eine falsche Lösung.
  • Siehe github.com/w3c/csswg-drafts/issues/626 für die Diskussion um die Spezifikation und Implementierung einer geeigneten Lösung
InformationsquelleAutor Hailwood | 2010-08-18
Schreibe einen Kommentar