• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
百事可爱
一起努力鸭~~~
博客园    首页    新随笔    联系   管理    订阅  订阅
CSS的浮动

CSS之浮动

网页布局的本质是用CSS来摆放盒子,把盒子摆到相应位置
CSS提供三种布局方式,就是盒子如何进行排列顺序:
1.** 标准流(普通流或文档流)**,就是标签按照规定好的默认的方式排列,
1.块级元素会默认独占一行,从上到下顺序排列,常用:div hr p h1到h6 ul ol dl form table
2.行内元素默认会按顺序,从左到右排列,碰到父元素边缘自动换行,例如:span a i em
2. 浮动
3. 定位
一个完整的网页,基本包含了这三种布局方式
若想将多个块级元素横向排列时:
若将块级元素转换为行内块元素,虽然可以实现横向排列,但行内块元素横向排列时,元素之间是会有空白空隙。其大小不好控制。而且有时盒子间还没有空袭

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

1. 浮动(float)属性

float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘或另一个浮动框的边缘
语法:
选择器 {
float: ; 属性值:left right
}

<style>
.left,.right{
	width:200px;
	height:200px;
	background-color:pink;
	float:left;
	}
</style>
</head>
<body>
<div class="left">盒子1</div>
<div class=" right">盒子2</div>
两个盒子的边缘紧贴在一起

2. 浮动特性

加了浮动之后的元素,会有以下 浮动特性

1.浮动元素会脱离标准流(脱标)

  1. 脱离标准流的控制移动到指定位置,浮动的盒子不再保留原先的位置
    会出现:若盒子1设为浮动的,盒子2还是标准流,可能会出现盒子2占据盒子1的位置,或者盒子间的叠加效果
<style>
.left{
	width:200px;
	height:200px;
	background-color:pink;
	float:left;
	}
.right{
		width:200px;
	height:400px;
	background-color: blue ;
}
</style>
</head>
<body>
<div class="left">盒子1</div>
<div class=" right">盒子2</div>

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

浮动的盒子是相互贴靠在一起的,若父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐

3.浮动元素会具有行内块元素的特性

任何元素都可以浮动,不管原先是何模式的元素,添加浮动后,就具有行内块元素相似的特性:可设高和宽,一行显示多个 ,宽度默认是盒子内容的宽度
所以,行内元素有了浮动,不需要转换块级或行内块元素就直接设置高和宽
块级元素默认宽度和父级一样宽

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

为了约束元素的位置,网页布局时:
先用标准流的父元素排列上下位置,之后内部的子元素采取浮动排列左右位置,
就是大的标准流盒子里放许多浮动子盒子

<style>
/*在一个大的标准流盒子里放许多浮动子盒子,而ul   li都是块级元素,ul就是大的盒子*/
* {/*去除网页标签中的所有默认的内外边距*/
	margin:0;
	padding:0;
	}
li {/*去除li前面的小黑点*/
	list-style:none;
	}
.box {
	width:1030px;
	height:250px;
	background-color:pink;
	margin: 0 auto;
	}
.box li{/*权重0010+0001=0011*/
		width: 250px;
	height:250px;
	background-color: #3CF;
    float:left;
	margin-right:10px;
	}
/*.one {
	margin-right:0;
	/*没有执行此设置,是因为权重的问题 0010*/
.box .one {
	margin-right:0;
	}
</style>
</head>
<body>
<ul class="box">
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li class="one">4</li>
 </ul>
</body>
</html>

常见的网页布局

<title>网页布局</title>
<style>
* {/*网页布局第一步*/
	margin:0;
	padding:0;
	}
.top{/*默认宽度与父元素浏览器同宽*/
	height:50px;
	background-color:gray;
	}
.banner{
	width:978px;
	height:150px;
	background-color:gray;
	margin: 10px auto;/*盒子水平居中*/
	}
.box {/*父盒子放许多小盒子*/
		width:978px;
	height:300px;
	background-color:gray;
	margin: 0 auto;/*盒子水平居中*/
	}
