CSS布局浮动和定位属性的区别?

html-css015

CSS布局浮动和定位属性的区别?,第1张

定位属性:position:这个属性定义建立元素布局所用的定位机制。任何元素都可以定位,不过绝对或固定元素会生成一个块级框,而不论该元素本身是什么类型。相对定位元素会相对于它在正常流中的默认位置偏

值 描述

absolute生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。

元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

fixed 生成绝对定位的元素,相对于浏览器窗口进行定位。

元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

relative 生成相对定位的元素,相对于其正常位置进行定位。

因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。

static 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。

inherit 规定应该从父元素继承 position 属性的值

==========================

浮动:float:

float 属性定义元素在哪个方向浮动。以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。

如果浮动非替换元素,则要指定一个明确的宽度;否则,它们会尽可能地窄。

注释:假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止。

值描述

left 元素向左浮动。

right 元素向右浮动。

none默认值。元素不浮动,并会显示在其在文本中出现的位置。

inherit 规定应该从父元素继承 float 属性的值。

====================

postion:relative是子块级元素面向父级元素的相对定位,定位关键字使用left/right/top/bottom。兄弟块元素之间相对进行定位,但是position移动后,原位置依然保留。而且随后的兄弟块元素定位基于被移走前的位置。

float:right/left是子块级元素流集合面向父级元素的定位,定位的关键词使用margin/padding。兄弟块元素之间进行相对的定位均基于移动后的新位置进行重新渲染,可以重叠,原位置被清空。

二者之中最大的差别就是位置保留。

再简而言之,float只是行内的 左右的改变,如果后面的元素不清楚浮动clear:both的话 会影响后面元素的位置,而positon定位的影响比较广,既能定义个容器的定位也能定义一个容器里的任意定位,而不是像float一样处于一个平面级的,它是可认识改变的。尤其是position:absolute;和fixed2个都是固定任意位置,一个不随页面滚动而改变原来位置,一个随页面滚动而改变但相对位置不改变。

CSS是前端基础技能之一,而CSS最重要的功能就是网站布局。

CSS布局方式有很多,从远古时代的table(表格)布局-->float(浮动)布局-->position(定位)布局-->flex(弹性)布局-->grid(网格)布局(还未正式推出),下面咱们简单谈一谈各种布局的用法及其优缺点。

table布局就是将网站当做一个表单来做,这里不做展开,因为现在基本不这么用了。

float:浮动。float刚开始并不是为了用来网页布局,而是用来解决图文信息中图片与文本冲突的问题的。

如下图:

这种常见的图文效果,没有float之前是很难达到的。有了float之后只需要加一个float:left,轻松搞定。

‘咦,如果float可以处理图文的问题,那用来布局不也可以吗?’,后来有人用float试着用于网页布局,还真的可以。

网页中最常见的布局如下:

用float做

比table布局要方便不少,不过float随之而来的带来了 “浮动高度塌陷”的问题:

如果浮动元素的父元素没有设定高度,当其子元素浮动后,父元素就因为内部没有子元素撑起从而高度变为0;

引申:网页元素一般分为 普通流,浮动流,定位流。其中普通流和浮动流在一个层级上,定位流>浮动流>普通流。

之后为了解决这个问题搞出来一系列清除“浮动高度塌陷”的策略方法,非常麻烦。

position:定位;顾名思义,就是确定位置。position同样可以用做网页布局。

同样的效果

不过position需要计算每一个元素的位置,而且这个位置是定死的,略显繁琐和笨重。实际上position我平常只用来定位一些小的标签之类的东西。position优点在于不像float那样会影响其他元素。

关键点:子绝父相。需要定位的元素用absolute绝对定位,其父元素用 relative相对定位。还有fixed固定定位,他是以html为父元素的定位。

flex:弹性;弹性布局很好的解决了float和position的问题,非常好用。

使用方法:

在父元素使用 display:flex确定弹性作用的范围。

然后

justify-content:center(space-around,space-between等);水平方向布局;

align-items:center(flex-start,flex-end等)垂直方向布局;

不过flex不兼容IE8及以下的浏览器。

大部分情况下flex布局已经能满足需要,不过flex只能用作一维布局,也就是说,flex一次只能作用于一条线。如果想要进行二维布局,必须翻转坐标二次弹性,这样会显得不够优雅,这时候grid(网格)布局就发展起来了。

grid布局用法和flex相似,但是作用于二维布局。

先在父元素使用 display:grid确定网格作用范围;

然后

grid-template-columns: 40px 50px auto 50px 40px(行)

grid-template-rows: 25% 100px auto(列)

等等属性,这里只简单介绍,大家了解有这个东西就行。

在现实工作用,以flex为主,position辅助已经足够应对所有问题。