• ベストアンサー

ユニバーサルセレクタで指定したのに・・・?

CSSのユニバーサルセレクタについて質問です。 CSSで、* {margin:0;padding:0;}とユニバーサルセレクタを指定しているのですが、下位でh2に{padding-left:10px;}を指定すると、h2の文字列の開始位置が10px下がります。 使用上問題はないのですが、これはなぜでしょうか? 何か私の指定が間違っているのでしょうか?

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

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

全称セレクタの詳細度が0であることはご存知ですよね。 CSS2.1は、セレクタの記述方法が 「基点となるセレクタ」に様々なセレクタを追加することになりました。CSS1で .header{} と書いていたものが p.header{} と指定することになりました。それとの整合性のため*全称セレクタが導入されて .header{} は *.header{} と解釈されることになりました。 タイプセレクタを用いて h2{padding-left;} と記述すると、ブラウザはh2要素にあてはまるセレクタをすべて検索して *{margin:0;padding:0;} と h2{padding-left;} を見つけ出します。 いずれにも最重要宣言はされていませんから、詳細度でどちらを適用するかを決めます。 この場合、h2のタイプセレクタは、詳細度が001ですから、詳細度0000の*よりも高いため、h2に対する宣言が適用されます。 なお、*全称セレクタになるmargin:0;padding:0は指定すべきではありません。なぜなら、カスケーディング--CSSの最も重要な仕組み---によって、本来ブラウザが持つmargin,paddingに対するすべての設定が上書きされます。  ユーザーの最重要宣言>著者の最重要宣言>著者の宣言>ユーザーの宣言>ブラウザの宣言  ブラウザの持つスタイル宣言は ★http://www.swlab.it.okayama-u.ac.jp/man/rec-css2/sample.html  これがすべて削除されますから、文書内で新しい要素が登場するたびに、著者がすべて指定する必要が発生します。たとえばulやolが登場すると、li{margin-left:1em;}とか・・  *{margin:0;padding:0;}は某オーサリングツールなどがテンプレートで好んで使用する指定方法で、自分でスタイルシートを書くときにこんなもの書いたら、スタイルシートが肥大化してしまいます。 5. セレクタ ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2/selector.html ) 6. 値の割り当て、カスケード処理、継承 ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2/cascade.html )  このカスケーディングや詳細度・継承の仕組みをつかってスタイルが、簡単に記述できるのですよ。  

noname#194753
質問者

お礼

