• 【CSS】笔记4-浮动


    目录

    一、浮动

    1.传统网页三种布局

    (1)标准流

    (2).浮动

    (3)什么是浮动 

    ​编辑

    (4)浮动的特性

    (5)浮动元素经常和标准流父级搭配使用

    二、常见网页布局

    三、清除浮动

    1.为什么要清除浮动?

    2.清除浮动的本质

    3.清除浮动的方法

    4.浮动总结

    四、PS切图

    1.常见的图像格式 

    2.图层切图

     3.切片切图

    4.Cutterman

    五、学成在线案例

    1.css属性书写顺序

     2.页面布局整体思路

    3.案例

    (1)头部


    目标

    为什么需要浮动

    浮动的排列特性

    3种常见布局

    为什么需要清除浮动

    ps切图

    学成在线页面布局

    一、浮动

    1.传统网页三种布局

    网页布局的本质➡用 CSS 来摆放盒子。 把盒子摆放到相应位置

    CSS 提供了三种传统布局方式:

    • 普通流(标准流)
    • 浮动
    • 定位

    (1)标准流

    所谓的标准流,就是标签按照规定好默认方式排列

    1.块级元素会独占一行,从上向下顺序排列。

    常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table

    2.行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。
    常用元素:span、a、i、em 等

    以上都是标准流布局,我们前面学习的就是标准流,标准流是最基

    本的布局方式。

    这三种布局方式都是用来摆放盒子的,盒子摆放到合适位置,布局

    自然就完成了。

    注意:实际开发中,一个页面基本都包含了这三种布局方式(后面

    移动端学习新的布局方式)。

    (2).浮动

    1. 提问:如何让多个块级盒子(div)水平排列成一行?

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

    1. 提问:如何实现两个盒子的左右对齐?

    总结: 有很多的布局效果,标准流没有办法完成,此时就可以利用

    浮动完成布局。 因为浮动可以改变元素标签默认的排列方式.

    • 浮动最典型的应用:可以让多个块级元素一行内排列显示。

    • 网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动

    (3)什么是浮动 

    • float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘
    1. 选择器 {
    2. float: 属性值;
    3. }

    (4)浮动的特性

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

    1. 脱标:浮动元素会脱离标准流
    • 浮动的盒子不再保留原先的位置

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

     

    3.浮动元素会具有行内块元素特性
    任何元素都可以浮动。不管原先是什么模式的元素,添加浮动之后都具有行内块元素相似的特性。

    如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定
    如果行内元素有了浮动,则不需要转换块级\行内块元素就可以直接给高度和宽度
    浮动的盒子中间是没有缝隙的,是紧挨着一起的


    (5)浮动元素经常和标准流父级搭配使用

    为了约束浮动元素位置, 我们网页布局一般采取的策略是:

    先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置

    案例1

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. <style>
    9. .box {
    10. width: 1200px;
    11. height: 460px;
    12. background-color: pink;
    13. margin: 0 auto;
    14. }
    15. .left {
    16. float: left;
    17. width: 230px;
    18. height: 460px;
    19. background-color: purple;
    20. }
    21. .right {
    22. float: left;
    23. width: 970px;
    24. height: 460px;
    25. background-color: skyblue;
    26. }
    27. </style>
    28. </head>
    29. <body>
    30. <div class="box">
    31. <div class="left">左侧</div>
    32. <div class="right">右侧</div>
    33. </div>
    34. </body>
    35. </html>

    案例2

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. <style>
    9. * {
    10. margin: 0;
    11. padding: 0;
    12. }
    13. li {
    14. list-style: none;
    15. }
    16. .box {
    17. width: 2450px;/*1226*/
    18. height: 560px;/*285*/
    19. background-color: pink;
    20. margin: 0 auto;
    21. }
    22. .box li {
    23. width: 590px; /*296*/
    24. height: 560px;/*285*/
    25. margin-right: 30px;
    26. background-color: purple;
    27. float: left;
    28. }
    29. .box .last {
    30. margin-right: 0;
    31. }
    32. </style>
    33. </head>
    34. <body>
    35. <ul class="box">
    36. <li>1</li>
    37. <li>2</li>
    38. <li>3</li>
    39. <li class="last">4</li>
    40. </ul>
    41. </body>
    42. </html>

     案例3

    right每个盒子margin-left设置

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. <style>
    9. .box {
    10. width: 1226px;
    11. height: 615px;
    12. background-color: pink;
    13. margin: 0 auto;
    14. }
    15. .left {
    16. width: 234px;
    17. height: 615px;
    18. background-color: purple;
    19. float: left;
    20. }
    21. .right {
    22. width: 992px;
    23. height: 615px;
    24. background-color: skyblue;
    25. float: left;
    26. }
    27. .right>div {
    28. width: 234px;
    29. height: 300px;
    30. background-color: pink;
    31. float: left;
    32. margin-left: 14px;
    33. margin-bottom: 14px;
    34. }
    35. </style>
    36. </head>
    37. <body>
    38. <div class="box">
    39. <div class="left"></div>
    40. <div class="right">
    41. <div>1</div>
    42. <div>2</div>
    43. <div>3</div>
    44. <div>4</div>
    45. <div>5</div>
    46. <div>6</div>
    47. <div>7</div>
    48. <div>8</div>
    49. </div>
    50. </div>
    51. </body>
    52. </html>

    二、常见网页布局

    只要是通栏的盒子(和浏览器一样宽)不需要指定宽度

     盒子和盒子之间距离用margin

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. <style>
    9. * {
    10. margin: 0;
    11. padding: 0;
    12. }
    13. li {
    14. list-style: none;
    15. }
    16. .top {
    17. height: 50px;
    18. background-color: gray;
    19. /*宽度和浏览器一样高,可以不写,默认和浏览器一样高*/
    20. }
    21. .banner {
    22. width: 980px;
    23. height: 150px;
    24. margin: 10px auto;
    25. background-color: gray;
    26. }
    27. .box {
    28. width: 980px;
    29. height: 300px;
    30. margin: 0 auto;
    31. background-color: pink;
    32. }
    33. .box li {
    34. width: 237px;
    35. height: 300px;
    36. float: left;
    37. background-color: gray;
    38. margin-right: 10px;
    39. }
    40. .box .last {
    41. margin-right: 0;
    42. }
    43. /*只要是通栏的盒子(和浏览器一样宽)不需要指定宽度*/
    44. .footer {
    45. height: 200px;
    46. background-color: gray;
    47. margin-top: 10px;
    48. /*盒子和盒子之间距离用margin*/
    49. }
    50. </style>
    51. </head>
    52. <body>
    53. <div class="top">top</div>
    54. <div class="banner">banner</div>
    55. <div class="box">
    56. <ul>
    57. <li>1</li>
    58. <li>2</li>
    59. <li>3</li>
    60. <li class="last">4</li>
    61. </ul>
    62. </div>
    63. <div class="footer">footer</div>
    64. </body>
    65. </html>
    • 先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置
    • 一个元素浮动了,理论上其余兄弟元素也要浮动
      • 一个盒子里面有多个子盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动
    • 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流

    若2浮,则

    若13浮,2 标准

    三、清除浮动

    我们前面浮动元素有一个标准流的父元素, 他们有一个共同的特点,

    都是有高度的.但是, 所有的父盒子都必须有高度吗?

    理想中的状态, 让子盒子撑开父亲. 有多少孩子,我父盒子就有多高.

    但是不给父盒子高度会有问题吗?..…

    1.为什么要清除浮动?

    • 由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为0时,就会影响下面的标准流盒子

    • 由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响
    • 理想中的状态,让子盒子撑开父亲,有多少孩子,我父盒子就有多高

    2.清除浮动的本质

    • 清除浮动的本质是清除浮动元素造成的影响
    • 如果父盒子本身有高度,则不需要清除浮动
    • 清除浮动之后,父级就会根据浮动的子盒子自动检测高度,父级有了高度,就不会影响下面的标准流了。
    1. 选择器 {
    2. clear: 属性值;
    3. }

    • 我们实际工作中,几乎只用clear:both
    • 清除浮动的策略是:闭合浮动
    • 只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子。

    3.清除浮动的方法

    1. 额外标签法也称为隔墙法,是W3C推荐的做法

    2. 父级添加 overflow 属性

    3. 父级添加 after 伪元素

    4. 父级添加双伪元素

     (1)额外标签法

    额外标签法会在浮动元素末尾添加一个空的标签,例如:

    例如

    ,或者其他标签(如
    等)

    注意:要求这个新的空标签必须是块级元素

    优点:通俗易懂,书写方便

    缺点:添加许多无意义的标签,结构化较差

    实际工作可能会遇到,但是不常用

    (2)overflow

    • 可以给父级添加overflow属性,将其属性值设置为hidden,autoscroll
    • 优点:代码简洁
    • 缺点:无法显示溢出的部分

    (3)after伪元素法

    :after 方式是额外标签法的升级版。也是给父元素添加

    1. .clearfix:after {
    2. content: "";
    3. display: block;
    4. height: 0;
    5. clear: both;
    6. visibility: hidden;
    7. }
    8. .clearfix {
    9. /* IE6,7专有*/
    10. *zoom : 1;
    11. }
    • 优点:没有增加标签,结构更简单
    • 缺点:需要照顾低版本浏览器
    • 代表网站:百度、淘宝、网易等
    <div class="box clearfix"></div>

    (4)双伪元素

    • 也是给父元素添加
    • 优点:代码更简洁
    • 缺点:需要照顾低版本浏览器
    • 代表网站:小米、腾讯等
    1. .clearfix:before,.clearfix:after{
    2. content:"";
    3. display:table;
    4. }
    5. .clearfix:after {
    6. clear:both;
    7. }
    8. .clearfix {
    9. *zoom:1;
    10. }

    父元素调用

    4.浮动总结

    为什么清除浮动

    ①:父级没高度

    ②:子盒子浮动了

    ③:影响下面布局了,我们就应该清除浮动了。

    四、PS切图

    1.常见的图像格式 

    ps切图有很多切图方式:图层切图、切片切图、PS插件切图

    2.图层切图

    最简单的切图方式:右击图层 ➡导出 PNG 切片。

    但是很多情况,需要合并图层再导出

    1.选择需要的图层,图层菜单->合并图层

    2.导出为png

    (1)点击psd图片,找到对应的图层 

    (2)如何图层保存为图片

    参考:https://www.taoxuemei.com/chuli/ps/355.html

    ①隐藏其他图层再保存

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

     

     3.切片切图

    1. 利用切片选中图片
    • 利用切片工具手动划出
    1. 导出选中的图片
    • 文件菜单➡存储为 web 设备所用的格式➡选择我们要的图片格式➡存储

     

     

    选择切片选择工具,可以挪动切片,del删除切片 

    4.Cutterman

    Cutterman 是一款运行在 Photoshop 中的插件,能够自动将你需要的图层进行输出,以替代传统的手工 “导出 web 所用格式” 以及使用切片工具进行挨个切图的繁琐流程。

    官网:https://www.cutterman.cn/zh/cutterman

    注意:Cutterman 插件要求你的 PS 必须是完整版,不能是绿色版,所以大家需要安装完整版本

    cutterman下载之后是pkg,双击使用默认安装器安装

    五、学成在线案例

    1.css属性书写顺序

    1. 布局定位属性:display/position/float/clear/vicibility/overflow(建议display第一个写)
    2. 自身属性:width/height/margin/padding/border/background
    3. 文本属性:color/font/text-decoration/text-align/veeertical-align/white-space/break-word
    4. 其他属性(CSS):cont/cursor/border-radius/box-shadow/text-shadow/backgroud:linear-gradient

     2.页面布局整体思路

    1. 确定页面的版心(可视区),测量可知
    2. 分析页面中行模块,以及每个行模块的列模块。页面布局第一准则
    3. 一行中的列模块经常浮动布局,先确定每个列大小,之后确定列的位置。页面布局第二准则
    4. 制作HTML结构。遵循现有结构,后有样式原则,结构最重要
    5. 先理清楚布局结构

    3.案例

    (1)头部

    导航栏开发注意

    实际开发中,不会直接用链接a而是用li 包含链接(li+a)的做法

    1. li+a语义更清晰,一看就是有条理的列表型内容
    2. 如果直接用a,搜索引擎容易辨别为有堆砌关键字嫌疑

    📢让导航栏一行显示,给li加浮动,因为li是块级元素,需要一行显示

    📢这个nav导航栏可以不给宽邸,将来可以继续添加其余文字

    📢因为导航栏里面文字不一样多,所以最好给链接a左右padding,而不是指定宽度

    (4)核心内容区域

    1.新技能:ctrl+g可搜索到达某行

    2.ul里面多个li块,加了右边距,父亲不够宽最后的盒子会掉下来

    把li的父亲ul 修改的足够宽 一行可以装下5个盒子就不会换行了 245*5

    index.html

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. <link rel="stylesheet" href="style.css">
    9. </head>
    10. <body>
    11. <!-- 头部开始 -->
    12. <div class="header w">
    13. <!-- logo部分 -->
    14. <div class="logo">
    15. <img src="images/logo.png" alt="">
    16. </div>
    17. <!-- 导航栏 -->
    18. <div class="nav">
    19. <ul>
    20. <li><a href="#">首页</a></li>
    21. <li><a href="#">课程</a></li>
    22. <li><a href="#">职业规划</a></li>
    23. </ul>
    24. </div>
    25. <!-- 搜索模块 -->
    26. <div class="search">
    27. <input type="text" value="输入关键词">
    28. <button></button>
    29. </div>
    30. <!-- 用户模块 -->
    31. <div class="user">
    32. <img src="images/user.png" alt="">qq-lilei
    33. </div>
    34. </div>
    35. <!-- 头部结束 -->
    36. <!-- ban'nner开始 -->
      • 前端开发 >
    37. 前端开发>
  • 前端开发>
  • 前端开发>
  • 前端开发>
  • 前端开发>
  • 前端开发>
  • 前端开发>
  • 前端开发>
  • 我的课程表

    • 继续学习 程序语言设计

    • 正在学习-使用对象

    • 继续学习 程序语言设计

    • 正在学习-使用对象

    • 继续学习 程序语言设计

    • 正在学习-使用对象