position:fixed无法固定到父盒子上面的解决方案

目录

问题如图所示:

下面是错误的代码:

解决方案1:

使用fixed固定定位固定到父元素:

解决方案2:

推荐使用的其他方案(粘性定位):

什么是粘性定位:

 粘性定位的使用:

这是我在项目中使用粘性定位的实现效果:

 实例代码及解释如下:


问题如图所示:

下面是错误的代码:

从代码中我们可以看到子盒子使用了固定定位fixed,并且设置了left和top的偏移;父盒子使用了position: relative相对定位;

        <div style="position: relative;height: 0px;"> 
            <div  style="display: flex;margin:10px 0 ;background-color: #fff;position:fixed;left: 31%;top: -10px;">
                    <el-button size="small" class="blue white_f" @click="saveRightData">保存</el-button>
                    <el-button size="small" class="blue white_f" style="margin-right:40px ;" @click="moveType=!moveType">{{!moveType?'开启':'关闭'}}滑动选中</el-button>
                    <div v-for="(item, index) in caseColorList" :key="index" class="color_d">
                        <div class="col_black"
                            :style="`background-color:${item.val};border: 1px solid ${item.boder_val || 'none'};`">
                        </div>
                        <span>{{ item.label }}</span>
                    </div>
                </div>
        </div>

根据这样的写法,我们可以判断出,子盒子应该根据已经设置的相对定位的最近的父盒子进行定位,但是子盒子的位置却在窗口的顶部了,其实这样的写法是错误的

子盒子(内部div)使用position: fixed;导致它相对于浏览器窗口定位,而不是相对于父盒子定位。这是因为position: fixed;的工作原理就是相对于浏览器窗口(viewport)进行定位,无论滚动页面多少,它都会保持在相同的位置。

position: relative 对子元素的position: fixed;定位没有任何影响,因为relativefixed两种完全不同定位方式position: relative;仅用于为子元素设置绝对定位position: absolute;时提供一个相对于其正常位置的偏移参考点。

解决方案1:

所以我们只要把定位改成绝对定位就可以啦

        <div style="position: relative;height: 0;"> 
            <div  style="display: flex;margin:10px 0 ;background-color: #fff;position:absolute;left: 31%;top: -10px;">
                    <el-button size="small" class="blue white_f" @click="saveRightData">保存</el-button>
                    <el-button size="small" class="blue white_f" style="margin-right:40px ;" @click="moveType=!moveType">{{!moveType?'开启':'关闭'}}滑动选中</el-button>
                    <div v-for="(item, index) in caseColorList" :key="index" class="color_d">
                        <div class="col_black"
                            :style="`background-color:${item.val};border: 1px solid ${item.boder_val || 'none'};`">
                        </div>
                        <span>{{ item.label }}</span>
                    </div>
                </div>
        </div>

解决效果如图:

 上面这确实是一个解决方案,但是假如吧,我只想用这个固定定位来实现呢?

因为固定定位是相对于浏览器窗口进行定位的,那我需要怎么样才能解决呢?怎样作用于父盒子上呢?

使用fixed固定定位固定到父元素:

在此之前呢,我们先看看文档,看他们是怎么对这些进行定义的:

下面是文档中关于常用的几种定位的描述:

static

该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时 toprightbottomleft 和 z-index 属性无效。

relative

该关键字下,元素先放置在未添加定位时的位置,再在不改变页面布局的前提下调整元素位置(因此会在此元素未添加定位时所在位置留下空白)。position:relative 对 table-*-group, table-row, table-column, table-cell, table-caption 元素无效。

absolute

元素会被移出正常文档流,并不为元素预留空间,通过指定元素相对于最近的非 static 定位祖先元素的偏移,来确定元素位置。绝对定位的元素可以设置外边距(margins),且不会与其他边距合并。

fixed

元素会被移出正常文档流,并不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时,元素会出现在的每页的固定位置。fixed 属性会创建新的层叠上下文。当元素祖先的 transformperspectivefilter 或 backdrop-filter 属性非 none 时,容器由视口改为该祖先。

