見本
説明・補足
アニメ①クリック時とhover時 背景色の変更背景の色は各要素のdata-colorに入力されたカラーコードの色に変化する
アニメ②クリック時 背景位置の固定
背景はクリックした要素の位置に固定される
アニメ③hover時 背景の追従
背景はhoverした要素の位置に追従する
↓
hover解除すると直前にクリックした要素の位置に戻り、背景色は元に戻る
▼注意事項
各要素と背景の高さは固定です。動的にする場合はjsが別途必要かと思います。
HTML
<div class="hover1"><ul class="hover1_menu"><li data-color="dd3939">テキスト</li><li data-color="dd8239">テキストテキストテキストテキストテキスト</li><li data-color="39dd86">テキストテキストテキスト</li><li data-color="397fdd">テキスト</li></ul><div class="hover1_bg"></div></div>
CSS
.hover1 {
position: relative;
z-index: 0;
}
.hover1_menu {
display: flex;
flex-wrap: wrap;
text-align: center;
}
.hover1_menu_item,
.hover1_bg {
width: calc(100% / 4);
height: 120px;
}
.hover1_menu_item {
display: flex;
flex-flow: column;
justify-content: center;
padding: 10px;
}
.hover1_bg {
height: 100%;
background-color: #dd3939;
opacity: .5;
position: absolute;
left: 0;
top: 0;
z-index: -1;
transition: all 0.5s;
}
js
const $btn = '.hover1_menu_item';
function nav_bg(selector) {//ナビ背景の動き
let pos = $(selector).position();
let color = $(selector).data('color');
$(".hover1_bg").css({
top: pos.top,
left: pos.left,
backgroundColor: "#" + color
});
}
//初期設定
nav_bg('.hover1_menu_item:first-child');
$('.hover1_menu_item:first-child').addClass('active');
$($btn).on('click', function() {//クリック時
$($btn).removeClass('active');
$(this).addClass('active');
nav_bg(this);
});
$($btn).hover(function(){//マウスオーバー時
nav_bg(this);
}, function(){//マウスオーバー解除
nav_bg($btn + '.active');
});