🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

hover

これは、HTMLの 擬似クラス[hover]に関するタグです。Hoverは与えられた要素へマウスカーソルを置くことを意味します。また、タッチ可能なデバイスでユーザーが要素へタッチすることをHoverと呼ぶ場合もあります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

1148閲覧

v-forで挿入した文字列すべてにスタイルを充てたいが記述方法が分からない

Nishin

総合スコア30

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

hover

これは、HTMLの 擬似クラス[hover]に関するタグです。Hoverは与えられた要素へマウスカーソルを置くことを意味します。また、タッチ可能なデバイスでユーザーが要素へタッチすることをHoverと呼ぶ場合もあります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/03/03 05:26

現在難航していること

Vue.jsの勉強をしており、現在は、v-forで変数の値をhtml画面に出力するところを試行しています。
文字列を画面に出力することは出来たのですが、タイトルのように、出力した値にスタイルの効果を付ける方法が分からずに、その後進展させられていない状態にあります。

ここまでに記述してきたコードは、次のとおりです。

html

1// index.html 2<div id="app"> 3 <h2>My Traffic Route</h2> 4 <h3>出発駅:{{ start }} / 到着駅:{{ goal }}</h3> 5 <ol> 6 <li v-for="route in routes" @mouseover="toggle()"> 7 {{ route.getOn }} —({{route.line}})— {{ route.getOff }} 8 </li> 9 </ol> 10</div> 11<script> 12new Vue({ 13 el: "#app", 14 data: { 15 start: "大宮", 16 goal: "成田", 17 routes: [ 18 { line: "宇都宮線", getOn:"大宮", getOff: "上野" }, 19 { line: "常磐線", getOn:"上野", getOff: "我孫子" }, 20 { line: "成田線", getOn:"我孫子", getOff: "成田" } 21 ] 22 }, 23 methods: { 24 toggle: function(){ 25 // ここにどう書き込むべきなのか 26 } 27 } 28}) 29</script>

追加したテキストにマウスカーソルを当てた時だけ字が赤くなるようにしようとしています(:hoverと同じ効果)。

試みたこと

スクリプトタグ内のVue.jsで、methods:以下を次のように記述してみましたが、企図していた上記の効果(:hover)を発現させられませんでした。

script

1 }, 2 methods: { 3 toggle: function(){ 4 this.style.color = "red" 5 } 6 } 7})

上記の記述ではなく、どのような記述をメソッド内に追加すれば、今回の企図している効果を実装することができるでしょうか。

Vue.jsにまつわる初歩的な問題かとは存じておりますが、ご存じの方がいらっしゃいましたら、ご回答をお願い致します。

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

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

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

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

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

guest

回答3

0

ベストアンサー

スタイルタグを利用するのが一般的です。

Vue Component の仕様 · vue-loader
スコープ付き CSS · vue-loader

投稿2021/03/03 12:21

szk.

総合スコア1400

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

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

Nishin

2021/03/04 01:10

コメントありがとうございます。 また、Vue.jsの機能にまつわるリンクサイトまでご教示頂き、ありがとうございます。 Vue.jsはまだ学習を開始してから日数も浅く、ドットインストールやUdemyの講座で学習している最中なので、応用・派生事項を探す時に参照できる分かりやすいサイトにアクセスできるのはうれしいところです。
guest

0

こんにちは。
mouseoutハンドラを追加する方法ではどうでしょうか。

html

1<li v-for="route in routes" @mouseover="mover" @mouseout="mout" > 2 3<script> 4 methods:{ 5 mover:function(event){ 6 event.target.style.color='red'; 7 }, 8 mout:function(event){ 9 event.target.style.color=''; 10 } 11 } 12</script>

他に最適な方法が有るかもしれませんが、ご参考までに。

投稿2021/03/03 11:58

BlueMoon

総合スコア1339

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

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

Nishin

2021/03/04 01:12

コメントと具体的なコードの記述方法のご教示をありがとうございます。 メソッドの中にさらにマウス系のメソッドを書き込むのですね。 そしてstyleの前に付けるのは「this」でなく「event.target」。 JQuery慣れしてしまってた感がある身としては、プレーンのJSっぽい感じでコードを記述するのには些か苦労しそうですが、慣れていかなきゃなりませんね。
guest

0

https://arrown-blog.com/vuejs-listhighlight-onmouseover/ を参考に
methods:toggle() を使わない場合で書いてみました。

<style> .selected { color: red; } </style> <div id="app"> <h2>My Traffic Route</h2> <h3>出発駅:{{ start }} / 到着駅:{{ goal }}</h3> <ol> <li v-for="route in routes" v-bind:class="{selected:activeItem===route}" @mouseover="activeItem=route" @mouseout="activeItem=''"> {{ route.getOn }} —({{route.line}})— {{ route.getOff }} </li> </ol> </div> <script> new Vue({ el: "#app", data:{ start: "大宮", goal: "成田", routes: [ { line: "宇都宮線", getOn:"大宮", getOff: "上野" }, { line: "常磐線", getOn:"上野", getOff: "我孫子" }, { line: "成田線", getOn:"我孫子", getOff: "成田" } ], activeItem: "", } }) </script>

ちなみに最初に考えた下記のコードだと、1行ごとに色が切り替わりませんでした。(3行まとめて色が変わる)

// 下記はボツ案。3行まとめて色が変わってしまう。 <style> .hover { color: red; } </style> <div id="app"> <h2>My Traffic Route</h2> <h3>出発駅:{{ start }} / 到着駅:{{ goal }}</h3> <ol> <li v-for="route in routes" @mouseover="toggle()" @mouseleave="toggle()" :class="{'hover': hovered}"> {{ route.getOn }} —({{route.line}})— {{ route.getOff }} </li> </ol> </div> <script> new Vue({ el: "#app", data: { start: "大宮", goal: "成田", routes: [ { line: "宇都宮線", getOn:"大宮", getOff: "上野" }, { line: "常磐線", getOn:"上野", getOff: "我孫子" }, { line: "成田線", getOn:"我孫子", getOff: "成田" } ], hovered: false, }, methods: { toggle: function(){ this.hovered = !this.hovered } } }) </script>

投稿2021/03/03 11:50

編集2021/03/03 11:57
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Nishin

2021/03/04 01:14

コメントありがとうございます。 それから複数も分かりやすいコードを提示して頂き、参考になりました。 v-onを複数付けなきゃいけないのがちょっとややこしいですが、やってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問