- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是HTML/CSS初学者,只是一些关于 float 元素的问题,下面是代码
section {
border: 1px solid blue;
}
div {
margin: 5px;
width: 200px;
height: 50px;
}
.left {
float: left;
background: pink;
}
.left_second {
position:relative;
background: blue;
}
.right {
float: right;
background: cyan;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device_width,initial-scale=1.0">
<title>Page Title</title>
<link rel="stylesheet" type="text/css" href="makeup.css">
</head>
<body>
<section>
<div class="left">1</div>
<div class="left_second">2</div>
<div class="right">3</div>
</section>
</body>
</html>
所以我的问题是:
据说, float 元素已从页面的正常流中移除,但仍保留为流的一部分(与绝对定位相反)。 但“仍保留一部分流量”究竟是什么意思?正如我们所看到的,第二个 div 与第一个 div 重叠,这意味着第一个 div 不再是流的一部分了吗?唯一能让它“仍然保持流程的一部分”的是在第二个 div 上设置 float:left
,然后第二个在第一个 div 的右边,这看起来像first div 确实存在于流程中,我的理解正确吗?
为什么第三个 div 在包含 block 之外?为什么它不像第一个和第二个 div 那样位于包含 block 内?
最佳答案
它仍然是流程的一部分,因为文本仍然围绕着 float ,因此它们仍然被认为是流程的一部分,不像 position:absolute
元素不会再影响流程。
The float CSS property places an element on the left or right side of its container, allowing text and inline elements to wrap around it. The element is removed from the normal flow of the page, though still remaining a part of the flow (in contrast to absolute positioning).ref
为了回答您的问题,让我们逐步添加属性。
最初我们有这个:
section {
border: 1px solid blue;
}
div {
margin: 5px;
width: 200px;
height: 50px;
}
.left {
/*float: left;*/
background: pink;
}
.left_second {
position:relative;
background: blue;
}
.right {
/*float: right;*/
background: cyan;
}
<section>
<div class="left">1</div>
<div class="left_second">2</div>
<div class="right">3</div>
</section>
没有 float 元素,每个 div 占一行,并且所有元素都在该部分的边框内。让我们 float 第一个并使蓝色背景有点透明并删除最后一个 div。
section {
border: 1px solid blue;
}
div {
margin: 5px;
width: 200px;
height: 50px;
}
.left {
float: left;
background: pink;
}
.left_second {
position:relative;
background: rgba(0,0,255,0.4);
}
.right {
/*float: right;*/
background: cyan;
}
<section>
<div class="left">1</div>
<div class="left_second">2</div>
<!--<div class="right">3</div>-->
</section>
如您所见,蓝色 div 完全覆盖了 float 元素,蓝色 div 的文本在外面。在这里,您面临溢出问题。让我们增加蓝色框的宽度以便更好地查看:
section {
border: 1px solid blue;
}
div {
margin: 5px;
width: 200px;
height: 50px;
}
.left {
float: left;
background: pink;
}
.left_second {
position:relative;
width:300px;
background: rgba(0,0,255,0.4);
}
.right {
/*float: right;*/
background: cyan;
}
<section>
<div class="left">1</div>
<div class="left_second">2</div>
<!--<div class="right">3</div>-->
</section>
如您所见,文本 (2
) 在 float 元素之后开始并且不与其重叠,因为文本环绕 float 元素与 block 元素不同。换句话说,蓝色 div 将从 float 元素的顶部开始,而不是其内容,如果尺寸减小,文本将被推到下一行并溢出:
section {
border: 1px solid blue;
}
div {
margin: 5px;
width: 200px;
height: 50px;
}
.left {
float: left;
background: pink;
}
.left_second {
position:relative;
width:300px;
background: rgba(0,0,255,0.4);
transition:1s;
}
.left_second:hover {
width:200px;
}
.right {
/*float: right;*/
background: cyan;
}
<section>
<div class="left">1</div>
<div class="left_second">2 (hover me)</div>
<!--<div class="right">3</div>-->
</section>
您可能还会注意到,只有 蓝色 div 被该部分的蓝色边框包围,因为它是唯一的非 float 元素,并且由于它与粉红色重叠,所以这个元素也必然存在。如果你移除蓝色的 div,你会看到粉色的在外面:
section {
border: 1px solid blue;
}
div {
margin: 5px;
width: 200px;
height: 50px;
}
.left {
float: left;
background: pink;
}
.left_second {
position:relative;
width:300px;
background: rgba(0,0,255,0.4);
transition:1s;
}
.left_second:hover {
width:200px;
}
.right {
/*float: right;*/
background: cyan;
}
<section>
<div class="left">1</div>
<!--<div class="left_second">2</div> -->
<!--<div class="right">3</div>-->
</section>
现在,如果我们重新添加第三个 div,它将从蓝色 div 的底部和该部分内部开始:
section {
border: 1px solid blue;
}
div {
margin: 5px;
width: 200px;
height: 50px;
}
.left {
float: left;
background: pink;
}
.left_second {
position:relative;
background: rgba(0,0,255,0.4);
}
.right {
/*float: right;*/
background: cyan;
}
<section>
<div class="left">1</div>
<div class="left_second">2</div>
<div class="right">3</div>
</section>
如果你将它 float 到右边,它会被放置在该部分的右边和外面:
section {
border: 1px solid blue;
}
div {
margin: 5px;
width: 200px;
height: 50px;
}
.left {
float: left;
background: pink;
}
.left_second {
position:relative;
background: rgba(0,0,255,0.4);
}
.right {
float: right;
background: cyan;
}
<section>
<div class="left">1</div>
<div class="left_second">2</div>
<div class="right">3</div>
</section>
这就是为什么我们需要清除 float 以避免重叠效应和外部效应:
section {
border: 1px solid blue;
overflow:hidden; /*make the float inside*/
}
div {
margin: 5px;
width: 200px;
height: 50px;
}
.left {
float: left;
background: pink;
}
.left_second {
position:relative;
clear:left; /*clear left float*/
background: rgba(0,0,255,0.4);
}
.right {
float: right;
background: cyan;
}
<section>
<div class="left">1</div>
<div class="left_second">2</div>
<div class="right">3</div>
</section>
关于html - float 元素在包含 block 之外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54299260/
我有一个类似于以下的结构。 class A { string title; List bItem; } class B { int pric
本地流 和 远程流 两者都是“媒体流列表 ”。 本地流 包含“本地媒体流 ” 对象 但是,远程流 包含“媒体流 ” 对象 为什么差别这么大? 当我使用“本地流 “- 这个对我有用: localVide
我正在尝试将 8 列虚拟变量转换为 8 级排名的一列。 我试图用这个公式来做到这一点: =IF(OR(A1="1");"1";IF(OR(B1="1");"2";IF(OR(C1="1");"3";I
我正在使用面向对象编程在 Python 中创建一个有点复杂的棋盘游戏的实现。 我的问题是,许多这些对象应该能够与其他对象交互,即使它们不包含在其中。 例如Game是一个对象,其中包含PointTrac
有没有办法获取与 contains 语句匹配的最深元素? 基本上,如果我有嵌套的 div,我想要最后一个元素而不是父元素: Needle $("div:contains('Needle')")
出于某种原因,我无法在 Google 上找到答案!但是使用 SQL contains 函数我怎么能告诉它从字符串的开头开始,即我正在寻找等同于的全文 喜欢 'some_term%'。 我知道我可以使用
我正在尝试创建一个正则表达式来匹配具有 3 个或更多元音的字符串。 我试过这个: [aeiou]{3,} 但它仅在元音按顺序排列时才有效。有什么建议吗? 例如: 塞缪尔 -> 有效 琼 -> 无效 S
嘿所以我遇到了这样的情况,我从数据库中拉回一个客户,并通过包含的方式包含所有案例研究 return (from c in db.Clients.Include("CaseStudies")
如果关键字是子字符串,我无法弄清楚为什么这个函数不返回结果。 const string = 'cake'; const substring = 'cak'; console.log(string.in
我正在尝试将包含特定文本字符串的任何元素更改为红色。在我的示例中,我可以将子元素变为蓝色,但是我编写“替换我”行的方式有些不正确;红色不会发生变化。我注意到“contains”方法通常写为 :cont
我想问一下我是否可以要求/包含一个语法错误的文件,如果不能,则require/include返回一个值,这样我就知道所需/包含的文件存在语法错误并且不能被要求/包含? file.php语法错误 inc
我想为所有包含youtube链接的链接添加一个rel。 这就是我正在使用的东西-但它没有用。有任何想法吗? $('a [href:contains(“youtube.com”)]')。attr('re
我正在尝试在 Elasticsearch 中查询。除搜索中出现“/”外,此功能均正常运行。查询如下所示 GET styling_rules/product_line_filters/_search {
我正在开发名为eBookRepository的ASP.NET MVC应用程序,其中包含在线图书。 电子书具有自己的标题,作者等。因此,现在我正在尝试实现搜索机制。我必须使用Elasticsearch作
我已阅读Firebase Documentation并且不明白什么是 .contains()。 以下是文档中 Firebase 数据库的示例规则: { "rules": { "rooms"
我的问题是我可以给出条件[ 'BookTitleMaster.id' => $xtitid, ] 如下所示 $bbookinfs = $this->BookStockin->BookIssue->fi
我需要能够使用 | 检查模式在他们中。例如,对于像“dtest|test”这样的字符串,像 d*|*t 这样的表达式应该返回 true。 我不是正则表达式英雄,所以我只是尝试了一些事情,例如: Reg
我想创建一个正则表达式来不匹配某些单词... 我的字符:var test = "é123rr;and;ià456;or;456543" 我的正则表达式:test.match(\((?!and)(?!o
我在 XSLT 中有一个名为 variable_name 的变量,如果相关产品具有名称为 A 或 B 或两者均为 A & 的属性,我将尝试将其设置为 1 B.
您好,我想让接待员和经理能够查看工作类型和费率并随后进行更新。但是技术人员只能查看不能更新。该图是否有效? 我读到扩展用例是由发起基本用例的参与者发起的。我应该如何区分技术人员只能启动基本案例而不能启
我是一名优秀的程序员,十分优秀!