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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

Q&A

解決済

1回答

4910閲覧

閲覧者がルビの表示・非表示を切り替えられるようにしたい。

runabo

総合スコア11

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

0グッド

1クリップ

投稿2016/08/17 16:55

編集2016/08/17 23:19

###前提・実現したいこと
漢字、カタカナにルビを表示させているのですが、表示ページすべての文字に対して、ルビを表示・非表示と切り替えられるボタンのようなものを組み込みたいのですが、どなたかご指南ください。

###発生している問題・エラーメッセージ
エラーは出ていないが、思っている動作を表現できない。

###該当のソースコード

<script> function show_block(){ if(document.getElementById("hoge").style.display == ""){ document.getElementById("hoge").style.display = "none"; }else{ document.getElementById("hoge").style.display = ""; } } </script> <p><a href="javascript:void(0)" onclick="show_block();">表示切替</a></p> <p><ruby>春<rp>(</rp><span id="hoge"><rt>はる</rt></span><rp>)</rp></ruby>がきた。</p> <p><ruby>夏<rp>(</rp><span id="hoge"><rt>なつ</rt></span><rp>)</rp></ruby>がきた。</p>

id="hoge"は、あらかじめdisplay:none;で、非表示にしておく。

###試したこと
1ページにidは当然1つなので使えませんでした。
一つ目だけ反応します(意味ないです)
idをclassに変えて、document.getElementsByClassName("hoge")
としても反応がありませんでした。

CSSだけで実行できるのが理想的なのですが、勉強不足なJavaScriptを使ってみたら行き詰っています。

ページ内の全テキストルビはこれで表示・非表示切り替えられる。
というものがあれば、上に記入したソースは全部無視してください。

###補足情報(言語/FW/ツール等のバージョンなど)
今使われている主だったブラウザで動作してほしい。

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

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

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

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

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

kei344

2016/08/17 16:58

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「</>」ボタンを押すとコードブロックになります。
kei344

2016/08/17 17:22

質問タグにある「JAVA」は「JavaScript」の間違いでしょうか。あと、Rubytagは言語のほうのRubyだと思います。
guest

回答1

0

ベストアンサー

HTML

1<style> 2rt { 3 display: none; 4} 5.ruby_flag rt { 6 display: block; 7} 8</style> 9<script> 10function show_block() { 11 document.body.classList.toggle( 'ruby_flag' ); // IE10+ 12} 13</script> 14<p><a href="javascript:void(0)" onclick="show_block();">表示切替</a></p> 15<p><ruby>春<rp>(</rp><rt>はる</rt><rp>)</rp></ruby>がきた。</p> 16<p><ruby>夏<rp>(</rp><rt>なつ</rt><rp>)</rp></ruby>がきた。</p> 17```**動くサンプル:**[https://jsfiddle.net/2n9mz3wd/](https://jsfiddle.net/2n9mz3wd/) 18 19--- 20 21書かれている位置に span要素は仕様上置けませんので、削除してあります。 22 23【rt 要素 - HTML | MDN】 24[https://developer.mozilla.org/ja/docs/Web/HTML/Element/rt](https://developer.mozilla.org/ja/docs/Web/HTML/Element/rt) 25> 許可された親要素 <ruby> 要素 26 27【rp 要素 - HTML | MDN】 28[https://developer.mozilla.org/ja/docs/Web/HTML/Element/rp](https://developer.mozilla.org/ja/docs/Web/HTML/Element/rp) 29> <rt> 要素の直前または直後に配置しなければなりません。 30 31--- 32 33クラスを付与していますが、idを付与する方法でも同じようなやり方が使えます。 34```JavaScript 35document.body.setAttribute( 'id', 'ruby_flag' );

CSS

1#ruby_flag rt { 2 display: block; 3}

【element.classList - Web API インターフェイス | MDN】
https://developer.mozilla.org/ja/docs/Web/API/Element/classList


追記:

ruby の display がFirefoxの場合特殊なようで、CSSでの指定方法がわかりませんでした。なので、CSSを下記のように変えてみてください。rp にも対応できると思います。

CSS

1ruby { 2 ruby-position: over; 3 ruby-position: before; 4} 5rt, rp { 6 font-size: 0; 7 opacity: 0; 8} 9.ruby_flag rt, 10.ruby_flag rp { 11 opacity: 1; 12} 13.ruby_flag rt { 14 font-size: 50%; 15} 16.ruby_flag rp { 17 font-size: 1em; 18} 19```**動くサンプル:**[https://jsfiddle.net/2n9mz3wd/2/](https://jsfiddle.net/2n9mz3wd/2/)

投稿2016/08/17 17:26

編集2016/08/18 11:58
kei344

総合スコア69625

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

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

runabo

2016/08/17 23:15

ありがとうございます。 「この動作をしてほしかった」というものになっていました。 同じ動きをするようなので今回はclassを使ってみます。 ★質問に記載していなかったので、追加の質問です。 ルビは文字の上につくものだと思っていたのですが、文字の後ろにしかつけられないのでしょうか? 位置をCSSで上指定にしようかと思ったのですが、未対応のブラウザばかりで、 ruby-positionで指定しても反応はありませんでした。 https://developer.mozilla.org/ja/docs/Web/CSS/ruby-position これが解決すれば完璧だと思います。 よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2016/08/17 23:47

これブラウザ仕様によっては 一期一会() 一期一会(いちごいちえ) と表示される気がするが
runabo

2016/08/18 00:23

Firefoxを使っています。 Chromeだと完璧です。 両方windowsで確認していますがwindows、Mac、ブラウザ関係なく同じ見え方にしたいのです。(Macは友人に確認中) Firefoxでは 一期一会いちごいちえ と表示されルビの「いちごいちえ」は50%ぐらいの大きさです。 ()は付きません。 Firefoxが対応していないだけでしょうか? Firefox、Chrome、IE、Edge、safari など主だったブラウザで同じ見え方にしたいのです。 レイアウトが崩れるのを避けたいので。 ルビが文字の上に表示されても上下にズレますが、それを含めてレイアウトします。
kei344

2016/08/18 04:44

To: haruka-kanataさん はい。displayでの切り替えで書いていたため、そうなります。改訂版では多分大丈夫だと思います。 To: runaboさん 改訂版を追記しました。
runabo

2016/08/18 05:27

ありがとうございました。 素晴らしい出来だと思います。 さっそくサイト制作に取り掛かろうと思います。 「動くサンプル」ページで ruby { ruby-position: over; ruby-position: before; } rt, rq { opacity: 0; } .ruby_flag rt, .ruby_flag rq { opacity: 1; } このようにまとめられて?いましたが、 短いほうがいいかと、こちらをコピーしてみたところ、 同じように動作したのでこちらを使用します。 しかし「.ruby_flag rq」とありますが、 「rp」が「rq」となっていても「()」は表示しないので動作に影響がなかったということでしょうか? winのファイアフォックス、macのクロムなどで期待通りの動作をしています。 ありがとうございました。
kei344

2016/08/18 11:56

すいません、タイプミスです、直しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問