id(class)の指定は、セレクタといっしょに指定(1)、セレクタを除いて指定(2)
どちらが正しいというのはあるのでしょうか?
【例】
<html>
<head>
<title>タイトル</title>
</head>
<body>
<div id="sample">
<p>サンプル</p>
</div>
</body>
</html>
(1)
div#sample p {
color:#f00;
}
(2)
#sample p {
color:#f00;
}
どちらでも良いような気がしますが、実際の所どうなんでしょうか。
No.4ベストアンサー
- 回答日時:
ほかのHTML内に「div以外のid="sample"」が出現することが100%無いとは言えませんよね?
それを踏まえるとdivから書く「ほうがいい」ということが明らかにわかると思います。
余談ですが私は「div以外のid="sample"が出現することが100%無い」ようにHTMLを書くほうが自分には楽なのでタグ名からは書きません(笑)タグ名での指定、IDでの指定、クラス名での指定のみを使用しています。
>そうなんですか?色々なサイトや参考書では一意に特定する場所には
>idを指定するとの解説を見かけるんですがこれは間違いなんでしょうか?
これはHTML側の都合で、同一のHTMLファイル内に同じIDが重複してはいけないということからの派生の考えですね。これも、上記と同じく、「そういうふうに(一意に特定する場所にはclassではなくidを指定)したほうがいい」のは明らかですが、あとは仕様に反していなければいい、ということになります。
なお、表現で分かっていただけるとは思いますが以上はあくまで現実問題での話です。質問者さんが仕様ガッチガチでいきたいのなら、上記のような「現実を踏まえた、文法違反だけはしていない」記述よりも、仕様を読んでそれに厳密に従う書き方をすべきです。
回答ありがとうございます。
>ほかのHTML内に「div以外のid="sample"」が出現することが100%無いとは言えませんよね?それを踏まえるとdivから書く「ほうがいい」ということが明らかにわかると思います。
確かに…ページによっては#logoなどをh1だったり、pに使ったりしていました。。div id="sample"のみに指定するならdivから書くほうがいいですよね。
>質問者さんが仕様ガッチガチでいきたいのなら、上記のような「現実を踏まえた、文法違反だけはしていない」記述よりも、仕様を読んでそれに厳密に従う書き方をすべきです。
なるほど!この言葉ですっきりしました。
仕様書を厳密に守ろうとすればORUKA1951さんのような書き方をすべきであり、文法違反
さえしなければいいというのであれば「一意に特定する場所にはclassではなくidを指定したほうがいい」という書き方をすればよいのですね。
勉強になりました。ありがとうございます。
No.5
- 回答日時:
>つまりこれはidを使ってしまうと、idが違うだけで同じスタイル複数書いてしまう
事になるよってことですよね。確かにそうですね。
たくさん作成していると、こういう細かいところも随分と賢くなりましてね。
IDは、<a href="WHAT_IS_HTML">とかに残しておいて、classをうまく使って、適用させたい要素を指定するほうが便利なのです。<div class="header" id="WHAT_IS_HTML">あるいは、<div class="header" id="TOP">
classの値は、「半角スペースで区切っていくつでも書ける」という特性がありますし、詳細度が高くすればいくらでも上書きさせられる。
私は、HTML内のあるブロックのスタイルがスクロールなしですべて理解できるように短くまとめるようにしています。でないと、CSSがどんどん肥大化して後で修正するときに地獄になります。そのためには、idよりclassのほうが本当に楽です。
いずれにしても、大事なことはスタイルシートではなくHTMLのマークアップです。それさえきちんと出来ていれば、
div.header div.abstract{margin:0 1em;border:solid 1px solid;}
div.section div.tableContent{position:absolute;left:0;top:0;width20%}
とCSSを書くことが出来ます。これだと誰(数年後の自分)が見ても何をしようとしてるかわかるでしょう。
#left{position:absolute;left:0;top:0;width20%}
じゃ、HTMLを開かなくちゃならない。・・・すこし本題と外れますが・・・
<div id="header">じゃなく<div class="header">をつかうもうひとつの理由は、将来HTML5に変更するとき、<div class="header">→<header>、<div class="section">→<section>とするほうが、楽だからです。
div.header{}と書かれているスタイルシートを
div.header,header{}と変更すれば、スタイルシートが流用できますからね。実を言うとすでに、そう書いている。(HTML5のページはないですが)
回答ありがとうございます。
>CSSがどんどん肥大化して後で修正するときに地獄になります。そのためには、idよりclassのほうが本当に楽です。
たぶんORUKA1951さんの場合、ある程度の規模が大きくなる事を前提に考えているので
修正のことも考えるとclassの方が楽だよって事ですよね。
私の場合は規模が大きなサイトを想定していない為、idでもclassでも
そんなに変わらないと思ってしまうのが正直なところです。
その為、div id="header"としても後々のデメリットがあまり感じません。
>将来HTML5に変更するとき、<div class="header">→<header>、<div class="section">→<section>とするほうが、楽だからです。
html5だとheaderを複数使っても問題ないんですよね。
その事を考えると一意に特定できる要素としてheaderを使うより、html5でのheaderタグを
想定してclass="header"とした方が後々の修正が楽になるって事ですね。
つまり、id="header"として任意のブロックとするか、class="header"としてhtml5前提のheaderとして使うかの違いでしょうか。
ORUKA1951さんの回答を見ているとスタイルをidで指定できること自体、不要のように思えますね。。
No.3
- 回答日時:
No.1です。
>この場合、上部(header)も、サイドバー(sidebar)も、1ページ中に2度以上登場することはありません。 かならず1度だけです。 このような場合に、idを使います。
そんなことはありません。HTML5の仕様書を見ればわかるように、headerもfooterも何度も登場して構いません。
headerとは完結した記事のヘッダー、footerはフッタですから・
例] 4.4.9 The footer element( http://www.w3.org/TR/html5/sections.html#the-foo … )
<div class="header" id="TOP">
<h1>見出し</h1>
<div class="nav">
<h2>リンク</h2>
<ol>
<li><a href=""></a></li>
<li><a href=""></a></li>
<li><a href=""></a></li>
</ol>
</div>
<div class="section" id="What_is_HTML">
<h2>本文</h2>
<p>段落</p>
<div class="article">
<div class="header">
<h2>見出し</h2>
</div>
<div class="sectin">
記事
</div>
</div>
<div class="section">
</div>
</div>
<div class="footer">
</div>
</body>
とか・・・
私がidをスタイルの指定に使わない理由はいくつかあります。
・IDはリンクターゲットとして使うため、
<div class="section" id="What_is_HTML">
</div>
<div class="section" id="HOW_to_HTML">
</div>
のとき、困るでしょう。目次のソースを編集するとき具体的にその内容がわかるIDをつけたほうがよいのです。
<li><a href="#What_is_HTML"></a>HTMLとは</li>
<li><a href="#HOW_to_HTML">HTMLの書き方</a></li>
と書くでしょ?
<div class="header">
<div class="nav"></div>
</div>
<div class="section">
<div class="nav">
のとき、
div.header div.nav{}
div.section div.nav{}
で区別できます。
もちろん
サイドバー sidebar <div id="sidebar">~</div>
本文領域 main <div id="main">~</div>
という意味のない書き方もしません。デザインのためにclass名やidをつけることはありません。idやclass名は
『DIV要素とSPAN要素は、id属性及び class属性と併用することで、文書に構造を付加するための一般機構を提供する。 ( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )』
と仕様書に書かれています。HTML4では、これ以上の明確な例はありませんでした。
ナビゲーション <div class="nav">~</div>
本文領域 <div class="section">~</div>
・・・HTML5だと、それを明確に
ナビゲーション <nav></nav>
本文 <section></section>
となります。3.1. 新しい要素 ( http://standards.mitsue.co.jp/resources/w3c/TR/h … )が良い参考になるでしょう。
>>その変わり、特定の部分のデザインを変えたいときがあれば、そのHTMLの<head></head>内に書きます。
ほとんどないのですが、多くのページでセットになっている場合、特定のページのみに適用させるスタイルは、共用のスタイルシートに書くと煩雑になり後日のメンテナンスが悪くなるので、head内(HTML)、あるいは<link>(XHTML)で追記しています。この場合は#を使うことが多いですね。
・idでは、詳細度が高すぎます。
idでは、詳細度がb=2となり、なかなか上書きがしにくくなります。
私のページの作り方にも一因はあるのですが、多くのページで構成される場合、最初にすべてのページをひとつにまとめたものを作成し、それを利用しやすいようなサイズに分割して一連のページを作ることが多いです。全体のデザインを統一し、スタイルシートを簡素化する目的もあります。その場合、必然的に一箇所だけスタイルを指定しなければならない必然性はなくなります。大きなページは、ページ数や目次を印刷するように印刷用スタイルシートを設定して残しておきます。
[例]書きにくいのでHTML5で書きます
<body>
<article>
<header></header>
<section>
<section>
<section></section>
</section>
<section>
<section></section>
</section>
</section>
<footer></footer>
</article>
<article>
<header></header>
<section>
<section>
<section></section>
</section>
<section>
<section></section>
</section>
</section>
<footer></footer>
</article>
</body>
↓分割
<body>
<article>
<header></header>
<section>
<section>
<section></section>
</section>
<section>
<section></section>
</section>
</section>
<footer></footer>
</article>
</body>
この場合、idではデザインできないことが理解いただけるかな?
★いずれにしてもIDは出来るだけ内容がわかるものにすると一意な物になりますが、デザインは共用したいとなると、IDよりclassのほうが適している。
一箇所しか登場しなくてもclass名で用が足りるならclassを使う。classには、リストが使えるという利点があります。属性セレクタ[class~=""}と同じ意味を持つので・・
<div class="section">
<div class="section memo imporatnt">
div.section{margin:0 auto;width:70%;border:solid 1px gray;}
div.section div.section{width:100%;margin:0;}
div.important{border-color:red;}
div.section.memo{color:green;}
とか、classを使うと、圧倒的にプロパティを書く量を減らせます。IDを使うとき結構他と共通な設定を書いてますよ。
classをうまく使うと、本当にスタイルシートは小さくなります。そしてわかりやすくなる。
何度も回答いただきありがとうございます。
>そんなことはありません。HTML5の仕様書を見ればわかるように、headerもfooterも何度も登場して構いません。
なるほど。HTML5の仕様書ではheaderもfooterも何度登場しても問題ないのですね。
勉強になりました。
ただ、「この場合、上部(header)も、サイドバー(sidebar)も、1ページ中に2度以上登場することはありません。 かならず1度だけです。 このような場合に、idを使います。」
というのはあくまで一ページ上で一度しか登場しないブロックの事で、ORUKA1951さんの言うような「headerとは完結した記事のヘッダー、footerはフッタですから・」とはなんとなく意味が違うような気がします。
参考urlの解説がHTML5の事を対象にしていない事もありますが・・
なんていうですかね。html5のタグとしてのheaderではなく、ページ上での唯一の
ブロックとしてのheaderという感じでしょうか。うまい表現ができなくて申し訳ありません。
>classを使うと、圧倒的にプロパティを書く量を減らせます。IDを使うとき結構他と共通な設定を書いてますよ。
つまりこれはidを使ってしまうと、idが違うだけで同じスタイル複数書いてしまう
事になるよってことですよね。確かにそうですね。
詳しく解説していただきありがとうございました。
No.2
- 回答日時:
CSS の「{」の前にあるのがセレクタだから, 「セレクタといっしょに指定」とか「セレクタを除いて指定」というのは全く持って意味不明. さらにいえば, 「正しい」というのがいかなる価値基準におけるものなのかも不明.
id に対しては, その CSS を他のファイルと共用するならタグをつける必要性もあるかもしれません. 共用しなければ, タグは完全に冗長なだけです.
class なら CSS を他のファイルと共用するかどうかにかかわらずタグをつける意味はあります. ただし, そんなことするくらいなら別のクラスにしろという意見もあり得る.
No.1
- 回答日時:
意味が違いますから、必要に応じて使い分けます。
CSS1は、.classNameと言う書き方でしたが、CSS2以降は基点となるセレクタを最初に書きますから*.classNameが本来の書き方です。*は詳細度0とします。
CSS2では、基点となる*が省略することができるとされていますから
【引用】____________ここから
The universal selector, written "*", matches the name of any element type. It matches any single element in the document tree.
If the universal selector is not the only component of a simple selector, the "*" may be omitted. For example:
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[Selectors( http://www.w3.org/TR/CSS2/selector.html )]より
私は紛らわしくなる--他のセレクタの書き方と統一するため*は書いています。
div.nav *{display:block;}
とかもあるので、
意味は、class属性の値が半角スペースで区切られて配列であるとき、そのひとつににclassNameの値を持つ、すべての要素と言う意味になります。クラスセレクタは詳細度c=1,IDセレクタは詳細度b=1になります。
div.section div.section ol li.abc{}は、詳細度0,0,2,4になります。
#、すなわちID(一意)セレクタの場合は、詳細度がb=1で、適用されるHTMLがひとつの場合は問題になりませんが、複数ある場合は必要に応じて書きます。
ただ、#(一意)セレクタは、スタイルシートであまり使う機会のないセレクタだと思います。--私もまず使いません--
もし、タイプセレクタを前につければ、同じIDが異なるページで使用されているときぐらいでしょう。
[HTML1]
・・・
<div class="section" id="section1">
<h1>見出し</h1>
[HTML2]
・・・
<div class="article" id="section1">
<h1>見出し</h1>
とか、ですか?
★HTMLがきちんと書かれていれば、IDをスタイルシートで使用する機会は少ないでしようね。
その変わり、特定の部分のデザインを変えたいときがあれば、そのHTMLの<head></head>内に書きます。
★class名は、必ず書きます。そのほうが後から見てわかりやすい。
div.memo{font-size:0.9em;border:solid 1px gray;}/* 詳細度0,0,1,1 */
div.section div.memo{margin:1ex 1em;border-color:blue;}/* 詳細度 0,0,2,2 */
div.annotation div.memo{margin:0.5ex 0.5em;border-style:dotted;}/* 詳細度 0,0,2,2 */
(1)
div#sample p {
color:blue;
}
(2)
#sample p {
color:red;
}
の場合、いずれの色になりますか???青ですね。
>ただ、#(一意)セレクタは、スタイルシートであまり使う機会のないセレクタだと思います。--私もまず使いません--
そうなんですか?色々なサイトや参考書では一意に特定する場所には
idを指定するとの解説を見かけるんですがこれは間違いなんでしょうか?
http://allabout.co.jp/gm/gc/23897/2/
>その変わり、特定の部分のデザインを変えたいときがあれば、そのHTMLの<head></head>内に書きます。
これはheadに<style>を用いて直接、スタイルを記述するということですか?
補足お願いしたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
- HTML・CSS cssが効かなくて困ってます 1 2023/01/01 23:57
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- HTML・CSS PCサイズで赤い画像2つと、青い画像2つがそれぞれ横に2つずつ並んでいるのですが、これをスマホサイズ 5 2022/04/11 12:01
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlのolやulなどlistにtitleや...
-
HTML属性での「""」 「''」違い
-
<div id="container">の使いか...
-
div要素が重なってします
-
複数のボタンを等間隔に、かつ...
-
スペースを使わず文字位置を揃...
-
divを横に並べる方法
-
ヘッダーとフッターだけ背景を...
-
フッタの背景画像をリピートxで...
-
セクションをdivで囲むと見出し...
-
サルワカさんの吹き出しのスタ...
-
SSIを利用してCSSレイアウトを...
-
画面を拡大すると横幅が切れる
-
開閉式の隠し要素が一瞬表示さ...
-
3カラムレイアウトで「常に残り...
-
img と p を縦中央に配置したい...
-
音声ブラウザ、スクリーンリー...
-
【html】iframeを使用したmp4の...
-
WEBサイト制作の図面作成ソフト...
-
HTML5 iframe の代わり
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlのolやulなどlistにtitleや...
-
HTML属性での「""」 「''」違い
-
div要素が重なってします
-
<div id="container">の使いか...
-
複数のボタンを等間隔に、かつ...
-
html の divとtable の役割
-
divとpの使いわけ
-
ヘッダーとフッターだけ背景を...
-
min-heightとheightの違いについて
-
セクションをdivで囲むと見出し...
-
画面を縮小するとカラムが落ち...
-
ヘッダーを左右に二分割する方...
-
1時間30分を簡単に表したいで...
-
スペースを使わず文字位置を揃...
-
CSSで、contentsがfooterに重な...
-
h1に自分自身へのリンクを張...
-
divの中に外部のHTMLを埋め込む
-
divを横に並べる方法
-
hタグの右横に画像を表示
-
h1のテキストサイズよりh2の方...
おすすめ情報