« 久しぶりに遊びに来てくれました♪ | メイン | 皮むきグローブ ムッキー »

ネガティブマージン

当店のページはほぼ全て2カラムで作成しています。


でも最近ソースを書いていて、
「3カラム・・・いいなぁ・・・。」と思ってきました。


あ。
もちろん、全ページ3カラムにしたいとかでは無いですよ^^
1カラム・2カラム・3カラムとそれぞれ長短ありますしね。


だからまず手始めにTOPページを3カラムにしてみようかなぁ?なんて、
漠然と考えています。


その際、divで括って入れ子にしてあげれば
比較的簡単に3カラムには出来ちゃうんですが、
あまりいっぱい入れ子にしたくないなぁと考えちゃいます(←暇人ですw)


そうなると、避けて通れない(?)のが、
【ネガティブマージン(negative margin)】だと思います。


ネガティブマージンを使えば、変に入れ子にせずに表示できると思います。


で。
以下のように自分で書いてみました。
ちゃんと私は理解できているのか少々不安です(汗)
(主要部分のみ抜粋)

----------------------------------
html:
<div id="allContents">
<div class="contents"></div>
<div class="sub"></div>
<div class="menu"></div>
</div>

css:
#allContents {
width : 800px;
margin : auto;
text-align : left;
}

.contents {
width : 500px;
margin-left : -650px;
float : right;
}

.sub {
width : 150px;
float : right;
}

.menu{
width : 150px;
float : left;
}
----------------------------------

こうすると、至ってシンプル☆
良くないコレ、コレ良くない?^^;


ただ、上記でも書きましたが他のブラウザで確認していないので
もしかしたら最悪レイアウト崩れも起こるかもしれません(大汗)
今、当店のIE7・IE8では大丈夫でした♪
(誰か確認してくれると嬉しいですが、そんな人いませんよね^^;)


あ。ちなみにIE6でwidthの解釈の違いによるバグがあるらしいので、
floatした要素にはpadding, borderを使わないようにした方が良いかもしれません。
ガチガチに幅を決めている人は、たぶんレイアウトが崩れます。


P.S.この記事にコメントが入ることを願いますw

コメント (9)

こんちは。

うーん(@_@;)
そのガチガチに幅をきめているのが私であります。

そして作ってるうちにバチバチ絶対位置を指定しなきゃダメになって、もはや直す気もありません(@_@;)