当你看到这个的时候你应该就知道怎么解决了吧,所以说多看文档,前端的东西很多,而且是与时俱进的,文档啥的一直在更新变更,或许哪一天你常用的属性就被移除废弃了。

其中文档中讲述了:当元素祖先的 transformperspectivefilter 或 backdrop-filter 属性非 none 时,容器由视口改为该祖先。

毛主席曾言:实践是检验真理的唯一标准,那我们就来实践一下吧。

解决方案2:

我们去掉了父盒子的相对定位,但是加上了transform进行了1:1的缩放,为1是不改变原来盒子大小,其实也可以使用transform:rotate(360deg);进行旋转回归原位也是可以的哦

        <div style="height: 0;transform:scale(1)"> 
            <div  style="display: flex;margin:10px 0 ;background-color: #fff;position:fixed;left: 31%;top: -10px;">
                    <el-button size="small" class="blue white_f" @click="saveRightData">保存</el-button>
                    <el-button size="small" class="blue white_f" style="margin-right:40px ;" @click="moveType=!moveType">{{!moveType?'开启':'关闭'}}滑动选中</el-button>
                    <div v-for="(item, index) in caseColorList" :key="index" class="color_d">
                        <div class="col_black"
                            :style="`background-color:${item.val};border: 1px solid ${item.boder_val || 'none'};`">
                        </div>
                        <span>{{ item.label }}</span>
                    </div>
                </div>
        </div>

下面是效果,和使用了绝对定位效果是一样的:

推荐使用的其他方案(粘性定位):

如果你想定位到父盒子身上,并且能够实现固定定位的效果,我更推荐用下面这个(粘性定位),可能比较用的少吧,但是用起来真的很方便。

什么是粘性定位:

粘性定位可以被认为是相对定位固定定位混合。元素在跨越特定阈值前为相对定位,之后为固定定位。

简单来讲的话就是:

  • 一个元素在滚动到某个位置之前相对定位,然后当它达到指定的偏移位置时,它会“粘”在那里(就像固定定位一样,通常是视口的顶部或底部),直到滚动出视口
  • 需要注意的是,为了使粘性定位生效,元素必须有一个toprightbottomleft属性的非auto值。

sticky

元素根据正常文档流进行定位,然后相对它的最近滚动祖先(nearest scrolling ancestor)和 containing block(最近块级祖先 nearest block-level ancestor),包括 table-related 元素,基于 toprightbottom 和 left 的值进行偏移。偏移值不会影响任何其他元素的位置。 该值总是创建一个新的层叠上下文(stacking context)。注意,一个 sticky 元素会“固定”在离它最近的一个拥有“滚动机制”的祖先上当该祖先的 overflow 是 hiddenscrollauto 或 overlay 时),即便这个祖先不是最近的真实可滚动祖先。这有效地抑制了任何“sticky”行为(详情见 Github issue on W3C CSSWG)

 粘性定位的使用:

这是我在项目中使用粘性定位的实现效果:

直接附上

 

 实例代码及解释如下:

该代码只体现了主要部分,其中的h2标签就是需要进行粘性的部分(就是给需要粘性定位的盒子加上这个就行了),实现的效果上面已经有了哦,就不多说了。

在 viewport 视口滚动到元素 top 距离小于 n px 之前,元素为相对定位。之后,元素将固定在与顶部距离 n px 的位置,直到 viewport 视口回滚到阈值以下。当元素“粘”在视口顶部时,这个top值决定了元素与视口顶部的距离。

-webkit-sticky解释:这是一个WebKit特有的(也就是Safari和早期版本的Chrome等浏览器使用的渲染引擎)属性;主要用于确保样式在这些浏览器上正常工作。但是,现代浏览器大多已经支持标准的sticky属性,因此-webkit-sticky主要用于向后兼容

  <div id="divWidth" v-for="(item,index) in rightData" :key="index">
                    <h2 style="  position: -webkit-sticky; position: sticky;top: -1px;background-color: #fff;">{{ item.wareName }}</h2>
                    <div style="margin: 10px 0;" v-for="(v,i) in item.wareLocatorRowList" :key="i">

