首页 > 其他分享 >前端基础之CSS浮动和定位方式

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

时间:2024-03-19 20:24:18浏览次数:21  
标签:浮动 定位 盒子 标签 前端 元素 文档 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>

标签:浮动,定位,盒子,标签,前端,元素,文档,CSS
From: https://www.cnblogs.com/xiao01/p/18083837

相关文章

  • 前端面试题
    1、vue2和vue3的主要区别1、性能优化:Vue3对虚拟DOM进行了优化,例如使用了更高效的算法,缩减了代码量。此外,Vue3还利用Proxy代理优化了响应式系统,提高了性能。2、新特性:Vue3引入了CompositionAPI,是一种函数式API。CompositionAPI使得组合逻辑更加容易,能够更好地重用组件逻辑。......
  • 前端基础之CSS基础
    一、什么是cssCSS(CascadingStyleSheets的缩写),翻译为“层叠样式表”或者“级联样式表”,简称样式表。主要用来给HTML网页设置外观或者样式(HTML网页中的文字大小、颜色、字体、网页的背景颜色、背景图片等)。通俗来说就是给HTML标签添加样式的,让它变得更加好看二、注释语法......
  • 前端基础之CSS选择器
    一、什么是选择器选择器是指通过一定的语法规则选取到对应的HTML标记,然后给这个对应的HTML标记设置样式二、选择器的分类CSS中提供了多种不同类型的选择器,例如基本选择器、组合选择器、伪类选择器、伪元素选择器等等。1、基本选择器(1)概览在CSS中,选择器用于选取HTML文档中的......
  • 【大前端攻城狮之路】百度爱番番前端性能监控体系方案设计
    一、背景爱番番大前端整体面临以下问题:Metrics:URL的RED指标不全。URL不全,ERROR缺失,Duration分位置缺失。整体实效性为T+1。无法及时感知问题。只对基本页面级别的读操作进行了监控。Tracing:Trace无法全端串联,直接影响具体case的跟进。无前端Trace。Logging:无Log。Sentry......
  • VUE前端打包报错:TypeError: Class extends value undefined is not a constructor or
    在执行npmrunbuild的时候遇到了错误:TypeError:Classextendsvalueundefinedisnotaconstructorornull;而执行npmrunserve是可以正常执行的,报错如下:buildingforproduction...ERRORTypeError:ClassextendsvalueundefinedisnotaconstructorornullTypeErr......
  • CSS
    简介CSS(CascadingStyleSheets)层叠样式表,又叫级联样式表,简称样式表CSS文件后缀名为.cssCSS用于HTML文档中元素样式的定义目的使用css的唯一目的就是让网页具有美观一致的页面语法CSS规则由两个主要的部分构成:选择器,以及一条或多条声明(样式)选择器通常是您需要改变样式的......
  • 有趣的css - 音频小动效
    大家好,我是Just,这里是「设计师工作日常」,今天分享的是用css3实现一个好玩的音频小动效。《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。目录整体效果核心代码html代码css部分代码完整代码如下html页面css样式页面渲染效果整体效果使用......
  • 前端传list集合,后端接收
    一、前端列表多选<el-tableref="multipleTable":data="tableData"stripestyle="width:99%;margin-bottom:10px;":height="$publicjs.tableHeight"@se......
  • 前端低代码(DSL&Schema)
    标准的DSL和Schema区别--ChatGPT4回答DSL(Domain-SpecificLanguage)和Schema这两个概念在计算机科学和软件开发中是不同的,但它们都是用来描述结构和约束的。DSL(Domain-SpecificLanguage):DSL是一种专用于特定领域的计算机语言。它的设计针对某一特定领域的问题解决,比如用于网......
  • 前端学习-vue视频学习009-defineProps(子组件接收父组件的数据)
    尚硅谷视频链接defineProps-只接收父:要有数据letpersonList=reactive<personArr>([{id:'qqq1',name:'aaa',age:10,gender:'F'},{id:'qqq2',name:'vvv',age:30,gender:'F'},{id:'qq......