Float问题及其解决方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Float问题及其解决方法相关的知识,希望对你有一定的参考价值。

Float问题及其解决方法

float 属性

定义元素向哪个方向浮动。在 CSS 中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。Float的属性值可以为:leftrightnoneinherit等。

 

注意:

假如在一行上不够容纳整个浮动元素,则该元素会自动跳到下一行,依次往下跳,直到空间足够为止。

例如:

<style>

.content{

width:800px;

float:left;

border:1px solid #000;

}

.left,.right{

width:500px;

height:200px;

border:1px solid #666;

}

.left{

float:left;

}

.right{

float:right;

}

</style>

 

<body>

<div class="content">

<div class="left">向左浮动</div>

<div class="right">向右浮动</div>

</div>

</body>

//  元素right最终在left下方。

 

 

Float属性带来的问题和解决方法:

 

1.float元素挡住了普通元素。

例如:

<style>

.content{

height:600px;

border:1px solid #CCC;

}

.left{

width:20%;

height:400px;

float:left;

border:1px solid #CCC;

}

.right{

width:20%;

height:400px;

float:right;

border:1px solid #CCC;

}

.main{

margin-left:21%;

margin-right:21%;

height:200px;

    border:1px solid #CCC;

}

.footer1{

height:100px;

border:1px solid #CCC;

}

</style>

 

<body>

<div class="content">

<div class="left">left</div>

<div class="right">right</div>

<div class="main">main</div>

<div class="footer1">footer没有清除浮动的状态</div>

</div>

</body>

//  left和right元素将漂浮在footer1元素上面,挡住了footer1的左右。

 

 

解决方法:采用clear属性清除浮动。

例如:

<style>

.content{

height:600px;

border:1px solid #CCC;

}

.left{

width:20%;

height:400px;

float:left;

border:1px solid #CCC;

}

.right{

width:20%;

height:400px;

float:right;

border:1px solid #CCC;

}

.main{

margin-left:21%;

margin-right:21%;

height:200px;

    border:1px solid #CCC;

}

.footer2{

height:100px;

clear:both;

border:1px solid #CCC;

}

</style>

 

<body>

<div class="content">

<div class="left">left</div>

<div class="right">right</div>

<div class="main">main</div>

<div class="footer2">采用clear清楚浮动后的状态,footer元素出现在底端而且上面有float元素</div>

</div>

</body>

 

 

2.普通元素包含了浮动元素时,如果浮动元素高大于普通元素,则浮动元素将会溢出普通元素的范围。

注意:接下来的例子均以浮动一张较大的图片为例,可以自行链接一张图片。

例如:

<style>

img{

float:left;

}

h1{

border:1px solid #000;

}

</style>

 

<body>

<div class="content1">

<h1><img src="img.jpg" />未处理</h1>

<p>如果非浮动元素中有高于它的浮动元素时,浮动元素会超出非浮动元素的范围。

例如:图片高度超出了h1标签的高度</p>

</div>

</body>

 

 

 

解决方法1:加大父级元素高度,但扩展性不好,因为有时不能完全确定浮动元素的宽高。

<style>

img{

float:left;

}

h1{ 

    height:300px;

border:1px solid #000;

}

</style>

 

<body>

<div class="content">

<h1><img src="img.jpg" />加大父级元素高度。</h1>

</div>

</body>

 

 

解决方法2:采用设置浮动元素的父级元素。

<style>

img{

float:left;

}

h1{ 

    float:left;

border:1px solid #000;

}

</style>

 

<body>

<div class="content">

<h1 class="h1float"><img src="img.jpg" />采用设置浮动元素的父级元素</h1>

</div>

</body>

 

 

解决方法3:采用在浮动元素尾部增加设置了浮动的br元素。

<style>

img{

float:left;

}

h1{ 

border:1px solid #000;

}

br{

clear:both;

}

</style>

 

<body>

<div class="content">

<h1><img src="img.jpg" />采用增加设置浮动的br标签<br /></h1>

</div>

</body>

 

 

解决方法4:采用给父级元素加overflow

<style>

img{

float:left;

}

h1{ 

overflow:hidden;

border:1px solid #000;

}

</style>

 

<body>

<div class="content">

<h1 class="h1overflow"><img src="img.jpg" />采用给父级元素加overflow</h1>

</div>

</body>

 

 

解决方法5:加类名clear,采用after伪类统一处理。(比较推荐)

<style>

img{

float:left;

}

h1{ 

 

border:1px solid #000;

}

.clear:after{

content:"";

display:block;

clear:both;

}

</style>

 

<body>

<div class="content">

<h1 class="clear"><img src="img.jpg" />加类名clear,采用after伪类统一处理</h1>

</div>

</body>

 

 

解决方法6:采用dispay:inline-block;但是marginauto会失效。

<style>

img{

float:left;

}

h1{ 

display:inline-block;

border:1px solid #000;

}

</style>

 

<body>

</div>

<div class="content">

<h1 class="h1dispay"><img src="img.jpg" />采用dispay:inline-block;</h1>

</div>

</body>

 

以上是关于Float问题及其解决方法的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在这个 python 片段中得到 float 是不可迭代的? [复制]

解决方案电影标题中缺少代码的片段,完成挑战更多[关闭]

CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段

Vue报错:Uncaught TypeError: Cannot assign to read only property 'exports' of object 的解决方法(代码片段

片段 getActivity() 与接口回调?

全文搜索用于提取文本片段(返回预期文本及其周围)