>全称セレクタの詳細度が0であることはご存知ですよね。 恥ずかしながら知りませんでした。 とてもわかりやすい説明で納得できました。 *{margin:0;padding:0;}は、今回覚えたばかりで、なんて便利なんだろう!と初めて使ってみたのですが、自分で書く時にはあまり使わない方がいいのですね。 勉強になりました。ありがとうございました(^_^)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 全称セレクタについて

    こんにちは、HTMLやCSSについ学校で勉強をしている者です。 今自分で世に出ているサイトを見よう見真似で作ってみようと思い 有名な制作事務所さんがつくっている、簡単そうなもののソースやCSSを見ていました。 【質問1】 始めに全称セレクタで *{ padding: 0; margin: 0; } としているのに、以下の『 th 』や『 h1 』でも paddingとmarginに、さらに 0 をいれています。 学校では、全称セレクタはすべてに適応されると聞いていましたが すべにて適応されるのであれば、またわざわざpaddingとmarginに0を指定する必要はないと思うのですが、なぜでしょうか? 【質問2】 htmlにスタイルシートで指定することをならいませんでしたが そのサイトでは html{ overflow: 0;} とありました。htmlにかけるとはどういうことでしょうか?? overflowを0にすることで、どういった意味が考えられますでしょうか? ソースがないので、理解できないところもあるかもしれませんが ご存知の方がいらっしゃいましたら教えてください。

    • ベストアンサー
    • HTML
  • paddingを指定すると、marginが広がります。

    はじめまして。 現在CSSでHPを作成しているのですが、タイトルにあるように、paddingを指定すると、marginが広がってしまいます。 topのpaddingを指定するとtop-marginが・・・ bottomを指定すると・・・ のような感じです。 原因と解決方法を教えていただけないでしょうか? #news { width: 180px; height: 110px; background-image: url(img/news.gif); margin-top: 15px; padding-top: 30px; background-repeat: no-repeat; padding-bottom: 20px; padding-left: 20px; } レフトに配置しています。

    • ベストアンサー
    • HTML
  • CSS idセレクタについて教えてください

    いろいろな Web の CSS を参考にして CSS を書いているのですが、id セレクタの並列記載について理解が出来ないので教えてください。 とある Web にあった CSS の記述で、 #contents { margin: 0px; padding: 0px; width: 800px; background: #FFFFFF; } #header { margin: 0px; padding: 0px; background: #FFFFFF url(title.gif) no-repeat center top; height: 60px; width:800px; text-align: center; display: block; position: relative; } は理解できるのですが、左側にメニューを配置する設定に関して #contents #sidemenu { margin: 5px; padding: 0px; float: left; width: 160px; text-align: left; background-color: #FFFFFF; } となっていて、#sidemenu ではなく、#contents #sidemenu となっていました。 <div id="contents"> あいうえお <div id="header"> かきくけこ </div> <div id="sidemenu"> メニュー </div> さらにコンテンツ </div> とすれば、contents の要素は header にも sidemenu にも継承されると思っていたのですが違っているのでしょうか。 contents と sidemenu の両要素を反映させるために #contents #sidemenu となっているのでしょうか。 初歩的な質問だと思いますが、どうぞよろしくお願いします。

    • ベストアンサー
    • CSS
  • IE6だとpaddingで指定したぶんだけ消えてしまう。。。

    いま、CSSでサイトつくっているのですが、IE6だけpaddingで指定した分だけ、画像(背景)が足りません。 <h2>と<p>をくっつけて一枚の背景画像を作ろうとしています。 解決するには宣言を変えるか、CSSハック?をする、もしは<div>を入れ子するしかないのでしょうか? また、<div>を入れ子にするのはよくないと教えていただいたのですが、どれくらいまでが許容範囲でしょうか? いつもwrapperで囲っているので、大枠のレイアウトを作るだけでもすでに1つ入れ子状態なんですが・・・ <h2>あああああああああああああああああ</h2> <p>あああああああああああああああ </p> .h2 { background-image: url(img/flow6_01.gif); height: 37px; width: 650px; text-indent: -9999px; float: left; margin-bottom: 0px; } #p { width: 625px; height: 120px; float: right; background-image: url(img/flow1_02.gif); margin: 0px; margin-bottom: 10px; background-repeat: no-repeat; padding-left: 25px; }

    • ベストアンサー
    • HTML
  • CSS IDごとのCLASS指定

    以下のようなCSSがあった場合に、それぞれのIDに同じ名前で中身の違うCLASSを指定する事は出来るのでしょうか? #main{ margin:0; padding:0; background: transparent; float : left; font-size : 0.8em; } #menu{ margin:0; padding:0; width:140px; float : left; font-size : 0.8em; background :url('img/back.gif') no-repeat left top; color:#17F600; } #mainにはこれ、 .txt { font-size : 1em; line-height : 120%; margin:0 0 5px 380px; padding:0 0 0 30px; text-align : left; color:#69788A; } #menuにはこれ .txt{ font-size : 1em; padding:0 0 0 10px; margin:5px 30px 5px 0; text-align : left; color:#69788A; border-bottom:1px solid #CFDEEF; } といったかんじなのですが…

    • ベストアンサー
    • HTML
  • CSSで文字指定:あるセレクタで指定した値を他のセレクタへ継承させることは出来ますか?

    文字サイズをCSSで指定する方法についての質問です。 同一の文字サイズ指定でも、OS・ブラウザ間で表示にギャップがあります。 そのギャップを調整するために、JavaScriptを使用して OS・ブラウザごとにそれぞれ異なった外部CSSファイルを読み込むようにしています。 macintosh.css windows.css windowsIE.css ...このような振り分けCSSファイルでそれぞれ文字サイズ指定をしています。 CSSファイルの中身は、 macintosh.css .small { font-size: 10px; } /* 小さめ */ .middle { font-size: 12px; } /* 中くらい */ .large { font-size: 14px; } /* 大きめ */ windowsIE.css .small { font-size: 0.8em; } /* 小さめ */ .middle { font-size: 0.9em; } /* 中くらい */ .large { font-size: 1em; } /* 大きめ */ ...といった具合です。 このやり方では、h2の文字サイズを全て中くらいの大きさに指定したい場合、 全てのh2タグに <h2 class="middle"> と記述することになってしまいます。 これは煩雑なので一括指定したいと考えます。 すぐ思いつく方法は、振り分けCSSファイルにh2の文字指定も含めることです。 macintosh.css h2 { font-size: 12px; } windowsIE.css h2 { font-size: 0.9em; }  ...のようなことです。 そうではなく、h2に .middle(=中くらい)で指定した文字サイズをそのまま受け継がせる方法はないでしょうか? h2 { class="middle" } 変な書き方ですが、意図を汲み取っていただけるでしょうか。 このように指定出来れば、かなり省力化出来るように思います。方法があればぜひお教え下さい。

    • ベストアンサー
    • HTML
  • FireFoxで見ると表示がおかしくなってしまいます

    困っています。質問させてください。 このカテゴリでいいのか分からないのですが・・・。 HPを運用しているのですが、聞きかじりのcssを利用しています。 IEだと場合によっては普通に表示されるのですが、FireFoxだと文字がどでかく表示されてしまって、レンタルスペースはFC2を使っているのですがページの最後に表示されるはずの広告が文字列の中に割り込んでいたりして、表示がめちゃくちゃになってしまいます。 ちなみに使っているcssは * { margin:0; padding:0; } html { text-align:center; height:100%; } body { width:600px; height:100%; text-align:left; } #HEADER img { display:block; } #NAV { float:left; width:200px; height:100%; margin-top:-100px; padding-top:100px; } #CONTENT { width:650px; height:100%; margin-top:-100px; padding-top:100px; margin-left:200px; } です。index.htmlのbody部分にはfontの大きさは全く指定していません。 よろしければFireFoxでご覧になってみてください。 http://clovermiwa.web.fc2.com/ 私はHTMLをかじったくらいで、cssについては全く分かりません。 HTMLが間違っているのかもしれません。 色々いじってみましたが、問題が解決されず、困っています。 よろしければご教授、お願い致します。

    • ベストアンサー
    • HTML
  • CSSについての質問です

    下記のプログラムについて解らないのですが、containerの内のh1と ulの位置関係ですがh1にmargin-bottom: 0と指定し、ulにmargin-top: 0としてあるが、この2つがくっつかないのは何故でしょうか? 親切な方、ご回答いただけますようよろしくお願いします。 body{ background-color: #f2f2f2; padding: 0; margin: 0 } div#container { width: 750px; margin-left: auto; margin-right: auto; background-color: white } h1{background-image: url(画像.jpg); width: 640px; height: 120px; margin-bottom: 0; margin-left: 50px; } ul{ list-style: none; text-align: center; padding: 0; margin-left: 10px; margin-top: 0 } li{ width: 128px; float: left; padding: 0px; margin: 0px; }

  • CSSレイアウトの本当の正しいやり方

    CSSでヘッダーとフッター付きの2カラムレイアウトを書籍のサンプルを見て行ないました。 表示は何も問題ないのですが、色々とサンプルレイアウトのサイトを見ていると「main」でleft-marginfを指定しているのはなく、floatを指定しているのが多いのですが、下記でも合っているのでしょうか。 #wrap { width: 700px; margin: 0 auto; text-align: left; } #header { color: #fff; } #menu { width: 160px; float: left; } #main { margin-left: 160px; padding: 10px; } #footer { clear: both; padding: 10px; }

    • ベストアンサー
    • HTML
  • h1にタイトル画像を指定しているのですが・・

    h1にテキストでは、ページのタイトルを入れて、CSSで背景を指定しています。 【HTML】 <div id="header><h1>タイトル</h1></div> 【CSS】 #header h1{ text-indent: -9999px; background-image: url(../images/share/title.gif); background-repeat: no-repeat; height: 43px; width: 317px; margin-top: 10px; margin-bottom: 10px; margin-left: 10px; text-align: left; } FirefoxとIEでは表示されているのですが、Operaで見ると表示されていません。Operaで表示させることは難しいのでしょうか?