「hover」セレクターと「nth-of-type」を使用して、CSS 自体でこれを行うことができます。
3 行目ごとに選択します。
:nth-of-type(3), :nth-of-type(7), :nth-of-type(13), :nth-of-type(15)
そして4行目:
:nth-of-type(4), :nth-of-type(8), :nth-of-type(12), :nth-of-type(16)
そして、そのフライアウト ボックスに必要なプロパティを与えます。
デモ: http://dabblet.com/gist/3765761
マークアップ:
<div class='box'>1
<div class='fly-out'></div>
</div>
<div class='box'>2
<div class='fly-out'></div>
</div>
<div class='box right-aligned'>3
<div class='fly-out'></div>
</div>
<div class='box right-aligned'>4
<div class='fly-out'></div>
</div>
<div class='box'>5
<div class='fly-out'></div>
</div>
<div class='box'>6
<div class='fly-out'></div>
</div>
<div class='box right-aligned'>7
<div class='fly-out'></div>
</div>
<div class='box right-aligned'>8
<div class='fly-out'></div>
</div>
<div class='box'>9
<div class='fly-out'></div>
</div>
<div class='box'>10
<div class='fly-out'></div>
</div>
<div class='box right-aligned'>11
<div class='fly-out'></div>
</div>
<div class='box right-aligned'>12
<div class='fly-out'></div>
</div>
<div class='box'>13
<div class='fly-out'></div>
</div>
<div class='box'>14
<div class='fly-out'></div>
</div>
<div class='box right-aligned'>15
<div class='fly-out'></div>
</div>
<div class='box right-aligned'>16
<div class='fly-out'></div>
</div>
CSS:
* {
margin: 0;
padding: 0;
box-sizing: border-box; /* paulirish.com/2012/box-sizing-border-box-ftw/ */
position: relative;
}
body {
width: 440px;
margin: 0 auto;
}
.box {
width: 100px;
height: 100px;
border: 1px solid #999;
float: left;
margin: 5px;
}
.fly-out {
position: absolute;
top: 0;
background: rgba(0,0,0,.4);
opacity: 0;
z-index: -1;
}
.box:hover .fly-out {
z-index: 1;
opacity: 1;
height: 100%;
width: 210px;
}
.box:nth-of-type(3):hover .fly-out,
.box:nth-of-type(7):hover .fly-out,
.box:nth-of-type(11):hover .fly-out,
.box:nth-of-type(15):hover .fly-out,
.box:nth-of-type(4):hover .fly-out,
.box:nth-of-type(8):hover .fly-out,
.box:nth-of-type(12):hover .fly-out,
.box:nth-of-type(16):hover .fly-out,
.right-aligned {
left: -110px;
right: 0;
background: rgba(0,0,120,.7);
}
あなたのマークアップでは、「ツールチップ」はボックスの外側にあり、「可視性:非表示」でした。これは、「不透明度:0」を与えるのとほとんど同じです。目には見えませんが、まだそこにあります。実際にレイアウトで使用できないようにするには、「display: none」が必要ですが、CSS トランジションを使用して適切にアニメーション化することはできません。
注:以下のコメントで言及されている Christofer Eliason のように、「:nth-of-type」セレクターはあまりサポートされていないため、フライアウトを右揃えにするか、調べたいすべての div にクラスを追加できます。 「nth-of-type」の jquery バージョンを使用: https://stackoverflow.com/a/4761510/604040。
「:nth-of-type」セレクターを使用したのは、新しいボックスが動的に追加された場合、新しいボックスにクラスを追加しなくても、CSS 自体からフライアウトの配置を制御できるためです。これは数学的に少し複雑になる可能性があります (少なくとも私のため)。
しかし、それでよろしければ、各行の 3 番目と 4 番目のボックスに「.right-aligned」クラスを追加しました。CSS でこのブロックを削除しても問題ありません。
.box:nth-of-type(3):hover .fly-out,
.box:nth-of-type(7):hover .fly-out,
.box:nth-of-type(11):hover .fly-out,
.box:nth-of-type(15):hover .fly-out,
.box:nth-of-type(4):hover .fly-out,
.box:nth-of-type(8):hover .fly-out,
.box:nth-of-type(12):hover .fly-out,
.box:nth-of-type(16):hover .fly-out