6.CSS中的浮动

1.浮动(float)
1.传统网页布局的三种方式
网页布局的本质–用CSS来摆放盒子。把盒子摆放到相应位置
CSS提供了三种传统布局方式(简单说,就是盒子如何进行排列布局):
* 普通流(标准流)
* 浮动
* 定位

2.标准流(普通流/文档流)
所谓的标准流:就是标签按照规定好默认方式排列。
*1*块级元素会独占一行,从上向下顺序排列。
* 常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table
*2*行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘自动换行。
* 常用元素:span、a、i、em等
以上都是标准流,我们前面学习的就是标准流,标准流是最基本的布局方式。

这三种布局方式都是用来摆放盒子的,盒子拜访到合适位置,布局自然就完成了。

注意,实际开发中,一个页面基本都包括了这三种布局方式(后面移动端学习新的布局方式)。

3.为什么需要浮动?
*1*如何让多个盒子摆放到一行。
比较难,虽然转换为行内块元素可以实现一行显示,但是他们之间会有较大的缝隙,很难控制。
*2*如何实现两个盒子的左右对齐?
很难
总结:有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。因为浮动可以改变元素标
签默认的排列方式。
浮动最典型的应用:可以让多个块级元素一行内排列显示。
网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。

4.什么是浮动?
float属性用于创建浮动框,将其移动到一边,知道左边缘或右边缘触及包含块或另一个浮动框的边缘。
语法:
选择器 { float: 属性值;}
属性值                  概述
none                    元素不浮动(默认值)
left                    元素向左浮动
right                   元素向右浮动

5.浮动特性 *重难点*
加了浮动之后的元素,会具有很多特性,需要我们掌握的。
*1*浮动元素会脱离标准流(脱标)
设置了浮动(float)的元素最重要特性:
* 脱离标准普通流的控制(浮)移动到指定位置(动),(俗称脱标)
* 浮动的盒子不再保留原先的位置
*2*浮动的元素会一行内显示并且元素顶部对齐
如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列。
在一行显示,三个div都要设置浮动属性
注意:浮动的元素是相互贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子,多出的盒子
会另起一行对齐。
*3*浮动的元素会具有行内块元素的特性
任何元素都可以浮动。不管原先是什么模式的元素,添加浮动之后具有行内块元素相似的特性。
* 如果块级元素没有设置宽度,默认宽度和父极一样宽,但是添加浮动后,它的大小根据内容来决定。
* 浮动的盒子中间是没有缝隙的,是紧挨一起的
* 行内元素同理

6.浮动元素经常和标准流父级搭配使用
为了约束浮动元素位置,我们网页布局一般采取的策略是:
网页布局第一准则:先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置。
标准父盒子:{三个浮动子盒子}
网页布局第二准则:先设置盒子大小,之后设置盒子的位置

2.常见的网页布局
1.常见网页布局
top top
banner banner
main left right
footer footer

                top
				banner
				footer
				
2.浮动布局注意点
* 浮动和标准流的父盒子搭配。
先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置
* 一个元素浮动了,理论上其余的兄弟元素也要浮动。
一个盒子里面有多个子盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动,以防止引起问题。
浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面盒子的标准流。

3.清除浮动
1.为什么要清除浮动?
由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为0时,就会
影响下面的标准流盒子。
* 由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排盘产生影响。

2.清除浮动本质
* 清除浮动就是清除浮动元素造成的影响
* 如果父盒子本身有高度,则不需要清除浮动
* 清除浮动之后,父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了。