//自己的内容
                    </div>
                </div>

最后,希望大家多看文档哈,也希望适当的学习新知识,能够相较于昨天有一点点的进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/623922.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

答辩PPT设计太耗时?aippt工具,AI一站式服务

这些网站我愿称之为制作答辩PPT的神&#xff01; 很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路&#xff0c;一窍不通。但这并不是你们的错&#xff0c;对于平时没接触过相关方面&#xff0c;第一次搞答辩PPT的人来说&#xff0c;这是很正常的一件事。一个好的答辩PPT…

搞懂Docker(九)- 使用Docker Compose

获取示例程序 示例程序 或者 示例程序 获取示例程序程序结构如下├── getting-started-app/ │ ├── package.json │ ├── README.md │ ├── spec/ │ ├── src/ │ └── yarn.lock使用Docker Compose Docker Compose是一个帮助你定义和共享多容器应用程序的工具…

在线数据库设计工具drawDB

什么是 DrawDB &#xff1f; DrawDB 是浏览器中强大且用户友好的数据库实体关系&#xff08;DBER&#xff09;编辑器。只需点击几下即可构建图表、导出 SQL 脚本、自定义编辑器等等&#xff0c;无需创建帐户。 软件特点&#xff1a; DrawDB 是完全免费的无需注册或登录。只需投…

19.接口自动化-Jekins学习

1.CI-持续集成 频繁的&#xff08;一天多次&#xff09;将代码集成到主干 目的&#xff1a;让产品快速迭代&#xff0c;保持高质量 好处&#xff1a; 快速发现错误&#xff0c;每次更新都集成到主干&#xff0c;可以快速发现错误&#xff0c;定位错误也容易防止分支大幅偏离主…

字符串取第一个空格之后的所有的值字符串取第一个空格之后的第二个元素的值,不要后面的值

当我们后端返回值可能存在某些特定的值或标识导致返回数据不固定且是空格分割时&#xff0c;我们想取出返回字符串中的某个值&#xff0c;就可以参考下面对这个字符串进行操作提取&#xff0c;当然&#xff0c;如果是别的符号分割开的把下面的空格替换即可 1、字符串取第一个空…

C语言笔记14

指针1 在C语言中给内存单元的编号起了个名字叫做指针&#xff0c;通俗来说就是地址。&#xff08;内存单元编号地址指针&#xff09; 1.指针变量与地址 int a10&#xff1b; int* p&a&#xff1b; * 说明了这里p的是指针变量&#xff1b;int*说明p是一个整形指针&…

SpringBoot 实现对提供的接口进行 AES (加密,解密)

业务来源&#xff1a; 最近工作中&#xff0c;领导要求给别的项目组的小伙伴提供几个接口&#xff0c;要求对接口的参数进行解密操作&#xff0c;然后对返回的数据进行加密操作。 这时我想到了AES AES 是对称加密算法&#xff0c;优点&#xff1a;加密速度快&#xff1b;缺点…

生产环境磁盘变更方案

datanode磁盘扩容(1人天) 扩容磁盘 1.1 扩容前检查、新盘初始化 确定block副本统计正常,无丢块,无under-replicated 块 后台执行命令检查 hdfs dfs fsck / 无异常可进行以下步骤进行磁盘扩容 新盘初始化 ##格式化新盘,命令示例: mkfs.xfs /dev/sdc##挂载新盘,命令示…

哔哩哔哩直播通用榜单系统

榜单系统的定位和业务价值 榜单遍布B站直播相关业务的各个角落&#xff0c;直播打赏、直播间互动、付费玩法、互动玩法、活动、主播PK、语聊房、人气主播排名、高价值用户排名、增值集卡、up主充电等等&#xff0c;在这众多的业务场景中&#xff0c;我们能看到各种各样的榜单。…

Allegro如何输出各层PCB视图的PDF文件

