#03你认真学了css?浮动+定位

自我总结:

浮动是实现布局的一种常见方式

浮动脱离普通文档流,即页面渲染时,盒模型按标准会将父元素所设置的属性将页面撑开;加入浮动后,父元素不会发现浮动元素,父元素则不会被浮动元素撑开页面)。 块级元素默认样式可以撑满父容器,加入浮动后,块级元素浮动则会收缩到内容本身的宽度。 加入浮动后,在父元素中看不见浮动元素,在行内元素看得见浮动,如文本或其他行内元素都会环绕浮动元素。

加入浮动后,浮动盒会向左或向右移动,直到其外边挨到包含块边沿或者另一个浮动盒的外边。 当同一个方向的浮动元素:当一个浮动元素在浮动过程中碰到同一个方向的浮动元素时,它会紧跟在它们后面; 当反方向的浮动元素:互不影响,位于同一条水平线上,当空间不够时会被挤下。 当浮动盒的宽度不一样时,紧跟后面的另一浮动盒则会出现卡住的现象。

加入浮动后,块级元素内容宽度会缩短,呈现inline-block``的特性,放不下会换行;行内元素则以块级元素特性呈现,可以设置widthheightmargin```。


一、浮动:

1、从实践尝试到理论定义

(1)例子1:

放不下会换行

一个浮动盒会向左或向右移动,直到其外边(outerEdge)挨到包含块边沿或者另一个浮动盒的外边。如果没有足够的水平空间来浮动,它会向下移动,直到空间合适或者不会再出现其它浮动了


image
image

(2)例子2:

被卡住

高度不一样,即出现一个卡住的问题

image
image

(3)例子3:

文本被缩短下移

注:
未设置样式的块级元素,即有默认样式,margin-top(or bottom);

因为浮动(盒)不在普通流内,在浮动盒之前或者之后创建的未定位的块盒会竖直排列,就像浮动不存在一样。接着,浮动(盒)创建的当前及后续行盒会进行必要的缩短,为了给浮动(盒)的margin box让出空间。

例子:

如一个普通元素(如p)遇到浮动元素之后,普通元素(如p)看不见这个浮动元素,但这个普通元素里的行盒(文字生成的行盒特性)能看到该浮动元素。当浮动盒宽度变化,文字行盒也会相应地被挤下去换行。


image
image

2、从理论到实现效果

(1)浮动元素脱离普通流?

A、普通流是什么?
页面渲染时,遵循“块级元素占据一行,行内元素一行水平排列占据它自身宽度,再来块级元素素依次向下排列”规律,并且这些元素从上到下,从左到右会将父元素所展示的页面撑开。

B、脱离普通流:
父元素计算宽高的时候,发现不了浮动元素。一旦有浮动元素,块级元素不会按照“从上到下,从左到右”的顺序去展示页面,块级元素会收缩内容宽度(呈现inline-block的特性),那么,父容器不会被里面的浮动元素撑开;
行内元素则会能看见浮动元素,如文本或其他行内元素则会环绕浮动元素。

例子:脱离普通流?!

块盒看不见浮动的 box1,但我是文本我能看见
块盒看不见浮动的 box1,但我是文本我能看见

(2)小结:

块级元素浮动,宽度会收缩(width:100%的用武之地);
行内元素浮动,以块级特性呈现(不用再写display: inline-block;

块级元素浮动宽度收缩,行内元素浮动以块级特性呈现

注:
块级元素默认样式可以撑满父容器,块级元素浮动则会收缩到内容的本身的宽度。

如:

.box{
    float: left;
    background: red;
  }

注:行内元素能发现浮动元素,如设置float或者position元素属性,便有了块级元素的特性,可以设置宽高。

span{
    float: left;
    background: blue;
    width: 100px;
    height: 50px;
    margin: 10px;
  };

(3)注:
脱离普通流?!VS abosolute

3、浮动的使用场景

(1)两栏布局

特指一侧是固定宽度,另一侧是自适应(用margin间隔来表示自适应的作用,是因为普通的块级元素会充满整个页面)

左侧固定宽度,右侧自适应 (反之,也可以)

(2)三栏布局

指两侧宽度固定,中间内容区块自适应

简单的三栏布局

注:
注意html结构顺序,即按照class为menu——aside——main的div元素顺序写法

当一个浮动盒按照设置实现左浮动时,另一个浮动元素设置为右浮,此时这个右浮,即相对于同级元素的高度进行右浮(除非页面放不下被挤下移除外)。

(3)导航条

list-style:none;
float:left(or right);
margin-left:XXpx;

4、清除浮动

(1)为什么要清除浮动?

虽然浮动是一种实现布局的方式,但是浮动在父元素中看不见。一旦在元素标签内加入了浮动,浮动脱离了普通流,在页面渲染时并不会按照html结构的计算规则,浮动元素会导致父元素所设置的页面无法撑开,浮动甚至会让浮动的效果叠放在页面某些元素效果上。所以必要时,需要清除浮动,这也是浮动实现布局的重要一环。

从浮动具有副作用说起:

问题A:对后续元素位置产生影响

问题B:父容器告诉计算出现问题

(2)clear:left?

例子:
clear:left?

  • clear:left;:要求该盒的top

border边位于源文档中在此之前的元素形成的所有左浮动盒的bottom外边下方

  • clear: right;:要求该盒的top

border边位于源文档中在此之前的元素形成的所有右浮动盒的bottom外边下方

即:box2设置clear:right有效吗?有

image
image

image
image

(3)清除浮动的两大副作用

对应问题B:

父容器告诉计算出现问题

image
image

【重点】

由于浮动在父容器中不能被发现,但要解决父容器(或页面)撑开的问题,我们必须在浮动和父容器(或者浮动元素)共存时寻找到一种解决方法。
即在带有浮动属性的父元素标签中添加class为clearfix,关于伪元素属性::after (或::before)的固定代码样式,
伪元素清除浮动法(IE8以上使用):

.clearfix::after {
  content:'';
  display: block;
  clear: both;
}
/*或触发ie6的属性*/
.clearfix {
  *zoom:1;
}

设置一个普通元素内不具有浮动的属性参数,即float:none;clear: left; 即可将完成clear:left;的效果【注意:应注重css元素的权重,以免报错】

【解决】

方法1:

父容器与浮动共存问题的解决

方法2:

#1采用伪元素(一个替代标签)解决行内浮动问题

#2采用伪元素(一个替代标签)解决块级浮动问题

(4)总结

实现一个水平布局

方法1:设置display:inline-block;,注意缝隙和上对其的问题

方法2:加入浮动,用clearfix的固定代码包裹解决父元素撑开页面的问题


二、定位

1、什么是定位?

(1)先了解正常/文档流(Normal Flow)是什么

Normal Flow即浏览器默认的文档布局方式。一旦添加了浮动和定位,脱离文档流之后,页面布局的规则发生变化。

(2)定位
通过设置position属性来覆盖默认的布局样式。即元素添加position和对应的属性值,它则会脱离了文档流。
position,让一个元素的位置在以前的基础上产生变动。(考虑:相对于谁和属性值)

2、定位的类型

(1)静态定位

position: static; :默认值 默认的布局方式。

(2)相对定位:相对于自身的位置

position: relative; :相对默认的布局位置进行定位。

相对定位偏移前
相对定位偏移前

相对定位偏移后1
相对定位偏移后1

相对定位偏移后2
相对定位偏移后2

注:
lefttop只对position:absolution/relative/fixed;生效

所谓的相对定位,是针对移动的元素自身,相对于它本身原先位置做了对应位置的偏移。但它所占用的文档流位置大小是没有变的。

(3)绝对定位:相对于父元素位置
position: absolute; 绝对定位元素脱离正常文档流,相对其定位上下文(Positioning Context)进行定位。 即页面上的正常元素看不见该绝对定位元素。但页面上绝对定位常覆盖其他元素。多个绝对定位元素存在页面,它们之间的绝对定位也相互看不见,产生重叠现象。

寻找页面中一个元素绝对位置,可以先设置该元素绝对定位:position: absolute;

image
image

然后先从它的父元素中进行相对定位:position: relative; 中确定该元素的绝对定位;

image
image

如果没有此绝对定位,再从它的父元素的父元素(如body)里的位置找;如果没有,则根据html的根节点作为参考。

总结:
使用绝对定位时,设置好参考点,一般,绝对定位的参考点为元素父容器
如一个元素设置了position:absolute;,那么它的父容器则设置position:relative;

注:
元素中使用了position:absolute;,就像浮动一样有了一些特性:

A、加入绝对定位后,宽度收缩


image
image

B、加入绝对定位后,行内元素呈现快接的特性,可以添加宽高


image
image

(4)z-index
由于使用绝对定位之后,产生元素覆盖的问题,z-index可以解决元素之间覆盖顺序的问题,,设置它的层叠顺序。如:

image
image

(5)固定定位

position: fixed; 相对浏览器窗口进行定位。
如“回到顶部”、“内容变固定窗口不变”等效果。因此当滚动产生时,固定定位元素依然处于窗口的某个固定位置。

.feedback {
  right: 30px;
  bottom: 30px;
  position: fixed;
}

(6)粘性定位(兼容性差)

position: sticky;是相对定位和固定定位的结合。
默认情况下表现为相对定位,当浏览器窗口顶端与元素的距离等于 top 属性的值时,转变为固定定位。

如:


image
image

三、浮动和定位——解决的一些问题

1、BFC和浮动

2、浮动和负边距

两个浮动元素,如果因放不下导致其中一个下移,对下移的元素设置负 margin 值大于自身的宽度可将其上移
如:

image
image

image
image

3、用inline-block;还是浮动

(1)inline-block;

  • 优势: 不需要清除浮动,简单,在设置居中时更方便,适合子内容不多的元素水平排列
  • 劣势: 需要注意缝隙,注意对齐,ie8以下不能用
    (2)float
  • 优势: 兼容性好,没缝隙问题
  • 劣势: 需要清除浮动,适合稍大的布局

4、用定位还是浮动?

大布局、自适应用浮动;小元素、固定宽高用定位。具体要结合实际情况是关键。

如:


image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,727评论 1 92
  • 1. 前言 前端圈有个“梗”:在面试时,问个css的position属性能刷掉一半人,其中不乏工作四五年的同学。在...
    YjWorld阅读 4,422评论 5 15
  • 学会使用CSS选择器熟记CSS样式和外观属性熟练掌握CSS各种选择器熟练掌握CSS各种选择器熟练掌握CSS三种显示...
    七彩小鹿阅读 6,304评论 2 66
  • CSS 是什么 css(Cascading Style Sheets),层叠样式表,选择器{属性:值;属性:值}h...
    崔敏嫣阅读 1,469评论 0 5
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,421评论 1 45