Maison > Questions et réponses > le corps du texte
P粉0557261462023-08-28 10:37:41
Vous devriez utiliser scaleY.
ul { background-color: #eee; transform: scaleY(0); transform-origin: top; transition: transform 0.26s ease; } p:hover ~ ul { transform: scaleY(1); }
<p>Hover This</p> <ul> <li>Coffee</li> <li>Tea</li> <li>Milk</li> </ul>
J'ai créé une version préfixée par le fournisseur du code ci-dessus sur jsfiddle et j'ai modifié votre jsfiddle pour utiliser scaleY au lieu de height.
Modifier
Certaines personnes n'aiment pas scaleY
转换内容的方式。如果这是一个问题,那么我建议使用 clip
à la place.
ul { clip: rect(auto, auto, 0, auto); position: absolute; margin: -1rem 0; padding: .5rem; color: white; background-color: rgba(0, 0, 0, 0.8); transition-property: clip; transition-duration: 0.5s; transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275); } h3:hover ~ ul, h3:active ~ ul, ul:hover { clip: rect(auto, auto, 10rem, auto); }
<h3>Hover here</h3> <ul> <li>This list</li> <li>is clipped.</li> <li>A clip transition</li> <li>will show it</li> </ul> <p> Some text... </p>
P粉2427419212023-08-28 00:29:46
Utilisez max-height
,而不是height
。并将 max-height
dans la transition et définissez la valeur sur une valeur supérieure à celle de votre boîte.
Voir la réponse de Chris Jordan ici dans une autre démo JSFiddle /stackoverflow.com/a/20226830/18706">
#menu #list { max-height: 0; transition: max-height 0.15s ease-out; overflow: hidden; background: #d5d5d5; } #menu:hover #list { max-height: 500px; transition: max-height 0.25s ease-in; }
<div id="menu"> <a>hover me</a> <ul id="list"> <!-- Create a bunch, or not a bunch, of li's to see the timing. --> <li>item</li> <li>item</li> <li>item</li> <li>item</li> <li>item</li> </ul> </div>