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

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

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

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

HTML

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

CSS

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

Q&A

解決済

4回答

472閲覧

CSSを用いて表示内容の切り替えをした際の問題

yaschi

総合スコア35

JavaScript

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

HTML

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

CSS

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

0グッド

1クリップ

投稿2018/07/14 05:51

編集2018/07/15 01:06

こちらを参考にして表示内容を切り替えるようにしました。
しかし、構造上自動でindex.html#Japaneseのようにハッシュ値を付与しなければならないので、.htaccessを利用しindex.htmlからindex.html#Japaneseに301リダイレクトをすればできると思い実行した所失敗しました。
JavaScriptを利用すれば可能かと考えましたが知識がないためどなたかお知恵をお貸しください。
よろしくお願いします。

HTML

1<style> 2.content { 3 display: none; 4} 5 6.content:target { 7 display: block; 8} 9</style> 10<a href="#Japanese">日本語</a><a href="#English">英語</a><a href="#Chinese">中国語</a> 11<div id='Japanese' class='content'> 12日本語 13</div> 14<div id='English' class='content'> 15英語 16</div> 17<div id='Chinese' class='content'> 18中国語 19</div>

試したもの

<Files ~ "^.ht"> deny from all </Files> # Redirect Redirect permanent /index.html http://sample.com/index.html#Japanese

→「多くのリダイレクトが発生しました」

<Files ~ "^.ht"> deny from all </Files> # Redirect Redirect permanent /index.html http://ユーザー名.starfree.jp/index.html#Japanese RewriteCond %{REMOTE_ADDR} !=157.112.187.101

→「多くのリダイレクトが発生しました」

こちらで再度質問しました。

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

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

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

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

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

m.ts10806

2018/07/14 05:57

せめて自身が書いたコードを提示しましょう。タイトルが「表示の切り替え」で質問内容が「内容を切り替える」で若干ずれています。何をどうしたいのか、要件を具体的に記載してください。
yaschi

2018/07/14 06:07

追記させていただきました
m.ts10806

2018/07/14 06:11 編集

(2回目)タイトルが「表示の切り替え」で質問内容が「内容を切り替える」で若干ずれています。何をどうしたいのか、要件を具体的に記載してください
yaschi

2018/07/14 06:18

記載いたしましたがまだ不十分でしょうか?
m.ts10806

2018/07/14 06:20

1文ずつしか読まれませんかね…
yaschi

2018/07/14 06:21

具体的という意味がわかりません。IDを自動的に付与したい。これ以上具体的な要件というのが私自身思いつきませんが
m.ts10806

2018/07/14 06:29 編集

できれば.htaccessで何をしようとしたかも知りたいですけどね。基本サーバー側のことしか関知しないものなので、どこからその情報を得て何をやろうとしてどう失敗したのか。JavaScriptで出来そうという見込みがあるのでしたら知識がないなりにある程度調べてやってもらいたいところです。「やってみたこと 」具体的なコードの提示もないので丸投げとなっています。
m.ts10806

2018/07/14 09:01

「URLハッシュ値による切り替え」が目的かと思いましたがそうではないようですね。それならすぐ回答がつくはずなので。やはり要件が不十分です。「日本語にする」「中国語にする」「英語にする」など言語切り替え?のトリガーは何でしょう?URLに何もない場合はどうするのか、ハッシュ値あるけど感知していない言語、めちゃくちゃな文字列が渡されたらどうするのか、そこも含めないと回答が難しいです。
yaschi

2018/07/14 14:19 編集

おっしゃる通りハッシュ値による表示内容の切り替えについての質問です。切り替えのトリガーは編集しましたがaタグで実装しています。ハッシュ値が何もない場合やめちゃくちゃな文字列が渡された場合は何も表示しなくと良いと考えています。
guest

回答4

0

:target疑似クラス

.content の順番を変更すれば、CSSのみでも実装可能です。
(元の順番を維持するのであれば、:has() が実装される必要があります)

HTML

1<style> 2.content:target~#Japanese, #English:not(:target), #Chinese:not(:target) { 3 display: none; 4} 5</style> 6</head> 7<body> 8<a href="#Japanese">日本語</a> <a href="#English">英語</a> <a href="#Chinese">中国語</a> 9<div id='English' class='content'>英語コンテンツ</div> 10<div id='Chinese' class='content'>中国語コンテンツ</div> 11<div id='Japanese' class='content'>日本語コンテンツ</div>

URLハッシュを使う是非

ただし、言語判定にURLハッシュを使うと、ページ内リンクが事実上できなくなり、ユーザビリティが低下します。
言語別にコンテンツ表示を振り分ける意図が読める為、大きなコンテンツを入れる場合には :target 疑似クラスで実装するのは避けた方が良いと私は思います。

  • サーバサイドスクリプトでGETパラメータを見て振り分ける
  • 静的コンテンツを言語別に用意する

Re: yaschi さん

投稿2018/07/15 07:56

think49

総合スコア18162

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

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

0

提示コード確認しましたが、ご提示の:target疑似要素でもおおよそ問題ないように思いますが
どこでしょうか?
「URLに何もない、または存在しない値が指定されればJapanese表示」としたいのでしたら、
何とかならないこともないかと思いますが・・・。

簡単にやるならやはりJavaScriptですね。IDもついてますし。
location.hashでURLのハッシュ値がとれます。
そのハッシュ値にあたるIDをもった要素の有無で表示非表示を決めると良いです。
コードを例示しますが、簡潔に書くためにjQueryにしてあります。

js

1$(function(){ 2 var hash = location.hash; 3 if($(hash).length > 0){ 4 $(hash).show(); 5 }else{ 6 $("#Japanese").show(); 7 } 8});

投稿2018/07/15 04:22

m.ts10806

総合スコア80850

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

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

m.ts10806

2018/07/15 04:27 編集

何もない、存在しない 時に何も表示しないならelse不要です。
think49

2018/07/15 07:59

> ご提示の:target疑似要素でもおおよそ問題ないように思いますが :target疑似クラスですね。 > $(hash).show(); 表示させるのは良いとしても消す処理がないので、2回目以降に表示を切り替えた際に切り替え前のコンテンツが表示され続けます。
m.ts10806

2018/07/15 10:11

ご指摘ありがとうございます。 ちょっと確認甘かったですね…
guest

0

自己解決

一旦文を推敲して再度投稿します。

投稿2018/07/14 22:41

yaschi

総合スコア35

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

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

m.ts10806

2018/07/15 04:26 編集

思ってたより簡単な話だったので回答しました。難しく考えすぎではと。 ちなみに「再考します」という回答は「ベストアンサー」としては不適当です。 きちんと要件が伝わるような質問本文になるように調整し、解決まで導くのが質問者さんのやるべきことです。
guest

0

リダイレクトループになってませんかね?
これの対処方法と同じ対処が使えませんか?

投稿2018/07/14 20:23

sysjojo

総合スコア325

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

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

yaschi

2018/07/14 22:38

情報から察するにサクラのレンタルサーバーにおける無限ループについて書かれていると思いますが、当方が使用しているのはスターサーバーです。
sysjojo

2018/07/15 00:27 編集

サクラ関係なく、index.htmlからindex.htmlにリダイレクトさせることでループしてませんか?という主旨です。リンク先はサーバー自身からアクセスされた場合のリダイレクトは除外する、という対応なので同じ理由なら使えるのでは?
yaschi

2018/07/15 01:04

実装してみた所失敗しました。
yaschi

2018/07/15 01:05

結果は質問のところに書いてあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問