如何输出各层PCB视图的PDF文件 1、说明 用Allegro设计好PCB后&#xff0c;有时需要出各层的PDF文档出来进行汇报和展示&#xff0c;这时就需要将各层的平面视图全部以PDF的形式加载出来&#xff0c;具体方法如下。 2、PDF文件的输出方法&#xff08;以四层板为例&#xff09; …

网上跳蚤市场|基于SSM+vue的网上跳蚤市场系统的设计与实现(源码+数据库+文档)

网上跳蚤市场系统 目录 基于SSM&#xff0b;vue的网上跳蚤市场系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台登录模块 5.2.1管理员功能 5.2.2会员功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八…

如何内网穿透,远程访问内网设备

文章目录 0.前言1.准备工作2.内网穿透原理3.配置公网服务器的frp5.配置访问内网主机6.配置win10的远程桌面访问&#xff08;win11类似&#xff09;7.参考资料 0.前言 最近想研究一些新东西&#xff0c;公司的机器不敢乱搞&#xff0c;公司测试的服务器安装软件太多&#xff0c…

SQL Server服务启动缓慢或崩溃问题分析

关键词&#xff1a;SQL Server故障解决、服务启动缓慢、服务崩溃、日志文件清理 阅读建议&#xff1a;如果您遇到的是SQL Server服务启动缓慢或无法响应的问题&#xff0c;可以重点阅读文章的第一部分&#xff1b;如果是服务崩溃或重启的问题&#xff0c;可以重点关注第二部分。…

React 第三十章 React 和 Vue 描述页面的区别

面试题&#xff1a;React 和 Vue 是如何描述 UI 界面的&#xff1f;有一些什么样的区别&#xff1f; 标准且浅显的回答&#xff1a; React 中使用的是 JSX&#xff0c;Vue 中使用的是模板来描述界面 前端领域经过长期的发展&#xff0c;目前有两种主流的描述 UI 的方案&#xf…

如何在 Linux 上检查 CPU 和硬盘温度

为了更好地监测您的Linux系统的硬件健康状况&#xff0c;如CPU与硬盘温度、风扇转速等关键指标&#xff0c;采用lm_sensors与hddtemp这两款强大工具是明智之选。以下是关于这些工具的详尽指南&#xff0c;包括它们的功能介绍、安装步骤以及如何配置lm_sensors&#xff0c;旨在为…

C++的相关知识集

1、C概述 1 两大编程思想 c语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c继承了c语言高效&#xff0c;简洁&#xff0c;快速和可移植的传统。 2 起源 与c语言一样&#xff0c;c也是在贝尔实验室诞生的&#xff0c;Bjarne Stroustrup(本贾尼斯特劳斯特卢普)在2…

自动化工具 Ansible:playbooks 剧本编写

目录 前言 一、playbooks 剧本概述 1、playbooks 剧本概念 2、playbooks 剧本组成部分 3、playbooks 剧本特点与优势 二、ansible-playbook 命令 三、playbooks 剧本简单实例 1、编写 apache 的 yum 安装部署脚本 2、编写 nginx 的 yum 安装部署剧本 四、playbooks 定…

【云原生】Kubeadm搭建K8S

一、部署Kubernetes 实验环境 服务器主机名IP地址主要组件k8s集群master01 etcd01master01192.168.10.100kube-apiserver kube-controller-manager kube-schedular etcdk8s集群node01 etcd02node01192.168.10.101kubelet kube-proxy docker flannelk8s集群node02 etcd03nod…

【源码+文档+调试讲解】微信小程序家政项目小程序

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了微信小程序家政项目小程序的开发全过程。通过分析微信小程序家政项目小程序管理的不足&#xff0c;创建了一个计算机管理微信小程序家政项目小程序的方案。文章介…

Android 使用RecyclerView实现商品列表

实现步骤&#xff1a; 创建数据模型 创建一个表示商品的类&#xff0c;例如ProductInfo创建适配器 创建一个继承自RecyclerView.Adapter的适配器类&#xff0c;用于处理RecyclerView中的数据和视图在主页面布局文件中添加RecyclerView创建Item 布局文件在你的Activity或Fragme…