• ベストアンサー

CSSで、h1#logoという書き方は

CSSの勉強を始めました。 IDは、例として #wrapper とか #header など#をつけて、クラスの場合は、「.side」などのように「ドット(.)をつけることはわかりました。 疑問なのが 「h1#logo」 というようにタグに続けて#(ID名)を書く書き方です。 ID名の前にタグ(h1)名がきて、それもスペースなしで続けて書くわけですが、どういう意味でしょうか。 h1に設定した#logoという意味でしょうか。 1度しか使わないこととして、address#ID名 や table#ID名もありでしょうか。

  • CSS
  • 回答数6
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

どうも#2です。 その後予想通りの展開になっていて安心しました(笑) さて、 >h1は、ページで1回しか使わないので、h1に対してCSSを設定してもいいのではとも思えるのです → h1{  } とのことですが、その通りです。 そのHTMLファイル内でh1を1回しか使わないのであれば、そもそもHTMLタグにてid属性やclass属性を設定する必要がありませんよね。h1タグに対しスタイルを設定すればいい話です。h1が複数ある場合のみ、h1#logoが意味をなすのですから。 >なぜ、わざわざ h1#logo とidを設定するのかがよく理解できません。 >優先度の点数を高めるため?などの根拠があるのでしょうか。 理由はいろいろあるでしょう。例えば後から見たときに見つけやすくするためとか。ぶっちゃけ書いた本人にしかわかりません。 つまり、「ありでしょうか」といわれれば当然ありです(文法上なにもおかしくない)が、やる必要はないということですね。 とにかく、まず最初に大事なのは正しく書くことです。この場合の「正しい」とは「ブラウザがきちんと解釈できる」という意味になります。 原理主義的にガチガチの仕様を覚えるのはそのあとで構いません。

usausa7
質問者

お礼

何度も回答くださってありがとうございます。解決したかったことが、おかげでわかりました。

その他の回答 (5)

  • Chaire
  • ベストアンサー率60% (79/130)
回答No.6

「h1 をページ内で一回しか使わない」ことはないですよ(そういうポリシーを持ってるなら、まあ、止めはしませんが)。 ひとつ変わった例として、次のようなものを考えてみます。 <h1>...</h1> <h2 id="ima-miteru">...</h2> <h2>...</h2> h2#ima-miteru { color: red } とすると、その h2 が赤くなります。さて、スクリプトを使って、id="ima-miteru" を次の h2 に移動させます。 <h1>...</h1> <h2>...</h2> <h2 id="ima-miteru">...</h2> するともちろん、次の h2 が赤くなります。さて、全部見終わったので id="ima-miteru" を最初の h1 に戻しましょう。 <h1 id="ima-miteru">...</h1> <h2>...</h2> <h2>...</h2> すると、h1 は h2#ima-miteru にマッチしませんので、赤くなるものがありません。これで「見終わったので、最初から」を表せます。 こんな風に id を移動させることで、いろいろ楽しいことができるわけです。まあ、スクリプトが必要なのがアレですけどね。 ※WAI ARIA の @aria-activedescendant など。 --- CSS を書くときに守った方が良いことは、詳細度の低いものから高いものの順に書くことです。詳細度の計算についてはご自分で調べて頂くとして、 /* 詳細度は (1, 0, 0) で、どんな要素でも id="HOGE" を持つものなら適用 */ #HOGE { ... } /* 詳細度は (1, 0, 1) で、id="HOGE" を持つ h1 だけに適用 */ h1#HOGE { ... } 要するに、割と広く適用されるものは先に書き、用途が限定的なものは後に書く、ということです。そうすれば CSS が比較的すっきりしますし、メンテナンスもしやすくなります(CSS 規則の優先順位と上書きルール)。 ※ごく個人的な懸念を申し上げれば、#wrapper とか #header とかの ID を振っているソースは、最初のうちはあまり真似しない方が良いような気がしなくもないです。 ※ちなみに「ブラウザがきちんと解釈できる」ものを具体的にまとめたものが HTML(5) 規定です。あれはブラウザの振る舞いの規定です。

usausa7
質問者

お礼

詳しく説明してくださってありがとうございます。まだ十分理解できませんが、また何かありましたらお願いします。

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.4

