3

私はこれを約2日間調べてきました。

これはかなり複雑な設計なので、ここに貼り付けるコードを減らすために、この jsfiddle のメイン構造を再作成し、この記事の最後に簡略化されたコードを含めました。

http://jsfiddle.net/rwone/zwxpG/10/

シナリオ

<li>最初にプロパティdisplay: noneを持つdiv(データベースからの動的コンテンツを含む)を含む 多数のコンテナがあります。

ただし、これら<li>の画像にカーソルを合わせると、div が表示されます。

それは機能していますが、div はコンテナー内の他の要素の下にあるように見えます。

私が試したこと

z-index と絶対および相対位置の組み合わせを試しましたが、まだ解決策を見つけることができませんでした。

以下のコードとjsfiddle( として表示/* comments */)で2つの原因を特定しましたが、これらはライブテストサイトでは機能しません。

質問

したがって、私の質問は、ホバー状態の div がそれを囲んでいるコンテナーの上と外側に表示されるようにする別の方法はありますか?

これらの問題をライブサイトではなくjsfiddleで修正できるのは理想的な解決策ではありませんが、これに完全にアプローチする別の方法があるかどうか尋ねたいと思いましたか?

ありがとうございました。

html

<div id="wrapper">
<div id ="hbar_one"></div>
<div id="hbar_two"></div>
<div id="container_a">
<div  id="container_b">
<ul>
<li>
hover me #1
<div id="container_c">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In fringilla porttitor ante ut varius. Fusce volutpat velit ut orci porttitor cursus. Donec est eros, tempor ac elementum et, volutpat sit amet lorem. Mauris iaculis eros nec sapien hendrerit at sodales nibh iaculis. Morbi imperdiet porta est vitae suscipit. Curabitur sit amet diam in nulla consectetur placerat. Etiam in sapien ac mi scelerisque congue eu id lectus. Proin fermentum auctor turpis vel adipiscing. Maecenas at convallis sapien.
</div>
</li>
<li>
hover me #2
<div id="container_c">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In fringilla porttitor ante ut varius. Fusce volutpat velit ut orci porttitor cursus. Donec est eros, tempor ac elementum et, volutpat sit amet lorem. Mauris iaculis eros nec sapien hendrerit at sodales nibh iaculis. Morbi imperdiet porta est vitae suscipit. Curabitur sit amet diam in nulla consectetur placerat. Etiam in sapien ac mi scelerisque congue eu id lectus. Proin fermentum auctor turpis vel adipiscing. Maecenas at convallis sapien.
</div>
</li>
</ul>
</div>
</div>
<div id="hbar_three"></div>
<div id="hbar_four"></div>
</div>

CSS

#wrapper {
 width: 300px;   
}
#hbar_one {
 background: #cc0000;   
 height: 50px;
}

#hbar_two {
 background: #ffcc00;   
 height: 50px;
}

#container_b {
    height: 50px;
/* cause one - on its own, this causes the undesired 'underneath' effect */
    overflow-y: auto;
}

ul li {
    display: inline;
/* cause two - on its own, this causes the undesired 'underneath' effect */
    position: relative;   
}

#container_c {
    display: none;
}

ul li:hover #container_c {
 background: #00AFF0;
 display: block;
 width: 200px;
 height: 200px;
 position:absolute;
 top: -20px;
 left: 50px; 
 z-index: 999;  
overflow: hidden;    
}

#hbar_three {
 background: #cccccc;   
 height: 50px;
}

#hbar_four {
 background: #000000;   
 height: 50px;
}

アップデート

