質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

2回答

2203閲覧

CSSのactiveについて

退会済みユーザー

退会済みユーザー

総合スコア0

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/04/05 01:05

前提・実現したいこと

CSSのactiveを指定するとクリックしてる間変化を起こす事ができるのですが、
その変化を維持するにはどうすればいいのでしょうか?

例えば
メニュー1 メニュー2 メニュー3とあった場合に、
クリックしたメニューの背景色を変えて、ほかのメニューをクリックするまで背景色を維持したいです
CSSでできるのでしょうか?
JavaScript使わないと無理でしょうか?

該当のソースコード

CSS

1<style> 2div:hover{ 3 background-color:blue; 4} 5 6div:active{ 7 background-color:red; 8} 9</style> 10 11 12<div>メニュー1</div> 13<div>メニュー2</div> 14<div>メニュー3</div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

JavaScript使わないと無理でしょうか?

基本的にはそうです。「クリックした状態をラジオボタンで記録させる」ような方法を取ればCSSだけで実装できるかもしれませんが、レイアウトにも制約が生じますので、あまりおすすめはしません。

投稿2020/04/05 01:09

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

HTMLとCSSだけの方法と、JavaScriptを用いた方法とがあると思います。

案1. HTML + CSSのみ

HTML

1<label><input type="radio" name="aaa"><span>メニュー1</span></label> 2<label><input type="radio" name="aaa"><span>メニュー2</span></label> 3<label><input type="radio" name="aaa"><span>メニュー3</span></label>

CSS

1label { 2 display: block; /* 好きなように設定をしてください */ 3} 4label input[type="radio"] { 5 opacity: 0; 6 position: absolute; 7 /* width、font-size、z-indexなどでラジオボタンを触りにくくする方法を追加してもいいです。 */ 8} 9label span { 10 display: block; /* 好きなように設定をしてください */ 11} 12label input[type="radio"] ~ span:hover { 13 background-color: blue; 14} 15label input[type="radio"] ~ span:active, 16label input[type="radio"]:checked ~ span { 17 background-color: red; 18}

案2. HTML + CSS + JavaScript

HTML

1<div>メニュー1</div> 2<div>メニュー2</div> 3<div>メニュー3</div>

CSS

1div:hover { 2 background-color: blue; 3} 4div:active, 5div.active { 6 /* 選択している状態の */ 7 background-color: red; 8}

JS

1var elm = document.querySelectorAll('div'); 2 3for (let i = 0; i < elm.length; i++) { 4 elm[i].addEventListener('click', () => { 5 // すべてのdivからactiveクラスを削除 6 for (let j = 0; j < elm.length; j++) { 7 elm[j].classList.remove('active'); 8 } 9 10 // クリックした要素にactiveクラスを追加 11 elm[i].classList.add('active'); 12 }); 13}

jQueryなら、for文のない、もう少しシンプルな記述で実装できると思います。

投稿2020/04/05 01:40

編集2020/04/05 01:57
new1ro

総合スコア4528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/05 01:58

動きました ありがとうございます maisumakunさんの言うようにこのソースだとレイアウトにも制約が生じますでしょうか?
new1ro

2020/04/05 02:03

制約が生じることもあると思いますが、工夫次第で回避も可能だとは思います。 (最終的にどのような見た目にしたいのかわからないので断言はできないですが) タブを横に並べるだけなら、あまり問題はないように思えますが、 基本的にdisplay: block;、display: flex;などの指定には気を払う必要はありそうです。
退会済みユーザー

退会済みユーザー

2020/04/05 02:06

jQueryまでわざわざ書いていただきありがとうございます。 できればCSSのほうで実装したく、考えております。 もし、メニュー1 メニュー2 メニュー3 これが2か所別々の場所にあり、それぞれの中で反応させるにはどうしたらいいでしょうか? <style> label { display: block; /* 好きなように設定をしてください */ } label input[type="radio"] { opacity: 0; position: absolute; /* width、font-size、z-indexなどでラジオボタンを触りにくくする方法を追加してもいいです。 */ } label span { display: block; /* 好きなように設定をしてください */ } label input[type="radio"] ~ span:hover { background-color: blue; } label input[type="radio"] ~ span:active, label input[type="radio"]:checked ~ span { background-color: red; } </style> <label><input type="radio" name="aaa"><span>メニュー1</span></label> <label><input type="radio" name="aaa"><span>メニュー2</span></label> <label><input type="radio" name="aaa"><span>メニュー3</span></label> <label><input type="radio" name="aaa"><span>メニュー1</span></label> <label><input type="radio" name="aaa"><span>メニュー2</span></label> <label><input type="radio" name="aaa"><span>メニュー3</span></label>
退会済みユーザー

退会済みユーザー

2020/04/05 02:14

もう一つお聞きしたいのですが、 最初からメニュー1がbackground-color:redの状態にしたいのですが、 下記コードにしたところ、メニュー1の赤色がずっと残る状態となりました 何か方法はありますでしょうか? <style> label { display: block; /* 好きなように設定をしてください */ } label input[type="radio"] { opacity: 0; position: absolute; /* width、font-size、z-indexなどでラジオボタンを触りにくくする方法を追加してもいいです。 */ } label span { display: block; /* 好きなように設定をしてください */ } label input[type="radio"] ~ span:hover { background-color: blue; } label input[type="radio"] ~ span:active, label input[type="radio"]:checked ~ span { background-color: red; } </style> <label style="background-color:red"><input type="radio" name="aaa"><span>メニュー1</span></label> <label><input type="radio" name="aaa"><span>メニュー2</span></label> <label><input type="radio" name="aaa"><span>メニュー3</span></label>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問