hover背景追従・クリック時固定・背景色変更

見本

  • テキスト
  • テキストテキストテキストテキストテキスト
  • テキストテキストテキスト
  • テキスト

説明・補足

アニメ①クリック時と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');
});

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です