以下の回答に応じて、ホバー時に表示されている実際のコンテンツ ( #container_cdiv 内のすべて) に関する詳細情報を次に示します。それぞれ<li>に独自のコンテンツがあります。

​&lt;li class=".class1 .class2">
<img src="http://path/to/image.jpg">
<div id="container_c">
<h4>title</h4>
<div id="container_c_left">
<span id="cl1">text</span>
<span id="cl2">text</span>
<span id="cl3">text</span>
</div>
<div id="container_c_right">
<span id="cr1">text</span>
<span id="cr2">text</span>
</div>
<span id="cc1">text</span>
<span id="cc2"><a class= "linkclass" href="http://path/to/link.html">link</a></span>
</div>
</li>
4

3 に答える 3

0

一度にこれらのホバー要素の1つだけを表示したいですか?

本体の外側に1つのDIVを配置し、非表示にします。

次に、JavaScriptを使用して、LIにカーソルを合わせるたびにその位置とコンテンツを調整します。

すべてのLIに独自のDIVを与える必要はありません。

データ属性内にコンテンツを保存します

<li id=something data-some-content="Hello joe">

次に、jQueryで次のように取得できます

$("#something").data('some-content')
于 2012-11-14T04:06:17.133 に答える
0

解決策は、@NoPyGodのjqueryの提案と、絶対位置と相対位置がどのように機能するかをよりよく理解することの混合でした。

基本的に、絶対位置と相対位置が div に適用される場合、この位置は、絶対位置または相対位置が定義された最後の要素の位置に対して相対的であり、作業中の div の「コンテナー」です。

オーバーフローした「コンテナー」から逃れるために: auto と固定の高さと幅、オーバーフローによって制約されていない親 div まで、誤った配置を削除し、ホバー状態の div に影響を与えていた高さと幅の制​​限を削除する必要がありました。

動作する jsfiddle は次のとおりです。

http://jsfiddle.net/rwone/eeaAr/

また、ページごとに 1 つの ID のみを持ち、残りの div をクラスによって識別されるように変更するという @Deepak Kamat の提案を実装しました。

その後、以下の記事を読みましたが、今回はより意味があり、このコンテキストで作業した後です。

http://css-tricks.com/the-difference-between-id-and-class/

ご協力いただきありがとうございます。

html

<div id="wrapper">
<div id ="hbar_one"></div>
<div id="hbar_two"></div>
<div id="container_a">
<div id="container_b">
<div class="class1 class2 magic" data-unique-content=".hidden_db_data_div">
<img src="http://lorempixel.com/g/50/50/">
<div class="hidden_db_data_div">
some amazing html
</div>
</div>
<div class="class1 class2 magic" data-unique-content=".hidden_db_data_div">
<img src="http://lorempixel.com/g/50/50/">
<div class="hidden_db_data_div">
more amazing html
</div>
</div>
<div class="class1 class2 magic" data-unique-content=".hidden_db_data_div">
<img src="http://lorempixel.com/g/50/50/">
<div class="hidden_db_data_div">
even more amazing html
</div>
</div>
</div>
</div>
<div id="hbar_three"></div>
<div id="hbar_four"></div>
</div>

CSS

#wrapper {
width: 300px;   
}
#hbar_one {
background: #cc0000;   
height: 50px;
}

#hbar_two {
background: #ffcc00;   
height: 50px;
}

#container_b {
height: 100px;
overflow-y: auto;
}

.hidden_db_data_div {
display: none;
background: #00AFF0;
width: 120px;
height: 150px;
color: red;
position:absolute;
overflow: hidden; 
z-index: 999;  
}

img {
width: 50px;
height: 50px;
}

.magic {
display: inline;
}

#container_a { position:relative; }

#hbar_three {
background: #cccccc;   
height: 50px;
}

#hbar_four {
background: #000000;   
height: 50px;
}

脚本

$(".magic").hover(
function () {
$(this)
.find('.hidden_db_data_div')
.css({'left':$(this).position().left+20 + "px", 'top':'-20px'})
.fadeIn(200);
},
function() { 
$(this)
.find('.hidden_db_data_div')
.fadeOut(100);
}                
);
于 2012-11-14T17:23:02.027 に答える
0

CSS スタイルは正しいですが、HTML には と を含む 2 つの<div>要素がありid='container_c'、これは無効です。ID は一意であり、2 つ以上の要素に同じ ID を指定することはできません。2 つ以上の要素に同じスタイルを指定する場合class='container_c'は、CSS で変更して#container_c みてください。.container_c

固定バージョンについては、このフィドルを確認してください http://jsfiddle.net/DeepakKamat/zwxpG/13/

于 2012-11-14T04:12:33.407 に答える