前端基础之CSS浮动和定位方式

一、浮动

(1)概述

浮动是所有网站页面布局必备的 可以将块儿级标签浮动起来脱离正常的文档流。

  • 浮动是多个块儿级标签可以在一行显示(全部飘在了空中)
  • 浮动的元素,没有块儿级一说,本身有多大浮起来之后也就只能占多大。
  • 只要涉及到页面的布局,一般都是用浮动提前规划好

主要属性值为:left(左浮动)、none(不浮动)、right(右浮动)、inherit(继承父元素浮动),多用于网页排版。

属性值 描述
left 元素向左浮动。
right 元素向右浮动。
none 默认值。元素不浮动,并会显示在其在文本中出现的位置。

原理:使当前元素脱离普通流,相当于浮动起来一样,浮动的框可以左右移动,直至它的外边缘遇到包含框或者另一个浮动框的边缘

(2)浮动示例

  • 内部元素因为浮动导致了外边框无法框柱内部元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#d1 {
height: 200px;
width: 200px;
background-color: red;
float: left; /*浮动 浮到空中往左边飘*/
}
#d2 {
height: 200px;
width: 200px;
background-color: yellow;
float: right; /*浮动 浮到空中往右边飘*/
}
</style>
</head>
<body>
<div id="d1"></div>
<div id="d2"></div>
</body>
</html>

(3)浮动造成的影响

主要是会造成父标签塌陷的问题。

​ 浮动后的元素可以设置宽度和高度等,也就是说元素浮动后会变成块级元素,但我更倾向于说元素变成inline-block类型的元素,即同时拥有块级与行内元素的特征。

​ 因为浮动元素脱离了普通流,会出现一种高度坍塌的现象:原来的父容器高度是当前元素A撑开的,但是当A元素浮动后,脱离普通流浮动起来,那父容器的高度就坍塌(前提是父容器高度小于A元素高度)。

(4)解决浮动带来的影响

方式一:自己加一个div设置高度

  • 直接写div然后写对应的长宽
  • 内部再创建一个子标签,给一个固定高度,撑起外边框
#d4 {
height: 100px;
}
  • 造成代码冗余,不推荐使用

方式二:利用clear属性

  • 写div然后添加clear属性 避免去查找长宽
#d4 {
clear: left; /*该标签的左边(地面和空中)不能有浮动的元素,有的话会一直往下,直到没有*/
}

方式三:通用的解决浮动带来的影响方法(推荐使用)

  • 在写HTML页面之前,先提前写好处理浮动带来的影响。
  • css代码:
.clearfix:after{
content: '';
display: block;
clear: both;
}
  • 前端:
之后只要标签出现了塌陷的问题就给该塌陷的标签加一个clearfix属性即可
<div id="d1" class="clearfix">
<div id="d2"></div>
<div id="d3"></div>
<div id="d4"></div>
</div>
  • 上述的解决方式是通用的,到哪都一样,并且名字就叫clearfix,强烈推荐使用

二、定位方式

(1)定位方式介绍

  • 静态

    • 所有的标签默认都是静态的(static),无法改变位置
    • 通过positon: static;指定,没有边偏移属性
  • 相对定位 Relative Positioning (了解)

    • 相对于标签原来的位置做移动(relative)
  • 绝对定位 Absolute Positioning (常用)

    • 相对于已经定位过的父标签做移动(如果没有父标签,那么就以body为参照)
    • 当你不知道页面其他标签的位置和参数,只给了你一个父标签的参数,让你基于该标签做定位的时候,使用绝对定位。
  • 固定定位 Fixed Positioning (常用)

    • 相对于浏览器窗口固定在某个位置(eg: 网站右侧的小广告)

ps:浏览器是优先展示文本内容的,如果它发现文本内容被挡住了,会想方设法的找个位置展示出来。

(2)静态定位

在 CSS 中,静态定位(Static positioning)是元素的默认定位方式。当你没有显式地设置任何定位属性时,元素会以静态定位的方式显示在页面上。

静态定位的元素遵循文档流,按照它们在 HTML 中出现的顺序进行排列。它们不受 toprightbottomleft 属性的影响,也不会相对于任何其他元素进行定位。

.static-box {
/* 默认为静态定位 */
}

总结来说,静态定位是元素的默认定位方式,它们在页面中按照文档流的顺序排列,不会相对于其他元素进行定位。

(3)相对定位

在 CSS 中,相对定位(Relative positioning)是一种定位方式,它允许你将元素相对于其正常位置进行移动,但不会影响其他元素的位置。相对定位的元素仍会占据原来的空间,只是在视觉上移动了。

特点:

  1. 相对于之前的位置进行移动
  2. 移动后,原来的位置以标准流的方式继续占有
  3. 移动后的盒子压住其它盒子
.relative-box {
position: relative;
/* 相对定位 */
/* 标签由static变为relative,它的性质就从原来没有定位的标签变成了已经定位过的标签 */
/* 虽然你没有修改值,但是它的性质也已经改变了*/
top: 20px;
left: 30px;
}