3.清除浮动
语法:
选择器 {clear: 属性值;} 
属性值                        描述
left                          不允许左侧有浮动元素(清除左侧浮动的影响)
right                         不允许右侧有浮动元素(清除右侧浮动的影响)
both                          同时清除左右两侧浮动的影响
实际开发中:几乎只用clear: both;
清除浮动的策略是:闭合浮动;
*1*额外标签法也称为隔墙法,是W3C推荐的做法。
额外标签法会在浮动元素末尾添加一个空的标签。例如
,或者其他标签 (如
等)。 * 优点:通俗易懂,书写方便 * 缺点:添加许多无意义的标签,结构化较差。 注意:要求这个新的空标签必须是块级元素。 总结: * 清除浮动的本质是清除浮动元素脱离标准流造成的影响 * 闭合浮动,只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子。 * 隔墙法,就是在最后一个浮动的子元素后面添加一个额外标签,添加 清除浮动样式。 *2*父级添加overflow属性 可以给父级添加overflow属性,将其属性值设置为hidden、auto或scroll。 子不教,父之过,注意是给父元素添加代码 * 优点:代码简结 * 缺点:无法显示溢出的部分 *3*父级添加after伪元素 after方式是额外标签法的升级版。也是给父元素添加 语法: .clearfix:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; } .clearfix { /*IE6、7专有 */ *zoom: 1; } * 优点:没有增加标签,结构更简单 * 缺点:照顾低版本浏览器 * 代表网站:百度、淘宝网、网页等 *4*父级添加双伪元素 也是给父元素添加 .clearfix:before,.clearfix:after { content: ""; display: table; } .clearfix:after { clear:both; } .clearfix { *zoom: 1; } * 优点:代码更简结 * 缺点:照顾低版本浏览器 * 代表网站:小米、腾讯等 4.清除浮动总结 为什么需要清除浮动? * 父级没高度 * 子盒子浮动了 * 影响下面布局了,我们就应该清除浮动了 清除浮动的方式 优点 缺点 额外标签法(隔墙法) 通俗易懂,书写方便 添加许多无意义的标签,结构化较差。 父级overflow: hidden; 书写方便 溢出隐藏 父级after伪元素 结构语义化正确 由于IE6、7不支持: after,兼容性问题 父级双伪元素 结构语义化正确 由于IE6、7不支持: after,兼容性问题

4.PS切图
PS有很多的切图方式:图层切图、切片切图、PS插件切图等。
1.常见的图片格式
* jpg图像格式:JPEG(JPG)对色彩的信息保留较好,高清,颜色较多,我们产品类的图片经常用jpg格
式的
* gif图像格式:GIF格式最多只能储存256色,所以通常用来显示简单图形及字体,但是可以保存透明背
景和动画效果,实际经常用于一些图片小动画效果。
* png图像格式是一种新兴的网络图形格式,结合GIF和JPEG的优点,具有存储形式丰富的特点,能够保
持透明背景,如果想要切成背景透明的图片,请选择png格式。
* PSD图像格式PSD格式是Photoshop的专用格式,里面可以存放图层、通道、遮罩等多种设计稿,对我们
前端人员来说,最大的优点,我们可以直接从上面复制文字,获得图片,还可以测量大小和距离。

2.图层切图 
最简单的切图方式:右击图层->快速导出为PNG。
但是很多情况下,我们需要合并图层再导出:
*1.选中需要的图层:图层菜单->合并图层(ctrl+e)
*2.右击->快速导出为PNG。
最好的方法:沟通。

3.切片切图 
*1*利用切片选中图片
* 利用切片工具手动划出
*2*导出选中的图片
文件菜单->导出->存储为web设备所用格式->选择我们要的图片格式->存储。
PS插件切图
Cutterman是一款运行在Photoshop中的插件,能够自动将你需要的图层进行输出,以替代传统的手工
“导出web所用格式”以及使用切片工具进行挨个切图的繁琐流程。

5.学成在线案例
* 典型的企业级网站
* 目的是为了整体感知企业级网站布局流程,复习以前知识

1.准备素材和工具
* 学成在线PSD源文件。
* 开发工具 = PS(切图)/cutterman插件+vscode(代码)+chrome(测试)。

2.案例准备工作
采取结构与样式分离思想:
*1*创建study目录文件夹(用于存放我们这个页面的相关布局)。
*2*用vscode打开这个目录文件夹
*3*study目录内新建images文件夹,用于保存图片。
*4*新建首页文件index.html(以后网站首页统一规定为index.html)。
*5*新建study.css样式文件。我们本次采取外链样式表。
*6*将样式引入到我们HTML页面文件中。
*7*样式表写入清除内外边距的样式,来检测样式表是否引入成功。

