html – 如果没有CSS修复,为什么我的盒子边框不包围它们内部的浮动? (修复如何工作?)

我正在自学CSS和 HTML,而且我遇到了一些看似错误的东西 – 这对我如何理解HTML和CSS很有挑战性.我已经找到了解决这个bug的方法,但是我希望有人可以告诉我修复工作的原因,以及是否有一些建议可以更容易地处理CSS的不一致性.下面我详细介绍了问题及其解决方案.

问题:
我有一些项目,我想嵌套在页面上的几个框中.我已经改变了CSS以引起注意特定的问题区域:红色和绿色框应该夹在黑色和黄色线之间.

红色和绿色框设置为浮动到页面的右侧和左侧.它们的容器不会膨胀以包围它们,并且黑色和黄色线条相互接触.在我的自定义CSS之前应用魔法CSS之后,两条线按预期包围红色/绿色框

这是我的文件
template.html

<html>
<head>
    <!-- uncomment the line below to enable the fix -->
    <!--<link rel="stylesheet" href="css/resettemp.css" type="text/css" > -->
    <link rel="stylesheet" href="css/template.css" type="text/css" > 
</head>
<body>
    <section class="content">
        <header id="contact">
            <div id="name">Name</div>

            <div id="address">
                <div>Home Address</div>
            </div>

            <div id="contact-details">
                <div><strong>Phone Number:</strong>5555 </div>
            </div>
        </header>
        This text should be under everything else.
    </section>
</body>
</html>

template.css:

header#contact
{
    display: block;
    font-size: 1em;
    border-bottom: 5px #ff0 dashed;
}

header#contact
#name
{
    display:block;
    text-align: right;
    font-size: 2em;
    border-bottom: 3px #000 solid;
}

header#contact
#address
{
    float:left;
    background: #f00;
}

header#contact
#contact-details
{
    float:right;
    background: #0f0;
}

以下修复程序放在“resettemp.css”中:

/* our Global CSS file */article:after { clear:both; content:"."; display:block; height:0; visibility:hidden; }aside:after { clear:both; content:"."; display:block; height:0; visibility:hidden; }div:after { clear:both; content:"."; display:block; height:0; visibility:hidden; }footer:after { clear:both; content:"."; display:block; height:0; visibility:hidden; }form:after { clear:both; content:"."; display:block; height:0; visibility:hidden; }header:after { clear:both; content:"."; display:block; height:0; visibility:hidden; }nav:after { clear:both; content:"."; display:block; height:0; visibility:hidden; }section:after { clear:both; content:"."; display:block; height:0; visibility:hidden; }ul:after { clear:both; content:"."; display:block; height:0; visibility:hidden; }/* our ie CSS file */article { zoom:1; }aside { zoom:1; }div { zoom:1; }footer { zoom:1; }form { zoom:1; }header { zoom:1; }nav { zoom:1; }section { zoom:1; }ul { zoom:1; }

来源:http://www.sycha.com/css-clearfix-floated-element-automatically-fill-parent-container

然后是上面的CSS:http://www.marcwatts.com.au/blog/best-clearfix-ever/

我如何理解这个CSS修复的工作原理?
除了理解这些特性之外,我如何自学CSS的基本语法?
看起来我可能正在使用浮动来不正确地完成格式化目标 – 在另一个块元素下面的容器的相对两侧获取两个文本框的更可接受的方式是什么?

浏览器:谷歌浏览器10.0.648.205

解决方法

问题”

这是一个图表,从w3c开始,显示当浮动重叠正常流中元素的边界时会发生什么.

浮动元素的这种行为导致其父元素的高度做大多数开发人员认为不直观的事情.

但鉴于它在w3c上有记录,这是故意的:它不是一个bug.

你找到的解决方

所以这是CSS中有趣的规则:

/* our Global CSS file */
header:after {
    clear:both;
    content:".";
    display:block;
    height:0;
    visibility:hidden;
}

此规则定位于< header>元素,但它也使用:pseudo-element之后.结果就是它在< header>之后有一个虚构的元素.您使用此CSS规则进行定位:

<!DOCTYPE html>
<html>
<head>
    <!-- uncomment the line below to enable the fix -->
    <!--<link rel="stylesheet" href="css/resettemp.css" type="text/css" > -->
    <link rel="stylesheet" href="css/template.css" type="text/css" >
    <title>Teaching myself CSS,HTML. I want help understanding this bug.</title>
</head>
<body>
    <section class="content">
        <header id="contact">
            <div id="name">Name</div>

            <div id="address">
                <div>Home Address</div>
            </div>

            <div id="contact-details">
                <div><strong>Phone Number:</strong>5555 </div>
            </div>
        </header><!-- imaginary header:after element -->
        This text should be under everything else.
    </section>
</body>
</html>

这个虚构的标题:在< header>之后添加的“element”之后有一个明确的:两个CSS属性

/* our Global CSS file */
header:after {
    clear:both; /* This property clears floating elements! */
    content:".";
    display:block;
    height:0;
    visibility:hidden;
}

那清楚的是什么呢?根据w3c

This property indicates which sides of an element’s Box(es) may not be adjacent to an earlier floating Box.

不太可靠但有时更清晰的w3schools描述清楚……

The clear property specifies which sides of an element where other floating elements are not allowed.

由于标题:在“元素”之后有一个明确的:两个CSS属性,它将出现在左侧或右侧的任何浮动元素的底部(之后),例如您的红色和绿色框.

现在,resettemp.css文件似乎几乎针对可以想象的每个元素使用相同的技巧 – 一种解决浮动溢出问题的地毯炸弹方法.更好的想法是学习CSS:P

你也可以使用标题{overflow:hidden; } – 取决于您的需求.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些