在上面的示例中,.relative-box 类表示一个元素,设置了相对定位。通过 position: relative; 属性,该元素会相对于其原始位置向下移动 20 像素(top: 20px;)和向右移动 30 像素(left: 30px;)。

用途:

相对定位常用于微调元素的位置,使其相对于其正常位置进行微小调整,而不会影响其他元素的布局。相对定位的元素仍会占据其原始位置,因此在页面布局时需要注意周围元素的位置。

需要注意的是,相对定位不会改变元素在文档流中的位置,只是视觉上的移动。如果想要完全脱离文档流并进行绝对定位,可以考虑使用绝对定位(position: absolute;)或固定定位(position: fixed;)属性。

(4)绝对定位

在 CSS 中,绝对定位(Absolute positioning)是一种常用的定位方式,它允许你将元素相对于其最近的已定位祖先元素进行定位,而不是相对于文档流。

特点:

  1. 移动盒子的时候,如果没有祖先盒子,或祖先盒子没有定位,则相对浏览器(非视口)的边线进行偏移
  2. 如果祖先盒子有定位(相对、绝对、固定),则相对最近一级的祖先盒子边线进行偏移。所以通常给父盒子相对定位但不给偏移量,这样既不造成父盒子的移动,又可以使子盒子形成绝对定位
  3. 绝对定位的盒子不占有原来的位置,但会压住其它盒子

示例:

当你不知道页面其他标签的位置和参数,只给了你一个父标签的参数,让你基于该标签做定位

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body {
margin: 0;
}
#d3 {
height: 100px;
width: 200px;
background-color: blue;
position: relative; /* 从静态标签变为已经移动过的标签 */
}
#d4 {
height: 200px;
width: 400px;
background-color: yellow;
position: absolute; /* 绝对定位 */
left: 220px;
top: 110px;
}
</style>
</head>
<body>
<div id="d3">
<div id="d4"></div>
</div>
</body>
</html>

用途:

绝对定位的元素脱离了文档流,不再占据原始位置,因此周围元素会表现得好像该元素从页面中消失了一样。这种定位方式常用于创建浮动菜单、弹出框等需要脱离文档流的元素。

需要注意的是,绝对定位的元素会相对于其最近的已定位祖先元素进行定位,如果没有已定位的祖先元素,则相对于文档的初始包含块(initial containing block)进行定位。

(5)固定定位

在 CSS 中,固定定位(Fixed positioning)是一种常用的定位方式,它允许你将元素相对于浏览器窗口进行定位,即无论用户如何滚动页面,该元素都会保持在固定的位置。

特点:

  1. 固定定位的盒子固定在浏览器视口的某个位置,压住其它盒子。浏览器上下滚动时,盒子的位置不变
  2. 边偏移是相对于视口的边线来移动
  3. 固定定位的盒子不占有原来的位置
  4. 固定定位的盒子需要有宽度

示例:

盒子固定在另一个盒子的右侧

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>test title</title>
<style>
.fix-box {
width: 100px;
height: 100px;
background-color: yellow;
position: fixed; /*写了fixed之后,定位就是根据浏览器窗口*/
/*盒子固定在另一个盒子的右侧*/
top: 100px;
left: 50%;
margin-left: 400px;
}
.median {
width: 800px;
height: 1000px;
background-color: red;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="fix-box"></div>
<div class="median"></div>
</body>
</html>

用途:

固定定位的元素会随着用户滚动页面而保持在固定位置,这种定位方式常用于创建固定的导航栏、广告条等需要始终可见的元素。

需要注意的是,固定定位的元素是相对于浏览器窗口定位的,因此不会随着页面的其余内容滚动而移动,而是始终固定在指定位置。

三、验证浮动和定位是否脱离文档流

脱离文档流:发生移动后是否还会占有原来的位置

(1)不脱离文档流

  • 相对定位
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div style="height: 200px;width: 300px; background-color: red;position: relative;left: 500px;"></div>
<div style="height: 200px;width: 300px; background-color: green"></div>
</body>
</html>

(2)脱离文档流

要验证浮动和定位是否脱离文档流,你可以创建一个包含浮动元素和定位元素的示例,并观察它们对文档流的影响。

在这个示例中,.float 类表示一个浮动元素,.absolute 类表示一个绝对定位的元素。

  • 浮动
  • 绝对定位
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Floating and Positioning</title>
<style>
.float {
float: left;
width: 100px;
height: 100px;
background-color: red;
}
.absolute {
position: absolute;
top: 50px;
left: 50px;
width: 100px;
height: 100px;
background-color: blue;
}
</style>
</head>
<body>
<div class="float">Floating Element</div>
<div class="absolute">Absolute Positioning</div>
</body>
</html>
  • 固定定位
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div style="height: 200px;width: 300px; background-color: red;"></div>
<div style="height: 200px;width: 300px; background-color: green;position:fixed;bottom:20px;right: 30px;"></div>
<div style="height: 200px;width: 300px; background-color: blue;"></div>
</body>
</html>
posted @   Xiao0101  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示

目录