2017-11-22 14 views
3

2つのボックスがあり、1つは隠され、もう1つは見えます。デフォルトのボックスがホバーすると消えて、ディスプレイが表示されていないボックスが表示されるようにしたいと思っています。divに置き換える方法(CSSのみ)

ここにはcodeがあります。これは、一度ボックスが1つホバーされているため、まだ見えているので、私はそれが欲しいと思っています。display: noneです。

.box1, .box2{ 
 
    width:100px; 
 
    height 100px; 
 
    border:1px solid black; 
 
    text-align:center; 
 
} 
 

 
.box1{ 
 
    display: block; 
 
} 
 

 
.box2{ 
 
    display: none; 
 
} 
 

 
.box1:hover ~ .box2{ 
 
    display:block; 
 
}
<div class="box1"> 
 
    <p>data 1</p> 
 
</div> 
 

 
<div class="box2"> 
 
    <p>data 2</p> 
 
</div>

ボックスが切り替えたら、それがアニメ化された場合、それは良いかもしれません。

同様の質問がありましたが、すべてがJavaScriptを求められました。私はCSSだけを好む。

前もって感謝します。

答えて

2

次のCSSを持つ2つのdivにラッパーを追加することができます。

.wrapper { 
    width: auto; 
    display: inline-block; 
    background-color: red; //for visuals 
} 

そして、あなたは、このいずれかを試してみてください.box1

.box1, 
 
.box2 { 
 
    width: 100px; 
 
    height: 100px; 
 
    border: 1px solid black; 
 
    text-align: center; 
 
} 
 

 
.box1 { 
 
    display: block; 
 
} 
 

 
.box2 { 
 
    display: none; 
 
} 
 

 
.wrapper { 
 
    width: auto; 
 
    display: inline-block; 
 
    background-color: red; 
 
} 
 

 
.wrapper:hover .box1 { 
 
    display: none; 
 
} 
 

 
.wrapper:hover .box2 { 
 
    display: block; 
 
}
<div class="wrapper"> 
 
    <div class="box1"> 
 
    <p>data 1</p> 
 
    </div> 
 

 
    <div class="box2"> 
 
    <p>data 2</p> 
 
    </div> 
 
</div>

+0

答えをありがとう。あなたはそれにもフェードインとアウトの効果を追加できますか?私は '.webkit-transition:display 600ms ease 0ms;'を '.wrapper'クラスで試しましたが、うまくいきませんでした。 – DannyBoy

+1

残念なことに、 'transition'は' display:none'では動作しません。トランジションのもう一つの種類は、遷移をしたい場合に使うべきです。 – Swellar

0

を非表示にするのを忘れているようです。

.box1, .box2{ 
 
    width:100px; 
 
    height 100px; 
 
    border:1px solid black; 
 
    text-align:center; 
 
    float: left; 
 
} 
 

 
.box1{ 
 
    display: block; 
 
    background: red; 
 
} 
 

 
.box2{ 
 
    display: none; 
 
    margin-left: -102px; 
 
    background: green; 
 
} 
 
.box1:hover{ 
 
    opacity:0; 
 
} 
 
.box1:hover ~ .box2{ 
 
    display:block; 
 
}
<div class="box1"> 
 
    <p>data 1</p> 
 
</div> 
 

 
<div class="box2"> 
 
    <p>data 2</p> 
 
</div>

2

これを試してみてください。私はbox1box2といくつかのCSSをラップするために余分なdivを1つ追加しました。

.box1, .box2{ 
 
    width:100px; 
 
    height: 100px; 
 
    border:1px solid black; 
 
    text-align:center; 
 
    transition:0.5s; 
 
} 
 
.box2 { 
 
    opacity: 0; 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
} 
 
.box-wrap:hover .box2{ 
 
    opacity:1; 
 
    transform:translateY(0px); 
 
} 
 
.box-wrap:hover .box1{ 
 
    opacity:0; 
 
    height:0; 
 
} 
 
.box-wrap{ 
 
    position:relative; 
 
    display:inline-block; 
 
    vertical-align: top; 
 
}
<div class="box-wrap"> 
 
    <div class="box1"> 
 
    <p>data 1</p> 
 
    </div> 
 

 
    <div class="box2"> 
 
    <p>data 2</p> 
 
    </div> 
 
</div>

+1

これは '.box2'が必要とするので、特に応答性が非常に気になります。 '.box1'の場所に正確にあり、' .box1'は常にドキュメントの左上にあるとは限りません – Swellar

+0

@Swellar okですが、親divは 'relative'値を持っているので、親divに依存します。 –

2

これはあなたのために正常に動作します。

私は、あなたの必要とするためにいくつかの移行を使用しています。

あなたの必要性は.box1.box2の周りにdivをラップすることによってのみ達成できます。

.box1, 
 
.box2 { 
 
    width: 100px; 
 
    height 100px; 
 
    border: 1px solid black; 
 
    text-align: center; 
 
    overflow: hidden; 
 
    max-height: 200px; 
 
    opacity: 1; 
 
    transition: all ease-in-out 0.4s; 
 
} 
 

 
.box1 { 
 
    display: block; 
 
} 
 

 
.box2 { 
 
    max-height: 0px; 
 
    opacity: 0; 
 
} 
 
.main_box{ 
 
display:inline-block; 
 
} 
 

 
.main_box:hover .box1{ 
 
    max-height: 0px; 
 
    opacity: 0; 
 
} 
 

 
.main_box:hover .box2{ 
 
    max-height: 200px; 
 
    opacity: 1; 
 
}
<div class="main_box"> 
 
    <div class="box1"> 
 
    <p>data 1</p> 
 
    </div> 
 

 
    <div class="box2"> 
 
    <p>data 2</p> 
 
    </div> 
 
</div>

希望これはあなたのための参考になりました。

0

回答:Mr。@Swellar答えを参照すると、トランジションエフェクトを追加することに気付きました。

.box1, 
 
.box2 { 
 
    width: 100px; 
 
    height: 100px; 
 
    border: 1px solid black; 
 
    text-align: center; 
 
    position: absolute; 
 
    transition: 600ms ease;; 
 
} 
 

 
.box1 { 
 
    opacity: 1; 
 
    visibility: visible; 
 
    background-color: red; 
 
} 
 

 
.box2 { 
 
    opacity: 0; 
 
    visibility: hidden; 
 
    background-color: green; 
 
} 
 

 
.wrapper { 
 
    width: auto; 
 
    display: inline-block; 
 
} 
 

 
.wrapper:hover .box1 { 
 
    opacity: 0; 
 
    visibility: hidden; 
 
} 
 

 
.wrapper:hover .box2 { 
 
    opacity: 1; 
 
    visibility: visible; 
 
}
<div class="wrapper"> 
 
    <div class="box1"> 
 
    <p>data 1</p> 
 
    </div> 
 

 
    <div class="box2"> 
 
    <p>data 2</p> 
 
    </div> 
 
</div>

は、したがって、あなたは代わりにdisplay: nonedisplay: blockの詳細については、次のコードを参照してくださいopacity: 0;visibility: hidden間とopacity: 1;visibility: visibleあなたが切り替わります onhover両方boxsesためposition: absolute、 を設定する必要があります

関連する問題