プロが教える店舗&オフィスのセキュリティ対策術

疑似インラインフレームを中央に配置する方法

疑似インラインフレームを画面中央に配置する方法を教えてください。
ちなみに、以下のような記述を試してみたのですが…。

【css】
body {
text-align: center;
margin-top: 100px;
color: #555555;
font-size: 10px;
font-family: "MS Pゴシック";
}

*{
margin:0px;
border:0px;
padding:0px;
line-height:100%;
}

.box{
text-align: center;
padding-bottom: 50px;
}

.box_scroll{
text-align: center;
width: 300px;
height: 200px;
padding: 10px 10px;
overflow: auto;
}

【xhtml】
<div class="box">
<img src="img.jpg" width="100" height="50" alt="img" />
</div>
<div class="box">
<div class="box_scroll">
---文章---
</div>
</div>

初めの<div class="box">は中央に配置されるのですが、疑似インラインの部分は左に寄ってしまいます。
他にも他の方の質問を参考に試してみたのですが、初心者の為いまいちよくわからず、うまくいきませんでした。

どうか回答よろしくお願いいたします。

A 回答 (3件)

******************************************


罫線で見やすくしています。BOX間に改行を
入れています。
margin-autoでセンタリングしています。

text-alignは、中身のインライン要素をセンタリング
するものです。
******************************************


<div class="box">
<img src="img.jpg" width="100" height="50" alt="img" />
</div>

<br />


<div class="box_scroll">
<p>---文章---</p>
</div>

***********************************************

body {
margin-top: 100px;
color: #555555;
font-size: 10px;
font-family: "MS Pゴシック";
}

*{
margin:0px;
border:0px;
padding:0px;
}


.box{
margin-right: auto;
margin-left: auto;
clear: both;
width: 100px;
background-color: #FFFFCC;
height: 50px;
border: 1px solid #FFCC33;
}

.box_scroll{
width: 300px;
height: 200px;
padding: 10px;
overflow: auto;
margin-right: auto;
margin-left: auto;
border: 1px solid #FF0000;
}
    • good
    • 0
この回答へのお礼

早速の回答、ありがとうございました。
参考にさせていただき、解決できました。
また、分かりやすい解説に感謝です。

お礼日時:2010/06/23 23:18

スタイルシートでは、*は全称セレクタで、詳細度0ですから、他のセレクタで要素が一つでも指定されれば、*の位置に関わらず上書きされますから、記述の順番には関係ありません。


★詳細度が同じなら後からの記述で上書きされます。
 ^^^^^^^^^^^^^^^^
とはいっても*全称セレクタで、paddingやmarginを0にリセットするのは感心しません。dlやol,ulなどがあると、いちいち指定する必要が出てきます。せいぜいbodyとhtmlに対してのみ指定しましょう。

 ページモデル(media=printなど)でない限りスクロール可能な端末にはheightは表示サイズを参照できません。したがって

>画面中央に配置する方法を教えてください。
 は縦方向に関しては無理です。あくまで「横方向の中央」です。

 div(汎用ブロック要素)はブロック要素ですから、内部に非置換要素を含む場合はheightは指定する必要があります。横方向関しては、widthを指定して、margin-left,margin-widthをautoにすると中央に表示されなければならないのですが、IE6以前は、それを含むボックス要素にtext-align:centerとしないと左によるバグがあります。

 下記サンプルは、divを重ねてありますが重ねなくても良いはずです。また印刷時はheightは無効になってすべて印刷されます。

<?xml version="1.0" encoding="UTF-8"?>
<!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>
<style type="text/css">
<!--
ht,l,body{margin:0px;padding:0px;}
body{
text-align:center; /* for Old IE */
}
div.article{
border: solid 1px blue;
}
@media screen{
body{background-color:gray}
div.article{
width:80%;
margin-right:auto;
margin-left:auto;
}
div.article div{
background-color: white;
width: 300px;
height: 100px;
margin: auto;
padding: 10px;
overflow: auto;
}
}
@media print{
body{
width: 180mm;
height: 260mm;
border: solid 1px gray;
}
div.article{
text-align:left;
width: 80%;
margin-left: auto;
margin-right: auto;
border: solid 1px gray;
}
div.article div{
width:100%;
}

-->
</style>
<title>サンプル</title>
</head>
<body>
<h1>サンプル</h1>
<p class="title"><img src="img.jpg" width="100" height="50" alt="画像" /></p>
<div class="article">
<h2>見出し</h2>
<p>ここから段落が続く</p>
<div>
<p>---文章---</p><p>---文章---</p><p>---文章---</p><p>---文章---</p>
<p>---文章---</p><p>---文章---</p><p>---文章---</p><p>---文章---</p>
<p>---文章---</p><p>---文章---</p><p>---文章---</p><p>---文章---</p>
</div>
</div>
</body>
</html>

この回答への補足

丁寧な回答、ありがとうございました。
参考にさせていただき、解決できました。

> *全称セレクタで、paddingやmarginを0にリセットするのは感心しません。

これは、違ったブラウザでもできるけ見た目が変わらないように記述したものです。
勉強不足で「bodyとhtmlだけ」という考えがなかったのですが、bodyとhtmlだけという方法でも上記のような効果が得られますか?
もしそちらの方が良いようであれば、書き変えたいと思うのですが…。

>縦方向に関しては無理です。あくまで「横方向の中央」です。

説明不足ですみませんでした。
「横方向での中央」についてお聞きしたかったのです。

補足日時:2010/06/24 00:23
    • good
    • 0

CSSのみ変更しました。



*{
margin:0px;
border:0px;
padding:0px;
line-height:100%;
}

body {
text-align: center;
margin-top: 100px;
color: #555555;
font-size: 10px;
font-family: "MS Pゴシック";
}

.box{
text-align: center;
padding-bottom: 50px;
}

.box_scroll{
 text-align: center;
 width: 300px;
 height: 200px;
 padding: 10px 10px;
 overflow: auto;
 margin: 0 auto;    ←追記
}

---

なお、*とbodyの順番を入れ替えています。
*は「全ての要素」という意味を持つので、
bodyでマージンなどを設定しても直後の「*」で打ち消されてしまっています。
    • good
    • 0
この回答へのお礼

回答、ありがとうございました。
参考にさせていただき、解決できました。

ちなみに、*とbodyの順番は、当初の順番でも特に問題はありませんでした。
でも、もうちょっと勉強してみます。
ご指摘、ありがとうございました。

お礼日時:2010/06/24 00:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!