1. ホーム
  2. jquery

CSS3やjQueryで、要素の幅を0から100%までアニメートし、その要素とラッパーを必要な幅だけ、事前に設定した幅なしで表示する

2023-12-03 02:07:30

質問

http://jsfiddle.net/nicktheandroid/tVHYg/

ホバーリング時 .wrapper にカーソルを合わせると、その子要素である .contents からアニメーションする必要があります。 0px から自然な幅になるようにアニメーションします。そして、マウスが .wrapper からマウスを離すと、それはアニメーションで 0px . このとき .wrapper 要素は必要なだけの幅にする必要があります (これにより .contents が大きくなるように)、そのため .wrapper のように幅が伸びたり縮んだりするはずです。 .contents がそうであるように。の幅は設定されるべきではありません。 .contents . 私はCSS3を使っていますが、jQueryでも実現できますので、それで結構です。

問題点です。 JSfiddleを参照してください。

  1. .wrapper は必要なだけの幅があるわけではありません。
  2. になると .contents が成長し、ほぼ全幅になったところで次の行にジャンプします。
  3. の下にカーソルを置くと .wrapper , .contents へとアニメーションするはずなのに、消えてしまう。 0px

.wrapper {
    display: inline-block;

    height: 20px;
    width: auto;
  
    padding:10px;
  
    background:#DDD;
}

.contents {
    display:inline-block;
  
    width:0%;
  
    white-space:nowrap;
    overflow:hidden;
  
    background:#c3c;
}

.wrapper:hover .contents {
    -webkit-transition: width 1s ease-in-out;
    -moz-transition: width 1s ease-in-out;
    -o-transition: width 1s ease-in-out;
    transition: width 1s ease-in-out;

    width:100%;
}
<div class="wrapper">
    <span>+</span>
    <div class="contents">These are the contents of this div</div>
</div>

どのように解決するのですか?

できたと思うのですが。

.wrapper {
    background:#DDD;
    display:inline-block;
    padding: 10px;
    height: 20px;
    width:auto;
}

.label {
    display: inline-block;
    width: 1em;
}

.contents, .contents .inner {
    display:inline-block;
}

.contents {
    white-space:nowrap;
    margin-left: -1em;
    padding-left: 1em;
}

.contents .inner {
    background:#c3c;
    width:0%;
    overflow:hidden;
    -webkit-transition: width 1s ease-in-out;
    -moz-transition: width 1s ease-in-out;
    -o-transition: width 1s ease-in-out;
    transition: width 1s ease-in-out;
}



.wrapper:hover .contents .inner {
   
    width:100%;
}
<div class="wrapper">
    <span class="label">+</span><div class="contents">
        <div class="inner">
            These are the contents of this div
        </div>
    </div>
</div>

へのアニメーション 100% へのアニメーションの場合、ボックスが利用可能な幅(100% から を引いた値)よりも大きいため、折り返されてしまいます。 + とそれに続く空白を引いた100%)よりも大きいため、折り返しが発生します。

代わりに、内部要素をアニメーション化することができます。 100% の幅の合計が .contents .