CSSについてですが、まずはCSSとHTMLを見てください。
↓test.css ===
* {
padding: 0px;
margin: 0px;
}
html, body {
width: 100%;
height: 100%;
}
#container {
width: 100%;
height: 100%;
margin: 10px;
border: 1px solid #b3b3b3;
}
===
↓test.html===
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="./test.css" type="text/css">
</head>
<body>
<div id="container">
</div>
</body>
</html>
===
test.html をブラウザで見ると、ボーダーラインがブラウザ枠(右側)を突っ切る形で表示されています。width: 100% と指定したので、現在表示しているブラウザ幅からmargin: 10px したところでborder: 1px が表示される(四角形のボーダーがスクロールなしで確認できる)と思ってましたが、ボーダーが現在のブラウザ幅を突っ切って表示されることはあたりまえのことなんでしょうか?
むしろ、スクロールなしでボーダー全体を確認する術は、tableタグを使わずに実現する方法はあるのでしょうか?
お願いします。
No.3ベストアンサー
- 回答日時:
>実際はみ出ている分は22pxということではないですか?
確かにそうですね。一方しか足してなかった。
>blockquoteのようなブロック要素にもmargin:0px等が継承により影響するような気もしますけど、
プロパティ一つ一つに、継承(Inherited)が決められています。とはいってもいちいち仕様書を見なくても、常識的な判断で間違いないです。
【引用】____________ここから
'margin-top', 'margin-right', 'margin-bottom', 'margin-left'
Value: <margin-width> | inherit
Initial: 0 初期値
Applies to: all elements 適用
Inherited: no 継承
Percentages: refer to width of containing block 参照
Media: visual
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[ボックスモデル( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )]より
初心者向けのCSSの説明サイトは、それぞれのプロパティについてとか、CSSでここまでできるというものが多くて、あまり実用的とは言えないものが多いです。
たとえば、あなたの示されたHTMLが、下記であっても
CSSは
html, body {
padding:0px;
margin:0px;
width: 100%;
background-color:gray;
}
body>div{
width:80%;
min-width:540px; max-width:800px;
margin-right:auto;
margin-left:auto;
background-color:white;
}
で、通常はウィンドウの80%、幅広ディスプレイだと800pxより広くならず;幅の狭い端末でも540pxより狭くならず、かつ中央に配置される。
特にCSSのためだけに、idは指定していませんし、ややこしくするだけで指定する必要はないです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="./test.css" type="text/css">
</head>
<body>
<div id="top">
<h1>・・・・</h1>
<p>・・・・・・</p>
<ul class="nav">
<li><a href=""></a></li>
<li><a href=""></a></li>
<ul>
</div>
</body>
</html>
ご返信ありがとうございます。
marginの値が継承されないのであれば、
* {
margin: 0px;
}
とやっても、blockquoteのようなブロック要素には影響ないような気がしますが、私の・・・解釈違ってますか?
あと、min-width、max-widthは大変参考になりました。でも、この属性、IE6ではきかないのですね^^
No.5
- 回答日時:
>marginの値が継承されないのであれば、
>* {
>margin: 0px;
>}
>とやっても、blockquoteのようなブロック要素には影響ないような気がしますが、
>私の・・・解釈違ってますか?
はい、*はCSS2から導入された全称セレクタで、すべての要素に対する指定です。
【引用】____________ここから
全称セレクタ(universal selector)はアスタリスクで示され、あらゆる要素名とマッチする。 すなわち、木構造内の全要素とマッチする。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[セレクタ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )]より
継承というのは、祖先要素で指定されたプロパティが子孫の要素に継承されるということです。
【引用】____________ここから
継承性(Inherited) 祖先要素からの値継承の有無。 指定値、継承値、初期値の相互関係については[6 カスケード処理( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )]を参照のこと。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[仕様について( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )]より継承性(Inherited)
自分の作成しているHTMLの文書構造の木構造がきちんと頭に入っていると、深く考えなくても常識的判断でよいです。
font-familyは、親要素で指定されれば継承されるはずですし、borderなどは継承されてはおかしいですね。
No.4
- 回答日時:
純粋に (x)html + CSS だけで質問者さんが要求する条件を完全に実現する方法を私は知りません。
不可能だと思ってました。もしも可能なら私もその方法を知りたいです。誰か教えて!偉い人っ!!(互換モードで表示するのはなんとなく「逃げ」のような気がしますので、回答者No.1さんのやり方以外でよろしくサンキュー)
で、とりあえず私はいつも JavaScript を利用しておりました。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
<meta http-equiv="Content-script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>sample</title>
<style type="text/css">
html, body {
width: 100%;
height: 95%;
padding: 0px;
margin: 0px;
}
#container {
height: 100%;
margin: 10px;
border: 1px solid #b3b3b3;
}
</style>
<script type="text/javascript">
//<![CDATA[
function reSize(id) {
var isMSIE = /*@cc_on!@*/false;
if (isMSIE) {
myHeightIe = document.documentElement.clientHeight - 22 + 'px'
document.getElementById(id).style.height=myHeightIe;
} else {
myHeight = innerHeight - 22 + 'px'
document.getElementById(id).style.height=myHeight;
}
}
//]]>
</script>
</head>
<body onLoad="reSize('container');" onResize="reSize('container');">
<div id="container">
Sample
</div>
</body>
</html>
見やすいように全角スペースでインデントしてます。タブにでも変換してください。
色々と首を傾げたくなる場所もありますが、とりあえず IE8 、Firefox3.6 、Opera10 、Safari4.0 で表示ができますので、細かい点は気にしない方向で。
No.2
- 回答日時:
#container {
width: 100%;
height: 100%;
margin: 10px;
border: 1px solid #b3b3b3;
}
8.1 ボックスの寸法 ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )より、widthは、それが含まれる親コンテナブロックの内寸法が基準ですから、ウィンドウが800pxだとしたら、800px幅になります。そのうえで、margin: 10px;、border-width:1pxが設定してあるため、右に11pxはみ出す・・そのように指定してあるからそのように表示される。
なお、全称セレクタで
* {
padding: 0px;
margin: 0px;
}
は感心しません。blockquoteやul,ol,pなどすべての要素に適用されるため、スタイルシートですべて上書きしなければならず、スタイルシートがとても煩雑になってしまいます。
html, body {
padding:0px;
margin:0px;
width: 100%;
}
でよいです。height:100%もつかわないほうがよい。ユーザーエージェントには、携帯端末もプリンターもある。縦横とも全くスクロールするはずのない情報量の少ないトップページなどに限定したほうがよいです。
CSSのためだけに、#containerは?
div#top{} とか・・
あるいは、body>div{}
ご返信ありがとうございます。
はみ出る理由がよく分かりました。よくよく考えるとmargin はborderの外に取られるので当然はみでますね;ブラウザの左部分を見ると、borderがブラウザ枠より内側に表示されていたので、右側も内側に表示されるのでは・・とすごい勘違いしていたようです。
そこで、一つ確認させてください。右に11pxはみ出ているということですが、右左のmargin+border分合わせて、実際はみ出ている分は22pxということではないですか?
あと、追記で書かれた件ですが、
html, body {
padding:0px;
margin:0px;
width: 100%;
}
と書くことで、blockquoteのようなブロック要素にもmargin:0px等が継承により影響するような気もしますけど、違うのでしょうか?
No.1
- 回答日時:
* {
padding: 0px;
margin: 0px;
}
html, body {
margin: 10px;
}
#container {
width: 100%;
height: 100%;
border: 1px solid #b3b3b3;
}
用意されたHTMLで、divを均等に上下左右10px開けるには、以上でよろしいですよ。お試しください。
bodyとcontainerが両方100%になっていたのが原因です。テーブルでもありがちですね。
bodyで横幅縦幅がともに100%だったのを、上下左右マージン10pxにしました。
そして、containerを横縦100%した、と。これでブラウザを縮小してもはみ出ないです。
ちなみに検証環境はIE7です。
ご返信ありがとうございます。
たしかに・・理想な形になってます。ただ、bodyに対するmargin:10pxが、なぜにブラウザの内側に10pxのmarginが取られるかその根拠が分かりません。回答番号NO2さんの回答とは矛盾しているような・・。
そもそも、bodyにwidthを指定していないので、おそらくbodyの幅はブラウザ表示幅全体になると思います。となると、結局bodyにwidth:100%してmargin:10pxすると同じことで、理論上、ブラウザ枠をborderがはみ出してスクロールバーが出てしまいますよね?
よろしければご説明お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS html/cssで要素が出てこなくて困ってます 1 2022/12/31 16:59
- HTML・CSS cssが効かなくて困ってます 1 2023/01/01 23:57
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS (Javascript)印刷するファイルに応じて印刷プレビュー画面で用紙を自動的に切り替えたい!! 2 2022/04/11 12:04
- HTML・CSS htmltとcssのコードで 1 2022/11/26 13:37
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlの文字が縦書きになる
-
widthやheightの数値に単位(px...
-
CSS、width100%でもできる余白
-
cssで「下よせ」ってどうやって...
-
CSS(0の単位)について
-
ページを拡大縮小でborderが消...
-
<div>と<div>の間の10px程の...
-
floatした画像の下揃えについて
-
CSSの角丸での質問です。 今、C...
-
スクロールボックスを中央に配...
-
定義リスト dl dd dt
-
余分な縦スクロールバーが出て...
-
heaerとfooterに背景画像が難し...
-
Flexslider2のカーセルスライダ...
-
CSSでボックスのheightが0になる
-
【スタイルシート?】同行内で...
-
テーブル内の文字が揃わない
-
【CSSについて】リストをフロー...
-
リストを全体的に右寄せにしたい。
-
CSSで余白とパディングに”0”を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlの文字が縦書きになる
-
widthやheightの数値に単位(px...
-
画像イメージの上下左右、欲し...
-
css初心者 フレックスボックス...
-
表示倍率を変えるとレイアウト...
-
CSSがなぜかfont-sizeだけ効か...
-
CSS、width100%でもできる余白
-
W3Cのソースコードの検証サービ...
-
CSS:animation開始位置の設定
-
CSSで指定した背景画像にリンク...
-
<div>と<div>の間の10px程の...
-
余分な縦スクロールバーが出て...
-
CSSでボックスのheightが0になる
-
【CSS】ヘッダーの高さが不明の...
-
スクロールボックスを中央に配...
-
li 黒丸含んで移動する方法
-
border-style:solidで文字がずれる
-
【HTML&CSS】フッター下部の余...
-
Media Queries 4 で 非推奨とな...
-
初心者html・CSS ウィンドウを...
おすすめ情報