首页 > 其他分享 >css浮动(float)详解

css浮动(float)详解

时间:2024-02-23 10:35:16浏览次数:27  
标签:float height width 1px 详解 background css left

https://blog.csdn.net/weixin_45123004/article/details/104463619

浮动详解

一、什么是浮动?
浮动,顾名思义,就是漂浮的意思。指的是一个元素脱离文档流,悬浮在父元素之上的现象。

二、如何产生浮动?
给元素本身添加float属性
float:

 

三、浮动有什么作用?
作用:

在html文档流中,分为行元素、块元素和行内块元素,行元素和行内块元素都是以横向排列的,而块元素则是以流的形式从上往下排列的,当我们想使块元素横向排列时,就用到了我们的浮动(float)。

注:文档流详解:https://www.cnblogs.com/Dongmy/p/18028732

     (常见行元素:a、span、i、em、strong、img)

      (常见行内块元素::input、button、label、select)

   (常见块元素:div标签、h1~h6标签、p标签、ul和ol标签、table、form、header、footer、article)

当给一个块级元素添加浮动时本来应该竖向排列的元素开始横向排列的,如下图所示

.box {border: 1px solid #666;height: 700px;width: 700px;color: #fff;}
.box1 {float: left; width: 100px; height: 100px; background: #000;}
.box2 {float: left; width: 100px; height: 100px; background: red; }
.box3 {width: 200px; float: left; height: 200px; background: yellow; }
.box4 {width: 300px; float: left; height: 300px; background: blue; }
.box5 {float: left; width: 300px; height: 400px; background: green;}

<div class="box">
        <div class="box1">  box1  </div>
        <div class="box2">  box2  </div>
        <div class="box3">  box3  </div>
        <div class="box4">  box4 </div>
        <div class="box5">  box5  </div>
    </div> 

  

四、浮动带来的问题
当给了一个元素浮动时元素脱离文档流,会产生一个致命问题:
父元素高度塌陷(以上面的为例子):

.box {border: 1px solid #666; width: 800px;color: #fff;}
.box1 {float: left; width: 100px; height: 100px; background: #000;}
.box2 {float: left; width: 100px; height: 100px; background: red; }
.box3 {width: 200px; float: left; height: 200px; background: yellow; }
.box4 {width: 300px; float: left; height: 300px; background: blue; }
.box5 {float: left; width: 300px; height: 400px; background: green;}
.on { width: 50px; height: 300px; background: pink; }

<div class="box">
        <div class="box1">  box1  </div>
        <div class="box2">  box2  </div>
        <div class="box3">  box3  </div>
        <div class="box4">  box4 </div>
        <div class="box5">  box5  </div>
</div>
<div class="on"> </div>

  当我不给父级元素box添加高度时box高度为0,并且box的兄弟元素会往上挤;而浮动元素将会把父级兄弟元素on覆盖:

五、如何解决(优缺点)?
(1) 父级div定义 height

<style type="text/css"> 
/*解决代码*/
.div1{background:#000080;border:1px solid red; height:200px;} 
.div2{background:#800080;border:1px solid red;height:100px;margin-top:10px} 
.left{float:left;width:20%;height:200px;background:#DDD} 
.right{float:right;width:30%;height:80px;background:#DDD} 
</style> 
<div class="div1"> 
<div class="left">Left</div> 
<div class="right">Right</div> 
</div> 
<div class="div2"> 
div2 
</div> 

  

原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。
优点:简单、代码少、容易掌握
缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题
建议:不推荐使用,只建议高度固定的布局时使用

(2) 结尾处加空div标签 clear:both;

<style type="text/css"> 
.div1{background:#000080;border:1px solid red} 
.div2{background:#800080;border:1px solid red;height:100px;margin-top:10px} 
.left{float:left;width:20%;height:200px;background:#DDD} 
.right{float:right;width:30%;height:80px;background:#DDD} 
/*清除浮动代码*/ 
.clearfloat{clear:both;height:0;overflow:hidden;} 
</style> 
<div class="div1"> 
<div class="left">Left</div> 
<div class="right">Right</div> 
<div class="clearfloat"></div> 
</div> 
<div class="div2"> 
div2 
</div> 

  

原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度
优点:简单、代码少、浏览器支持好、不容易出现怪问题
缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不好
建议:不推荐使用,但此方法是以前主要使用的一种清除浮动方法

(3) 父级div定义 伪对象:after 和 zoom

<style type="text/css"> 
.div1{background:#000080;border:1px solid red;} 
.div2{background:#800080;border:1px solid red;height:100px;margin-top:10px} 
.left{float:left;width:20%;height:200px;background:#DDD} 
.right{float:right;width:30%;height:80px;background:#DDD} 
/*清除浮动代码*/ 
.clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0;overflow:hidden;} 
.clearfloat{zoom:1} 
</style> 
<div class="div1 clearfloat"> 
<div class="left">Left</div> 
<div class="right">Right</div> 
</div> 
<div class="div2"> 
div2 
</div> 

  

原理:IE8以上和非IE浏览器才支持:after,原理和方法2有点类似,zoom(IE专有属性)可解决ie6,ie7浮动问题
优点:浏览器支持好、不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)
缺点:代码多、不少初学者不理解原理,要两句代码结合使用才能让主流浏览器都支持。
建议:推荐使用,建议定义公共类,以减少CSS代码。

(4) 父级div定义 overflow:hidden

<style type="text/css"> 
/*解决代码*/
.div1{background:#000080;border:1px solid red; width:98%;overflow:hidden} 
.div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;width:98%} 
.left{float:left;width:20%;height:200px;background:#DDD} 
.right{float:right;width:30%;height:80px;background:#DDD} 
</style> 
<div class="div1"> 
<div class="left">Left</div> 
<div class="right">Right</div> 
</div> 
<div class="div2"> 
div2 
</div> 

  

原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度
优点:简单、代码少、浏览器支持好
缺点:不能和position配合使用,因为超出的尺寸的会被隐藏。
建议:只推荐没有使用position或对overflow:hidden理解比较深的朋友使用。

(5) 父级div定义 overflow:auto

<style type="text/css"> 
/*解决代码*/
.div1{background:#000080;border:1px solid red; width:98%;overflow:auto} 
.div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;width:98%} 
.left{float:left;width:20%;height:200px;background:#DDD} 
.right{float:right;width:30%;height:80px;background:#DDD} 
</style> 
<div class="div1"> 
<div class="left">Left</div> 
<div class="right">Right</div> 
</div> 
<div class="div2"> 
div2 
</div> 

  

原理:必须定义width或zoom:1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度
优点:简单、代码少、浏览器支持好
缺点:内部宽高超过父级div时,会出现滚动条。
建议:不推荐使用,如果你需要出现滚动条或者确保你的代码不会出现滚动条就使用吧。

(6) 父级div 也一起浮动

<style type="text/css"> 
/*解决代码*/
.div1{background:#000080;border:1px solid red; width:98%;margin-bottom:10px;float:left} 
/*解决代码*/
.div2{background:#800080;border:1px solid red;height:100px;width:98%;clear:both} 
.left{float:left;width:20%;height:200px;background:#DDD} 
.right{float:right;width:30%;height:80px;background:#DDD} 
</style> 
<div class="div1"> 
<div class="left">Left</div> 
<div class="right">Right</div> 
</div> 
<div class="div2"> 
div2 
</div> 

  

原理:所有代码一起浮动,就变成了一个整体
优点:没有优点
缺点:会产生新的浮动问题。
建议:不推荐使用,只作了解。

(7) 父级div定义 display:table

<style type="text/css"> 
;/*解决代码*/
.div1{background:#000080;border:1px solid redwidth:98%;display:table;margin-bottom:10px;} 
.div2{background:#800080;border:1px solid red;height:100px;width:98%;} 
.left{float:left;width:20%;height:200px;background:#DDD} 
.right{float:right;width:30%;height:80px;background:#DDD} 
</style> 
<div class="div1"> 
<div class="left">Left</div> 
<div class="right">Right</div> 
</div> 
<div class="div2"> 
div2 
</div> 

  

原理:将div属性变成表格
优点:没有优点
缺点:会产生新的未知问题。
建议:不推荐使用,只作了解。

(8) 结尾处加 br标签 clear:both

style type="text/css"> 
.div1{background:#000080;border:1px solid red;margin-bottom:10px;zoom:1} 
.div2{background:#800080;border:1px solid red;height:100px} 
.left{float:left;width:20%;height:200px;background:#DDD} 
.right{float:right;width:30%;height:80px;background:#DDD} 
.clearfloat{clear:both} 
</style> 
<div class="div1"> 
<div class="left">Left</div> 
<div class="right">Right</div> 
<br class="clearfloat" /> 
</div> 
<div class="div2"> 
div2 
</div> 

  

原理: 父级div定义zoom:1来解决IE浮动问题,结尾处加 br标签 clear:both

建议:不推荐使用,只作了解。

 

标签:float,height,width,1px,详解,background,css,left
From: https://www.cnblogs.com/Dongmy/p/18028666

相关文章

  • 机器学习策略篇:详解为什么是ML策略?(Why ML Strategy?)
    为什么是ML策略?从一个启发性的例子开始讲,假设正在调试的猫分类器,经过一段时间的调整,系统达到了90%准确率,但对的应用程序来说还不够好。可能有很多想法去改善的系统,比如,可能想去收集更多的训练数据吧。或者会说,可能的训练集的多样性还不够,应该收集更多不同姿势的猫咪图片,或者更......
  • C++强制类型转换详解:四种操作符解析与实例演示
     概述:C++中的强制类型转换是实现数据类型间转换的关键机制,包括static_cast、dynamic_cast、const_cast和reinterpret_cast四种。这些操作符适用于不同的场景,通过实例源代码详细阐述了它们的使用方法和步骤。在C++中,强制类型转换是将一个数据类型的值转换为另一个数据类型的过......
  • 详解MQ消息队列及四大主流MQ的优缺点
    前言近期有了想跳槽的打算,所以自己想巩固一下自己的技术,想了解一些面试比较容易加分的项,近期准备深入研究一下Redis和MQ这两样,这总体上都是为了解决服务器并发的原因,刚翻到了一篇有关于MQ的,觉得写得特别好,特此记录一下,也算是为了加深自己的印象。面试题切入1、为什么要使用MQ......
  • Object— Object.defineProperty()(详解、原理、作用、使用场景、使用方式)
    一.Object.defineProperty()详解Object.defineProperty()是JavaScript中用于定义或修改对象的属性的方法,可以控制属性的特性(如可枚举性、可配置性、可写性等)。Object.defineProperty()方法的语法如下:Object.defineProperty(obj,prop,descriptor)obj:要在其上定义属性......
  • Java 构造函数与修饰符详解:初始化对象与控制权限
    Java构造函数Java构造函数是一种特殊的类方法,用于在创建对象时初始化对象的属性。它与类名相同,并且没有返回值类型。构造函数的作用:为对象的属性设置初始值执行必要的初始化操作提供创建对象的多种方式构造函数的类型:默认构造函数:无参数的构造函数,如果用户没有明......
  • CSS
    CSS(1)介绍在HTML中,标签(Tag)是用于定义文档结构和内容的元素,而CSS(CascadingStyleSheets,层叠样式表)则用于控制网页的样式和布局。CSS样式表中可以通过选择器(Selectors)来选择HTML中的标签,并为其应用样式。在HTML中,标签(Tag)是用于定义文档结构和内容的元素,而CSS(Cascadi......
  • CSS Border Bottom常用属性详解
    原文链接:https://www.python100.com/html/90865.html一、border-bottom的基本使用border-bottom:单位边框样式颜色;border-bottom是css中用来设置底部边框的属性。border-bottom的属性值包括三个,分别是:边框宽度(单位),边框样式(solid、dotted、dashed等)和边框颜色(十六进制......
  • 多线程系列(六) -等待和通知模型详解
    一、简介在之前的线程系列文章中,我们介绍了synchronized和volatile关键字,使用它能解决线程同步的问题,但是它们无法解决线程之间协调和通信的问题。举个简单的例子,比如线程A负责将int型变量i值累加操作到10000,然后通知线程B负责把结果打印出来。这个怎么实现呢?其中一个......
  • golang中的类型断言,解释.(float64)和.(string)
    在Go语言中,. 后跟括号中的类型名称(如 .(float64) 或 .(string))通常出现在类型断言(typeassertion)的上下文中。类型断言用于检查一个空接口(interface{})值是否包含特定的类型,如果是,则将其转换为该类型。类型断言的语法如下:value,ok:=x.(T)其中 x 是一个 interface{}......
  • shiro 整合 spring 实战及源码详解
    序言前面我们学习了如下内容:5分钟入门shiro安全框架实战笔记shiro整合spring实战及源码详解相信大家对于shiro已经有了最基本的认识,这一节我们一起来学习写如何将shiro与spring进行整合。spring整合maven依赖<dependencies><dependency><group......