目录
目标
为什么需要浮动
浮动的排列特性
3种常见布局
为什么需要清除浮动
ps切图
学成在线页面布局
网页布局的本质➡用 CSS 来摆放盒子。 把盒子摆放到相应位置
CSS 提供了三种传统布局方式:
所谓的标准流,就是标签按照规定好默认方式排列
1.块级元素会独占一行,从上向下顺序排列。
常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table
2.行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。
常用元素:span、a、i、em 等
以上都是标准流布局,我们前面学习的就是标准流,标准流是最基
本的布局方式。
这三种布局方式都是用来摆放盒子的,盒子摆放到合适位置,布局
自然就完成了。
注意:实际开发中,一个页面基本都包含了这三种布局方式(后面
移动端学习新的布局方式)。

比较难,虽然转换为行内块元素可以实现一行显示,但是他们之间会有大的空白缝隙,很难控制。

总结: 有很多的布局效果,标准流没有办法完成,此时就可以利用
浮动完成布局。 因为浮动可以改变元素标签默认的排列方式.
浮动最典型的应用:可以让多个块级元素一行内排列显示。
网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动
float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘- 选择器 {
- float: 属性值;
- }

设置了浮动(float)的元素的最重要的特性:

2.如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列

3.浮动元素会具有行内块元素特性
任何元素都可以浮动。不管原先是什么模式的元素,添加浮动之后都具有行内块元素相似的特性。
如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定
如果行内元素有了浮动,则不需要转换块级\行内块元素就可以直接给高度和宽度
浮动的盒子中间是没有缝隙的,是紧挨着一起的
为了约束浮动元素位置, 我们网页布局一般采取的策略是:
先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置
案例1

- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <style>
- .box {
- width: 1200px;
- height: 460px;
- background-color: pink;
- margin: 0 auto;
- }
-
- .left {
- float: left;
- width: 230px;
- height: 460px;
- background-color: purple;
- }
-
- .right {
- float: left;
- width: 970px;
- height: 460px;
- background-color: skyblue;
- }
- </style>
- </head>
-
- <body>
- <div class="box">
- <div class="left">左侧</div>
- <div class="right">右侧</div>
- </div>
- </body>
-
- </html>
案例2


- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <style>
- * {
- margin: 0;
- padding: 0;
- }
-
- li {
- list-style: none;
- }
-
- .box {
-
- width: 2450px;/*1226*/
- height: 560px;/*285*/
- background-color: pink;
- margin: 0 auto;
- }
-
- .box li {
- width: 590px; /*296*/
- height: 560px;/*285*/
- margin-right: 30px;
- background-color: purple;
- float: left;
- }
-
- .box .last {
- margin-right: 0;
- }
- </style>
- </head>
-
- <body>
- <ul class="box">
- <li>1</li>
- <li>2</li>
- <li>3</li>
- <li class="last">4</li>
- </ul>
- </body>
-
- </html>
案例3


right每个盒子margin-left设置
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <style>
- .box {
- width: 1226px;
- height: 615px;
- background-color: pink;
- margin: 0 auto;
- }
-
- .left {
- width: 234px;
- height: 615px;
- background-color: purple;
- float: left;
- }
-
- .right {
- width: 992px;
- height: 615px;
- background-color: skyblue;
- float: left;
- }
-
- .right>div {
- width: 234px;
- height: 300px;
- background-color: pink;
- float: left;
- margin-left: 14px;
- margin-bottom: 14px;
- }
- </style>
- </head>
-
- <body>
- <div class="box">
- <div class="left"></div>
- <div class="right">
- <div>1</div>
- <div>2</div>
- <div>3</div>
- <div>4</div>
- <div>5</div>
- <div>6</div>
- <div>7</div>
- <div>8</div>
- </div>
- </div>
- </body>
-
- </html>