li {/*去掉无序列表项默认的小黑点*/
	list-style:none;
	}
.box li{
	width:237px;
	height:300px;
	background-color: pink;
	float:left;/*小盒子水平显示*/
    margin-right:10px;
	}
.box .last{/*最右边的小盒子不需要右外边距*/
	    margin-right: 0px;

	}
	/*只要是通栏的盒子,就是和浏览器一样宽,不需要指定宽度*/
.footer{
		height:200px;
	 background-color:  red;
     margin-top:10px;
	}

</style>
</head>
<body>
<div class="top"></div>
<div class=" 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"></div>
</body>

注意点:浮动的盒子只会影响盒子后面的标准流,不会影响前面的标准流

例如1:
盒子1是标准流,盒子2是浮动的且左浮动,盒子3是标准流
排列顺序:盒子1独占一行,盒子2浮动起来左对齐,盒子3跑到盒子2的位置

2. 清除浮动

1. 引入:

  1. 思考: 前面浮动元素有一个标准流的父元素,他们有一个共同的特点,就都是有高度的,那么父盒子必须有高度吗?当一个盒子中所包含的小盒子个数很多时,或者不知道要包含多少文字时,父盒子再有高度就不太方便
  2. 为什么要消除浮动?
    父级盒子多数情况下不太方便给出高度,但是子盒子浮动又不占有位置,最后父级盒子高度是0,就会影响标准流盒子(就是标准流盒子会占据父级盒子的位置,然后父级的子盒子又浮动,会出现内容的叠加等情况),浮动元素不再占用原文档流的位置,所以它会对后面元素的排版产生影响
  3. 清除浮动的本质清除浮动元素造成的影响:
    清除浮动后,父级就会根据浮动的子盒子自动检测高度,父级有了高度,就不会影响下面的标准流了
  4. 清除浮动的策略是闭合浮动,只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子

2. 语法:

选择器 {clear: 属性值;}
属性值 可以取:

  1. left 不允许左侧有浮动元素(清除左侧浮动的影响)
  2. right 不允许右侧有浮动元素(清除右侧浮动的影响)
  3. both 同时清除左右侧浮动的影响(最常用)

3. 清除浮动的方法

  1. 额外标签法又称隔墙法 (了解)
    就是在浮动元素末尾添加一个空的块级元素标签

补充:清除浮动:

clear: left 清除左边的浮动对象,如果左边有浮动对象,则当前元素会在浮动对象的底下显示
clear: right 清除右边的浮动对象,如果右边有浮动对象,则当前元素会在浮动对象的底下显示
clear:both 清除左右边的浮动对象,如果左右边有浮动对象,则当前元素会在浮动对象的底下显示

实现三栏居中(用到子绝父相)和浮动一样,也可以用到网页布局,只不过浮动是利用外边距实现盒子之间的空袭,多数是用浮动来实现盒子的横向排列

  1. 把三栏放在父容器中
  2. 父容器实现居中
  3. 三栏相对父容器绝对定位
<style>
        body{
            text-align:  center;
        }
        .father{
            width: 800px;
            height: auto;
            position: relative;
            margin:0 auto;
        }
        /* height: auto; 是自适应高度 */
        .left{
            width: 200px;
            height: 200px;
            background-color: turquoise;
            position: absolute;
            top:20px;
            left:20px;
            }
        .main{
            width: 400px;
            height: 200px;
            background-color: violet;
            position: absolute;
            top:20px;
            left:240px;
        }
        .right{
            width: 200px;
            height: 200px;
            background-color: yellow;
            position: absolute;
            top:20px;
            left:660px;
        }
    </style>
</head>
<body>
    <div class="father">
        <div class="left"></div>
        <div class="main"></div>
        <div class="right"></div>
    </div>
</body>
posted on 2021-10-20 21:46  精致猪猪侠  阅读(241)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3