3.CSS属性书写顺序 *重点*
建议遵循以下顺序:
1.布局定位属性:display/position/float/clear/visibility/overflow(建议display第一个写,毕竟关系到模式)
2.自身属性:width/height/margin/padding/border/background
3.文本属性:color/font/text-decoration/text-align/vertical-align/white-space/break-word
4.其他属性(CSS3):content/cursor/border-radius/box-shadow/text-shadow/background:linear-gradient...
.jdc {
    display: block;
	position: relative;
	float: left;
	width: 100px;
	height: 100px;
	margin: 0 10px;
	padding: 20px 0;
	font-family:Arial, 'Helvetica Neue', Helvetica, sans-serif;
	color: #333;
	background: rgba(0,0,0,.5);
	border-radius: 10px;
}

4.页面布局整体思路
为了提高网页制作的效率,布局时通常有以下的整体思路:
1.必须确定页面的版心(可视区),我们测量可得知。
2.分析页面中的行模块,以及每个行模块中的列模块。其实页面布局第一准则
3.一行中的列模块经常浮动布局,先确定每个列的大小,之后确定列的位置,页面布局第二准则
4.制作HTML结构。我们还是遵循,先有结构,后有样式的原则。结构永远最重要。
5.所以,先理清楚布局结构,再写代码尤为重要。这需要我们多写多积累。

5.确定版心
这个页面的版心是1200像素,每个版心都要水平居中对齐,可以定义版心为公共类:
.w {
    width: 1200px;
	margin: auto;
}

6.头部制作
* 1号是版心盒子header1200*42的盒子水平居中对齐,上下给一个margin值就可以
* 版心盒子里面包含2号盒子logo
* 版心盒子里面包含3号盒子nav导航栏
导航栏注意点:
实际开发中,我们不会直接用链接a而是用li包含链接(li+a)的做法。
1.li+a语义更清晰,一看这就是有条理的列表型内容。
2.如果直接用a,搜索引擎容易辨别为有堆砌关键字嫌疑(故意堆砌关键字容易被搜索引擎有降权的风险),
  从而影响网站排名
注意: 
1.让导航栏一行显示,给li加浮动,因为li是块级元素,需要一行显示
2.这个nav导航栏可以不给宽度,将来可以继续添加其余文字
3.因为导航栏里面文字不一样多,所以最好给链接a左右padding撑开盒子,而不是指定宽度
* 版心盒子里面包含4号盒子search搜索栏
一个search大盒子里面包含2个表单
左为 input文本框  右为 button按钮
* 版心盒子里面包含5号盒子user个人信息
* 注意:要求里面的4个盒子必须都是浮动

7.banner制作
* 1号盒子是通栏的大盒子banner,不给宽度,给高度,给一个蓝色背景
* 2号盒子是版心,要水平居中对齐
* 3号盒子版心内,左对齐subnav侧导航栏
* 4号盒子版心内,右对齐course课程

8.精品推荐小模块
* 大盒子水平居中goods精品,注意此处有个盒子阴影
* 1号盒子是标题h3左侧浮动
* 2号盒子里面放链接左侧浮动,goods-item距离可以控制链接的左右外边距(注意行内元素只给左右内外边距)
* 3号盒子右浮动mod修改

9.精品推荐大模块
* 1号盒子为最大的盒子,box版心水平居中对齐
* 2号盒子为上面部分,box-hd -- 里面左侧标题H3左浮动,右侧链接a右浮动
* 3号盒子为底下部分,box-bd -- 里面是无序列表,有10个小li组成
* 小li外边距的问题,这里有个小技巧:给box-hd宽度为1215就可以一行开5个li

10.底部模块
* 1号盒子是通栏大盒子,底部footer给高度,底色是白色
* 2号盒子版心水平居中
* 3号盒子版权copyright左对齐
* 4号盒子链接组links右对齐

你可能感兴趣的:(css)