いちおー今冬に全面リニューアルを目論んでます。
直すより作りなおした方が早そうだし(*_*;
もちろん写真も差し替えて(*^^)v (うまく使いこなせたらですが…)

>floatした要素にはpadding, borderを使わないようにした方が良いかもしれません。

これがイマイチよく理解できないですねぇ(@_@;)

あと、ネガティブマージンって何すかね(?_?)

Z400GPさん

こんにちは!

>うーん(@_@;)
そのガチガチに幅をきめているのが私であります。

 まぁ、基本そうしますよね^^

>そして作ってるうちにバチバチ絶対位置を指定しなきゃダメになって、もはや直す気もありません(@_@;)

 ソースを見たわけじゃありませんが、
 基本的にはあまり多くの要素を
 絶対的に位置決めしないほうが良いと個人的には思います^^;
 直す気がなくなる気持ち、よ~く分かります^^;

>いちおー今冬に全面リニューアルを目論んでます。
直すより作りなおした方が早そうだし(*_*;
もちろん写真も差し替えて(*^^)v (うまく使いこなせたらですが…)

 おぉ~^^
 楽しみですね~♪
 デジイチも購入したことですし、バッチリですね☆

>>floatした要素にはpadding, borderを使わないようにした方が良いかもしれません。
>これがイマイチよく理解できないですねぇ(@_@;)

 上のソースで言うと、
 3つのdiv(contents・sub・menu)のそれぞれにCSSで
 float(回り込み要素)をrightもしくはleftを指定していますよね。
 IE6でwidthの解釈の違いによるバグ
 (色々あるらしいのですが今回の記事の内容に則すと、主に幅を算出するときにpaddingやborderのサイズを含めてしまっちゃうとのこと )
 なのでその3つのdiv(contents・sub・menu)それぞれに
 padding要素やborder要素を書き加えないほうが
 良いということです。
 
>あと、ネガティブマージンって何すかね(?_?)

 .contents {
 width : 500px;
 margin-left : -650px;←コレです
 float : right;
 }

 マイナスのマージンのことです。
 マイナスを使うと、スパムじゃないの~?なんて
 どこかから聞こえてきそうです(汗)が、
 W3Cも認めているとのことです☆

ふたたび登場(@_@;)

ほほぅ(●^o^●)
とは言えないかなぁ(@_@;)

IE6がやっかいなんですね!
試しに自分で書いてみた方が理解できそうですね(*^_^*)

このエントリー、お気に入りに加えて後で実践してみます。

阿賀野塾でも、こーゆー、ソースの具体的な書き方&何がマズイのか、を講習してもらうとありがたいですねぇ(*^_^*)

中身の細かいのは各自で書き込む事にして、1・2・3カラムの何パターンかを大まかにプリントしてもらって。

それを阿賀野塾みんなでテンプレートとして共有する、なんてのはどうでしょう?

でも製作者はパクられるのが嫌になるかなぁ?
難しいですね。


サッシーさん、ご指南ありがとうございました(*^^)v


Z400GPさん

>ふたたび登場(@_@;)

 ありがとうございます!
 個人的に、こんな記事にコメントくれるなんて、
 めちゃくちゃ嬉しいですよ~^^

>ほほぅ(●^o^●)
とは言えないかなぁ(@_@;)

 ありゃ。
 何か分かりにくいですよね^^;
 目の前で説明すれば何てことはないんでしょうけどね。

>IE6がやっかいなんですね!
試しに自分で書いてみた方が理解できそうですね(*^_^*)

 そうですね☆

>このエントリー、お気に入りに加えて後で実践してみます。

 はい、試してみて下さい^^

>阿賀野塾でも、こーゆー、ソースの具体的な書き方&何がマズイのか、を講習してもらうとありがたいですねぇ(*^_^*)

 多分実現難しいですね^^;
 というのは、殆どの方が何らかのHP作成ソフトで
 ページ製作しているためです。
 私も本当はソフトで更新したいのですが、
 ソフトの操作方法を覚えるのが面倒(爆)なので、
 今に至ってしまってます^^;
 ソフトだと効率がいいんですよね~☆
 時間を有効活用できます。
 まあ、タグ打ちしてると色々自由はあるのですが(汗)

 私で良ければ講座開設しましょうか?(笑)
 あまり勉強にならないと思いますが(爆)

>中身の細かいのは各自で書き込む事にして、1・2・3カラムの何パターンかを大まかにプリントしてもらって。

>それを阿賀野塾みんなでテンプレートとして共有する、なんてのはどうでしょう?

 ド基本ならネット上にいくらでも落ちてますし、
 そのくらいなら、私で良ければ書きますよ♪
 ちょちょっと出来ちゃいます(^o^)/

>でも製作者はパクられるのが嫌になるかなぁ?
難しいですね。

 いや~、コレくらいなら全然パクリに入らないです。
 みんな基本は同じですから。

>サッシーさん、ご指南ありがとうございました(*^^)v

 い~え、全然気軽にコメント下さいね~☆

おー、シンプル。
ネガティブマージン勉強してみます。

ちなみに私のホームの3コラムは

<div id="contents">
<div id="twocol">
<div id="main"></div>
<div id="side"></div>
</div>
<div id="ad_side"></div>
</div>

という構造です。

IE6ではfloatにwidthを指定するとwidthはpaddingの分も含んでしまうというバグですね。
基本的にfloatにwidthを使うということなんで「floatした要素にはpadding, borderを使わない。」ということなんだよね。

うちのPCはIE6でも見れますので、よかったらチェックします。

↑タグ直接書き込んでしまったので、表示されませんでした。失礼。
ま、私のサイトの構造はどーでもいいです。

アゴスさん

せっかくなんで、タグ見れるようにしました^^
大抵どんなサイトでも入れ子にしてますよね。

ネガティブマージンの利点はソースがシンプルになる!に尽きますね☆
ソース書いているとたまにどのdivを閉じているのか分からなくなるときがあります(苦笑)
間違って消してしまっていたりするときは特に大変です^^;

私みたいなそそっかしい人間は特にシンプルにした方が、
人間的エラーが出なくていいかも知れません(笑)

tokiya:

これ、IE8、Safari firefox operaともに、まともに表示されませんよ。
ぐちゃぐちゃになる。
そもそも、800pxのコンテナの中で500pxの子ボックスを右にフロートさせ、左へ-650pxのネガティブマージンを指定した時点で800pxのコンテナから500pxの子ボックスがはみ出してぐちゃぐちゃになるのでは?

tokiyaさん

コメントありがとうございます。

他のブラウザ等、きちんと確かめていなく、
また私の認識・理解が低いので、
時間が出来ましたら再度やってみたいと思います。

ご指摘ありがとうございました。

コメントを投稿

トラックバック

このエントリーのトラックバックURL:
http://sassy-swan.com/mtblog/mt-tb.cgi/379

この記事情報!

2009年08月03日 12:27に投稿

久しぶりに遊びに来てくれました♪」もどうぞ。

次は「皮むきグローブ ムッキー」。

他にも色々!
メインアーカイブも見てね!

Technorati

Technorati search

» ここにリンクしているブログ

Powered by
Movable Type 3.35