>でも、h1は1回しか使わないので、「id="hoge"属性を持つh1要素にのみ」というのがまだわかりません。  外部スタイルシートを複数のページで使い回しするとき、CSSに h1#hoge{color:red;} h2#hoge{color:green;} と書かれていたとしたら、・・・・・  必要なら、全称セレクタ(省略できる)ではなく、タイプセレクタを付けなさい・・ということ。  セレクタ---どれに適用するかの「選択手段」です。色々な書き方で、どの要素に適用するかを指定すればよい。

usausa7
質問者

お礼

ありがとうございます。やっと使い方、使い分けがわかりました!

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.3

現在ウェブ標準のCSS2.1は、CSS2以降導入された*(全称セレクタ)を忘れては語れません。 セレクタは、基点となるセレクタに接続詞でセレクタをつなげていきます。それぞれのセレクタには詳細度(selector's specificity)が決められています。 まず、最初に基点となるセレクタを書きます。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [タイプセレクタ] div これはタイプセレクタと呼ばれるものでHTMLの要素(element)に当たるものです。詳細度はd=1です。 em{font-weight:bold;}とか [全称セレクタ] * CSS2で登場した全称セレクタです。!!これを、知らないか忘れてる。CSS2以降では、これが省略されている(基点となるセレクタが無い場合*があるとみなします。)必ず書くほうが理解しやすい。すなわち #hoge は、*#hogeとみなします。一意セレクタを持つすべての要素でid="hoge"をもつものと言う意味になります。HTMLの仕様上そのページには一箇所しか存在し得ないですから、一意ではあります。  一方h1#hogeは、id="hoge"属性を持つh1要素にのみ有効です。 ★一見同じ動作をしますが、意味はだいぶ違う。  ついで、それにセレクタを結合子で続けていきます。これらもセレクタです。 CSS2では、結合子には、子孫[ ](半角スペース)、子供[>]、兄弟[+]の三つがあります。 div.section p strong{} div.section>p strong{} div.section p+p strong{} また、さらにオプションセレクタとして、クラスセレクタ[.]、要素セレクタ[[]]、擬似要素セレクタ、擬似クラスセレクタ[:first-child]、リンクの擬似クラス[:link,:visited]、動的なリンクの擬似クラス[:hoverとか]、一意セレクタ[#]、擬似要素[:first-line,:before]・・  これらと、スタイルシートの出所(たとえばstyle要素、head内、外部)、著者のものかユーザー指定なのか、important!があるかないか、最後に詳細度で適用される要素が決まります。  この部分は、カスケード処理と呼ばれるCSS(カスケーディング スタイルシート)の根幹をなす部分ですから、最初にきちんと学ぶ必要があります。  なお、詳細度の計算は、CSS2.1で、CSS2.0から変更されましたのて゜注意してください。 ★Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification ( http://www.w3.org/TR/CSS2/ ) ★REC-CSS2 邦訳 ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2/cover.html#minitoc )  CSS2.1の邦訳は知りません。セレクタ、カスケードのページだけはしっかりと読むこと

usausa7
質問者

お礼

回答いただきありがとうございます。 たぶん正解となる内容を書いてくださっているかとは思いますが、私には少々むずかしくわかりません。ただ、「 h1#hogeは、id="hoge"属性を持つh1要素にのみ有効 」という、この部分で何となく自分なりに区別がわかったような気がします。 でも、h1は1回しか使わないので、「id="hoge"属性を持つh1要素にのみ」というのがまだわかりません。id="hoge"属性を持たないh1は共存しないし、同じidは1回しか使わないとすると、h1#hogeと重ねる意味が(たぶんこの部分の説明を回答の中でしてくださっていると推測しますが)・・・・やっぱり理解できていないようです。理屈っぽいこと(わけのわからないこと)を言ってすみません。

回答No.2

通りすがりに一つだけ。 >h1の中にあるid=logo という意味で、h1 #logoでもいいように思ってしまったのですが。 >h1 #logo{ これは確かに「h1の中にあるid=logo」ですが、この「中にある」とは「入れ子」のことです。 <h1><img src="hoge.jpg" id="logo"></h1> の「id="logo"」を指します。 半角スペースを空けると、「(左側)より内側にある(右側)」への指定となります。 詳しくは「子孫セレクタ」で調べてください… …って、まあ、詳細な説明をしてくれる人がこの後100%現れますのでそれを待っていただいても構いません(笑)

usausa7
質問者

補足

詳しく説明していだたいてありがとうございます。 h1は、ページで1回しか使わないので、h1に対してCSSを設定してもいいのではとも思えるのです → h1{  } なぜ、わざわざ h1#logo とidを設定するのかがよく理解できません。 優先度の点数を高めるため?などの根拠があるのでしょうか。

  • t_ohta
  • ベストアンサー率38% (5081/13278)
回答No.1

h1#logo { color: red; } とcssに書くと <h1 id="logo">xxxx</h1> の文字色は赤になりますが <h1>xxxxx</h1> は変わりません。 <div id="logo">xxxx</div> も適用されません。 id名やclass名はスタイルシートだけでは無くJavaScriptから要素を特定する場合にも使いますのでaddress#ID名といった使いかたもあり得るのではないでしょうか。

usausa7
質問者

補足

すぐに回答くださってありがとうございます。たとえがあったので、よくわかりました。 ところで、くどいおたずねで失礼かとは思いますが、 どうして以下の(1)の書き方ではだめなのでしょうか。 h1の中にあるid=logo という意味で、h1 #logoでもいいように思ってしまったのですが。 (1) h1 #logo{ (2) h1#logo{

関連するQ&A

  • cssの中にテーブルを入れると崩れる。

    html+CSSでページを作っていて 途中にテーブルを入れると レイアウトが崩れます。 テーブルのすぐ右横に次の見出しが来てしまったりします。 どうしたらいいでしょうか? <body> <div id="wrapper"> <div id="header"> ~略~ </div> <div id="contents"> <h2> ●●● </h2> <h3> ●●● </h3> 例えばココに<table>~</table> <h2> ●●● </h2> <h3> ●●● </h3> </div> </div> </body> とするとこのテーブルの真横に次の<h2>が来てしまいます。 テーブルの用途は料金表などで、レイアウト的に使うのではありません。 どなたかご教授下さい。 宜しくお願いいたします。

    • ベストアンサー
    • CSS
  • HTMLで横幅をCSSで設定できません。

    HTMLで横幅をCSSで設定できません。 headerを作成しているのですが、画像のように横幅が外枠の wrapperをはみ出して表示されてしまいます。 はみ出した値は5pxとpaddingで指定した値と一致します。 headerをtableタグで作成した場合、横幅700pxの枠中での padding-left:5px;になり、横幅には変化はありません。 しかし、<div id="header">で横幅を700pxとし、 padding-left:5px;とすると、headerの横幅が 5px増えてしまいます。 <div id="header">の横幅を変化させずに、 paddingを指定することは可能なのでしょうか。 わかる方いらっしゃいましたら宜しくお願い致します。 ■HTML <html> <body> <div id="wrapper"> <div id="header"></div> </div> </body> </html> ■CSS #wrapper { width: 700px; } #header { width: 700px; padding-left: 5px; }

    • ベストアンサー
    • HTML
  • FireFox2.0でCSSを使ってテーブルそのものをセンタリングしたい

    IE6だと #wrapper { text-align: center; } <div id="wrapper"> <TABLE border="1"> <tr><td>テキスト</td></tr> </table> </div> とやればテーブルそのものがセンタリングされるのですが、 FireFox2.0だと左に寄ったままです。 CSSを使わずに<center>で囲めばセンタリングされますが、 そうではなくてCSSを使ってやるやり方はないでしょうか?

    • ベストアンサー
    • HTML
  • cssでの高さの調整がうまくいきません

    はじめまして。当方css初心者です。 現在DreamWeaver8でCSS+XHTMLでホームページを作成しているのですが、どうもうまくいかないことがあります。よければご意見下さいませ。 以下のソースでmaincontentsに情報を盛り込み、bodyで背景に色をつけてるため、wrapperの背景を白にしてコンテンツ部を白にしたいのですが、maincontentsの情報が少し増えるとwrapperの枠を飛び出してしまいます。wrapperの高さを指定しておけばその範囲では大丈夫なのですが、ページによってmaincontentsの情報量が異なるので「高さ:自動」にすると、contentsの高さまでしか広がってくれません。 各ページの情報量が異なるためwrapperの高さも自動で広がって欲しいのですが、どのようにすればよろしいでしょうか。ソースの間違えあると思います。お手数ですが、よろしくお願い致します。 html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>無題ドキュメント</title> <link href="file:///E|/testweb/css.css" rel="stylesheet" type="text/css"> </head> <body> <div id="wrapper"> <div id="header"> id "header" の内容がここに入ります</div> <div id="contents"> <div id="maincontents"> <p>id "maincontents" の内容がここに入ります</p> </div> <div id="sidenavi"> id "sidenavi" の内容がここに入ります</div> id "contents" の内容がここに入ります</div> id "wrapper" の内容がここに入ります</div> </body> </html> css #wrapper { height: auto; width: 850px; } #header { height: 50px; width: 850px; } #contents { width: 850px; } #contents #maincontents { width: 680px; float: left; } #contents #sidenavi { float: right; width: 90px; }

    • ベストアンサー
    • HTML
  • CSSの[]について

    menu[type=context]{ display: none } と言う内容があったのですが、 []の意味は何になるのでしょうか。 cssで、タグ、ID、クラスは分かるのですが []は分からなかったのです。 ご教授お願いできないでしょうか よろしくお願いします。

    • ベストアンサー
    • CSS
  • Dreamweaver CSS

    Dreamweaver 8をMac OS10.5で使用しているものです。 Dreamweaverで、htmlファイルを作成し、CSSを添付しています。 Dreamweaver上では、問題なくCSSが反映されていますが、SafariやFireFoxなどのブラウザでプレビューで見ると、一部しかCSSが反映されていません。 WEBで検索して、文字コードなどを変更してみたのですが、改善されません。 簡単なミスかも知れませんが、コードを記述しておくので、ご指摘いただけると幸いです。 ちなみに、症状としては、CSSで設定したheaderの背景色は、htmlでは反映されているのですが、h1の文字色の変更などは、htmlでは反映されていません。 ━html━━━━━━━━━━━━━━━━━━━━━━━ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>無題ドキュメント</title> <style type="text/css" media="all"> <!-- @import url("price.css"); --> </style> </head> <body> <div id=wrapper> <div id=header> <h1>ヘッダー</h1> </div> <div id=content>本文</div> </div> </body> </html> ━━htmlここまで━━━━━━━━━━━━━━━━━━━━━━ ━━CSSここから━━━━━━━━━━━━━━━━━━━━━━ @charset "UTF-8"; /* CSS Document */ #wrapper { width: 800px; margin-right: auto; margin-left: auto; } #header { background-color: #00FFCC; height: auto; width: auto; padding-top: 5px; padding-bottom: 5px; } h1 { font-size: 2em; color: #FFFFFF; } ━CSSここまで━━━━━━━━━━━━━━━━━━━━━━━

    • 締切済み
    • CSS
  • CSSのタグ「#warpper」の意味は、使い方は?

    HTML、CSSの勉強中です。基本的なタグを使って簡単なホームページを作成しようと取り組んでいます。そのため参考に公開されているホームページのソースを開いて見ていたら「#wrapper」が使われていました。しかし参考書で調べても当タグの記載を見つけることが出来ません。当タグの意味と使い方は何でしょうか、教えてください。

  • HTML CSS テーブルの表示方法

    HTML CSS テーブルの表示方法 JSP・CSSを使用して、テーブルの下に文字を表示したいと思っています。 諸事情有りまして、tableタグは使用せずCSSで解決したいと思っています。 以下よりjspです。 <body id="top"> <div id="container"> <div id="innerContainer"> <div id=header"> <h1><a href="logo.htm"><img src="images/logo.gif" alt="ロゴ" name="logo" id="logologo" /></a></h1> <ul id="header_menu"> <li><a href="map/take.htm">テイク</a></li> <li><a href="map/index.htm">地図</a></li> </ul> </div> </div> </div> <form name="myForm" onsubmit='toList()'> <%= new java.util.Date() %> <Input Type="submit" Value="送信""> </form> </body> 以下よりcssです。 body { width: 1100px; height: 2000px; background-color: lightGreen; } #header { width: 210px; margin-top: 10px; margin-bottom: 10px; margin-left: auto; margin-right: auto; border: 5px; text-algin: center; } #logologo { width: 150px; height: 50px; border: none; margin: 1px; float: left; text-algin: left; border: solid 5px; } #header_menu { width: auto; height: auto; border: none; margin: 1px; float: left; text-algin: left; border: solid 5px; } この状態ですと、テイクの真横に現在日時と送信ボタンが表示されてしまいます。 この日時と送信ボタンをロゴの下に表示されるようにするにはどのように記述すればよいでしょうか。

    • ベストアンサー
    • HTML
  • CSSで余白とパディングに”0”を指定したのに上部に余白ができてしまう

    DREAMWEAVER8で作成しているのですが、ヘッダーの上部にCSSで背景としてグラデーション画像をいれてます。 そして、<h1>でロゴ画像を入れると何故かヘッダーのグラデーション背景の上に20ピクセルぐらいの空白が出来てしまいます。 IE6では空白がないのですが、FIREFOX2だと空きます。 分かる方いらっしゃったら教えて下さい。 ソースはこれです↓ 【html】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> <title>無題ドキュメント</title> <style type="text/css" media="all">@import url("school2.css");</style> </head> <body> <div id="wrapper"> <div id="header"> <h1><img src="images/Logo03.gif" width="310" height="90" /></h1> </div> </div> </body> </html> 【css】 body { background: #E0FFCE; text-align: center; margin: 0px; padding: 0px; font-family: "MS Pゴシック", Osaka, "ヒラギノ角ゴ Pro W3"; } #wrapper { text-align: left; margin: 0px auto; padding: 0px; height: 800px; width: 800px; border: 1px solid #009999; background: #FFFFFF; } #wrapper #header { background: url(images/Backheader3.gif) no-repeat; margin: 0px; padding: 0px; height: 120px; border-bottom: 6px double #009999; } #wrapper #header img { margin: 0px; padding: 0px; }

  • CSSがうまくレイアウトできない。。

    こんにちは。 この度、ホームページを一新しようとCSSに挑戦中です。 いろいろな書籍等を参考にしながら、やってみているのですが、 出だしでつまずいています。 現在、下記のCSSにて http://www.masudaclub.com/newsite/ でテスト運用中なのですが、ヘッダー部分のロゴと、 その下のメニューがどうしてもずれます。 CSSは書籍のものをベースに改変していったのですが、 部分部分を編集してもいっこうに揃ってくれません。 ご教示願えましたら幸いです。 ※CSSを関連部分を載せました。(全文は文字制限で無理でした) @charset "utf-8"; /* All Layout -------------------------------------------------*/ body,div,ul,li,h1,h2,p { margin: 0; padding: 0; } h1,h2,h3,h4,ul,li,p,address { font-style: normal; font-weight: normal; font-size: 100%; } img { border: 0; vertical-align: bottom; } a { text-decoration: none; } a:link { color: #000000; } a:visited { color: #000000; } a:hover { color: #b6b5b5; } a:active { color: #000000; } body { font: 62.5% Verdana ,sans-serif; letter-spacing: 0.2em; color: #464646; } .clear:after { content: "."; display: block; height: 0; clear :both; visibility: hidden; } .clear { display: inline-table; } /* MacIE begin \*/ * html .clear { height: 1%; } .clear { display: block; } /* MacIE end */ #header, #contents, #gnavi ul { margin: 0 auto; width: 80em; max-width: 100%; min-width: 730px; text-align: left; } /* Wrapper -------------------------------------------------*/ #wrapper { text-align: center; } /* Header -------------------------------------------------*/ #header { padding: 0 0 0 0; text-align: center; } /* Gnavi -------------------------------------------------*/ #gnavi { clear: both; margin: 0 0 0 0; } #gnavi ul li { float: left; list-style-type: none; font-size: 1.2em; } #gnavi ul li a { /* float: left;*/ /* display: block;*/ } #gnavi ul li a:hover { color: #b0b0b0; }

    • ベストアンサー
    • HTML

専門家に質問してみよう