只要是通栏的盒子(和浏览器一样宽)不需要指定宽度
盒子和盒子之间距离用margin
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <style>
- * {
- margin: 0;
- padding: 0;
- }
-
- li {
- list-style: none;
- }
-
- .top {
- height: 50px;
- background-color: gray;
- /*宽度和浏览器一样高,可以不写,默认和浏览器一样高*/
- }
-
- .banner {
- width: 980px;
- height: 150px;
- margin: 10px auto;
- background-color: gray;
- }
-
- .box {
- width: 980px;
- height: 300px;
- margin: 0 auto;
- background-color: pink;
- }
-
- .box li {
- width: 237px;
- height: 300px;
- float: left;
- background-color: gray;
- margin-right: 10px;
-
- }
-
- .box .last {
- margin-right: 0;
- }
-
- /*只要是通栏的盒子(和浏览器一样宽)不需要指定宽度*/
- .footer {
- height: 200px;
- background-color: gray;
- margin-top: 10px;
- /*盒子和盒子之间距离用margin*/
- }
- </style>
- </head>
-
- <body>
- <div class="top">top</div>
- <div class="banner">banner</div>
- <div class="box">
- <ul>
- <li>1</li>
- <li>2</li>
- <li>3</li>
- <li class="last">4</li>
- </ul>
- </div>
- <div class="footer">footer</div>
- </body>
-
- </html>

若2浮,则

若13浮,2 标准


我们前面浮动元素有一个标准流的父元素, 他们有一个共同的特点,
都是有高度的.但是, 所有的父盒子都必须有高度吗?
理想中的状态, 让子盒子撑开父亲. 有多少孩子,我父盒子就有多高.
但是不给父盒子高度会有问题吗?..…

- 选择器 {
- clear: 属性值;
- }

clear:both额外标签法也称为隔墙法,是W3C推荐的做法
父级添加 overflow 属性
父级添加 after 伪元素
父级添加双伪元素
(1)额外标签法
额外标签法会在浮动元素末尾添加一个空的标签,例如:
例如,或者其他标签(如等)
注意:要求这个新的空标签必须是块级元素
优点:通俗易懂,书写方便
缺点:添加许多无意义的标签,结构化较差
实际工作可能会遇到,但是不常用
(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;
- }
<div class="box clearfix"></div>
(4)双伪元素
- .clearfix:before,.clearfix:after{
- content:"";
- display:table;
- }
- .clearfix:after {
- clear:both;
- }
- .clearfix {
- *zoom:1;
- }
父元素调用
为什么清除浮动
①:父级没高度
②:子盒子浮动了
③:影响下面布局了,我们就应该清除浮动了。


ps切图有很多切图方式:图层切图、切片切图、PS插件切图
最简单的切图方式:右击图层 ➡导出 PNG 切片。
但是很多情况,需要合并图层再导出
1.选择需要的图层,图层菜单->合并图层
2.导出为png
(1)点击psd图片,找到对应的图层

(2)如何图层保存为图片
参考:https://www.taoxuemei.com/chuli/ps/355.html
①隐藏其他图层再保存

②点击图层,右键转换为智能对象。之后双击图层名称,会打开该图层,即可保存





选择切片选择工具,可以挪动切片,del删除切片
Cutterman 是一款运行在 Photoshop 中的插件,能够自动将你需要的图层进行输出,以替代传统的手工 “导出 web 所用格式” 以及使用切片工具进行挨个切图的繁琐流程。
官网:https://www.cutterman.cn/zh/cutterman
注意:Cutterman 插件要求你的 PS 必须是完整版,不能是绿色版,所以大家需要安装完整版本
cutterman下载之后是pkg,双击使用默认安装器安装

导航栏开发注意
实际开发中,不会直接用链接a而是用li 包含链接(li+a)的做法
📢让导航栏一行显示,给li加浮动,因为li是块级元素,需要一行显示
📢这个nav导航栏可以不给宽邸,将来可以继续添加其余文字
📢因为导航栏里面文字不一样多,所以最好给链接a左右padding,而不是指定宽度
(4)核心内容区域
1.新技能:ctrl+g可搜索到达某行
2.ul里面多个li块,加了右边距,父亲不够宽最后的盒子会掉下来
把li的父亲ul 修改的足够宽 一行可以装下5个盒子就不会换行了 245*5
index.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <link rel="stylesheet" href="style.css">
- </head>
- <body>
- <!-- 头部开始 -->
- <div class="header w">
- <!-- logo部分 -->
- <div class="logo">
- <img src="images/logo.png" alt="">
- </div>
- <!-- 导航栏 -->
- <div class="nav">
- <ul>
- <li><a href="#">首页</a></li>
- <li><a href="#">课程</a></li>
- <li><a href="#">职业规划</a></li>
- </ul>
- </div>
- <!-- 搜索模块 -->
- <div class="search">
- <input type="text" value="输入关键词">
- <button></button>
- </div>
- <!-- 用户模块 -->
- <div class="user">
- <img src="images/user.png" alt="">qq-lilei
- </div>
- </div>
- <!-- 头部结束 -->
- <!-- ban'nner开始 -->
-