1

2 つの div があり、一方が他方の内部にあります。「innerdiv」が期待どおりに動作していません。右側の「maindiv」の内側にはありません。誰かが理由を説明してくれますか?

JsFiddle: http://jsfiddle.net/D9RsQ/

これが私のhtmlです:

<!DOCTYPE html>
<head>
    <meta charset = "UTF-8"/>
    <title>Home</title>
    <link rel="stylesheet" text="text/css" href="css.css">
</head>
<body>
    <div class = "maindiv">
        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.
            </p>
        <div class = "innerdiv">
            <p>This is innerdiv content</p>

        </div>
    </div>
</body>

そして、ここに私のCSSがあります:

html {
    height:100%;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
    background-repeat:no-repeat;
    background: -webkit-linear-gradient(#ffffff, #004c99);
    background: -moz-linear-gradient(#ffffff, #004c99);
    background: -ms-linear-gradient(#ffffff, #004c99);
    background: -o-linear-gradient(#ffffff, #004c99);
    background: linear-gradient(#ffffff, #004c99);
}

p {
    font-family:"Arial Black";
    line-height:120%;
}
div.maindiv {
    width:90%;
    margin-top:0px;
    margin-left:auto;
    margin-right:auto;
    margin-bottom:0px;
    padding:0px;
    background-color:rgb(220,220,220);
    border-right: solid black 2px;
    border-left: solid black 2px;
}
div.innerdiv {
    width:100px;
    float:right;
    background-color:rgb(100,100,100);
}
4

2 に答える 2

5

clearfix親で多数のトリックの 1 つを使用する必要があります。例えば:

div.maindiv:after {
  content: "";
  display: table;
  clear: both;
}

JSFiddleで見る

clearfix のトリックの詳細については、Chris Coyier のすばらしい要約をご覧ください。

右のボックスを右上に表示したい場合は、メイン div の段落の前に Html に配置するだけです。

<div class = "maindiv">
  <div class = "innerdiv">
    <p>This is innerdiv content</p>
  </div>
  <p>Text</p>
</div>

JSFiddleで見る

クリアフィックス?この狂気は何ですか?

ここで何が起こっているか (そしてそれが他に何に影響を与えるか) を説明するために、フロートとは何かを説明することから始めましょう。

専門的に言えば、フロートは通常のフローから削除された要素です。block通常のフローは、またはinlineボックスのように動作する要素を参照するだけです。通常のフローから要素を削除するには、いくつかの方法があります。設定position: absolute;は一例です。そして、前に言ったように、フロートは別の例です。

では、float はどのように動作するのでしょうか。横方向のスペースは占有しますが、縦方向のスペースは占有しません。

これは、float の使用目的の 1 つであると私が想像するもの、つまり段落の横にある画像にとって理想的です。これにより、フローティング要素を次のように表示できます。

浮く

画像ソース: w3c CSS2 仕様

この画像は記事の一般的なレイアウトを示しており、フローティング要素が次の段落を押し下げない場合にのみ可能です。したがって、ページの縦方向のフォーマットに関しては、フロートは無視されます。

そのイメージは仕様自体から来ているため、仕様の作成者はこの目的でフロートを使用することを意図していたと思います。

したがって、レイアウトにフロートを使用することで、必ずしも意図されていないことを強制することになる可能性があります。しかし、Css はまだ比較的新しく、これを何度も行う必要がある傾向があるため、これは心配する必要はありません。より優れたフォーマット システムが間もなく登場します (つまり、フレックスボックスグリッド レイアウト) 。

しかし、はい、レイアウトに関しては、上の画像の動作は望ましくありません。縦方向のスペースを取りながら、要素を側面に配置したいと考えています。float はデフォルトではこのように動作しませんが、強制的に動作させることができます。そして、それを行うと、 と呼ばれclearfixingます。

上記で使用した方法、つまりclearプロパティを使用して説明します。このプロパティを使用すると、要素の両側のフロートを制限できます。clear: both;両側の浮きを防ぎます。

このプロパティを:after親の疑似要素に適用して、マークアップには表示されませんが、ブラウザーではレンダリングされます。そして出来上がり!クリアフィックスに成功しました!

clear プロパティの詳細については、トピックに関する優れた MDN の記事を参照してください。

于 2013-05-30T18:48:22.157 に答える
2

設定overflow: autoするだけdiv.mainDiv

http://jsfiddle.net/77NEF/

于 2013-05-30T18:51:38.787 に答える