不完美解决谷歌Chrome在设置background cover和fixed属性后,滚动屏幕出现背景图片的拉伸

news2024/11/16 7:38:20

业务场景:

让元素有背景图.

背景图不随着页面滚动而移动,相对于浏览器窗口固定.

根据屏幕尺寸,背景图自动覆盖式填充,不能有接缝和重复.

元素要有圆角.

通过js入参动态设置背景图.

不便截图,相信各位上面可以看明白了.

复现:

css是这样的

.main {
    width: 90%;
    background-size: 100% 100%;
    border-radius: 3.125rem;
    padding: 5% 5% 20rem;
}

js中动态设置了背景图片

let mainStyleOverride = {
        background: `fixed url(${props.backgroundImageUrl.toString().startsWith("http") ? props.backgroundImageUrl : backImg}) `,
        backgroundSize: 'cover',
        //网上有人说这么做,但是不满足需求,这样设置以后,鼠标滚动背景图就跟着走了
        //transform: "translate3d(0, 0, 0)",
    }

return <div className="main" style={mainStyleOverride}>
        <div className="main-title">{props.title}</div>
        <div className="main-subTitle">{props.subTitle}</div>
    </div>

开始以为是rem的问题,同事说是这个可能是元素的高度变化了才导致的.但并不是.元素高度没有变化.

这个问题在safari上不存在.

解决方法:

方法1:

.main {
    width: 90%;
    //background-size: 100% 100%;
    //问题的根源
    //border-radius: 3.125rem;
    padding: 5% 5% 20rem;
    //增加后没有问题,找到灵感
    //background-position: 10rem 0;
    background-size: cover;
    //只有谷歌浏览器会出这个问题
    //-webkit-background-size: cover;
    //-moz-background-size: cover;
    //-o-background-size: cover;
    //为cover层提供定位
    position: relative;
    //将多余的box-shadow隐藏,否则如果调整时失误将box-shadow的第四参数调整过大会侵蚀别的元素
    overflow: hidden;
    //增加一个遮罩层,让中间镂空,周围圆角,圆角外部是白色的box shadow
    &-cover{
        //满铺
        width: 100%;
        height: 100%;
        position: absolute;
        //调整位置
        top: 0;
        left: 0;
        //圆角放在遮罩层
        border-radius: 3.125rem;
        //透明,就展示中间原来展示的内容了.
        background: transparent;
        //第四个参数要大于等于border-radius.否则圆角切不完,外面还剩一块,第三个参数要小,否则会出现渐变
        box-shadow: 0 0 1px 3.125rem white;
    }
}
export const AD = (props) => {
    let editing = props.editing;
    let mainStyleOverride = {
        backgroundImage: `url(${props.backgroundImageUrl.toString().startsWith("http") ? props.backgroundImageUrl : backImg})`,
        backgroundAttachment:'fixed',
    }
    const onClick = () => {
        window.location.href = props.buttonHrefUrl;
    }
    return <div className="main" style={mainStyleOverride}>
        <div className="main-cover"></div>
        <div className="main-title">{props.title}</div>
        <div className="main-subTitle">{props.subTitle}</div>
    </div>
};

但是这个方法会有一个问题:中间的内容会被cover掉

方法2:

四个角分别用四个矩形做圆角box-shadow,这样做的问题也有一个,谷歌浏览器会在渲染box-shadow时,外部的container边界上会映射出box-shadow的影子.

方法3:

main外面再包一层,圆角设置到外面

advertise {
  overflow: hidden;
  border-radius: 3.125rem;
  width: 100%;

  &-main {
    width: 100%;
    box-sizing: border-box;
    padding: 5% 5% 20rem;
    background-size: cover;
    position: relative;
}

这个方法也有一个问题:

safari不显示圆角,手机chrome和safari也不显示圆角. 

方法4:

使用svg,也有问题 某个宽度/角度的时候也会出现边缘.应该是浏览器计算精度问题了.

这个问题在左上角0,0的位置不会出现,坐标非0的时候计算可能就会出现问题.解决办法是:

<svg
            xmlns="http://www.w3.org/2000/svg"
            version="1.1"
            viewBox="0 0 1000 50"
            style={{
                background:'transparent',
                position:'absolute',
                top:0,
                left:0,
            }}
        >
            <path d="M 0,50 A 50,50 0 0 1 50,0 L 0,0 M0,50 Z" fill="white"></path>
            <path d="M 950,0 A 50,50 0 0 1 1001,50 L 1001,0 Z" fill="white"></path>
        </svg>


注意1001的写法  实际你的视口是1000的,但是要写成大于1000 防止计算的时候丢精度导致的问题.但是不要写的太大.比如你写成1010,那么可能就发生形变了. 

比如像下面这样 就是写成1010的效果

但是这之后还是有一个问题:safari浏览器会有问题,svg的定位错误.  哈哈哈哈哈

总结:

并不是什么技术方案,只是个思路,经验代替不了思考.

具体原因不清楚,可能是浏览器问题以后会解决吧.只要解决问题就好.

用background clip可以解决?,我没有弄,当需要更多效果或者验收不过的时候可以考虑.

最后,没有完美解决,或许我该试试用4个svg分别做四个角,而不是用上下两个?

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chat GPT5的主要介绍

Chat GPT-5是一种基于人工智能技术的对话系统&#xff0c;用于进行自然语言处理和对话&#xff0c;以提供更好的服务。 它是由OpenAI公司开发的&#xff0c;是GPT系列的最新版本。 GPT代表着"生成式预训练"&#xff0c;因此Chat GPT-5基于神经网络&#xff0c;通过预…

STM32F103RCT6 103RE 103R8 103RB 103C8 103CB 103VE 103VC

这些型号均属于意法半导体&#xff08;STMicroelectronics&#xff09;的STM32F103系列微控制器&#xff0c;其特点如下&#xff1a; STM32F103RCT6&#xff1a;512 KB Flash、64 KB RAM&#xff0c;LQFP64封装&#xff1b;STM32F103RE&#xff1a;512 KB Flash、64 KB RAM&am…

webgl-矩阵、旋转、平移、缩放 glMatrix组件

引入新组建glMatrix glMatrix.js /*! fileoverview gl-matrix - High performance matrix and vector operations author Brandon Jones author Colin MacKenzie IV version 3.4.3 Copyright (c) 2015-2021, Brandon Jones, Colin MacKenzie IV. Permission is hereby granted…

JAVA开发运维(关于渗透测试与漏洞修复)

对于C端的网站&#xff0c;H5&#xff0c;小程序或者app都需要进行渗透测试。 渗透测试是模拟真实黑客的攻击手段&#xff0c;对目标网站或主机进行全面的安全评估。 与黑客攻击不同&#xff0c;渗透测试的目的是尽可能多地发现安全漏洞&#xff0c;而真正的黑客只需要找到一种…

TCP与UDP的区别

一、TCP协议 TCP协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;具有下面这些特征 1&#xff09;面向连接 是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”&#xff0c;这样能建立可靠的连接。建立连接&#xff0…

浏览器DOM(上)——节点

文档对象模型是用来描述文档&#xff0c;这里的文档&#xff0c;是特指 HTML 文档。同时它又是一个“对象模型”&#xff0c;这意味着它使用的是对象这样的概念来描述 HTML 文档&#xff0c;DOM 也是使用树形的对象模型来描述一个 HTML 文档。 DOM API 大致会包含 4 个部分。 …

【MySQL数据库原理】MySQL 数据库环境变量设置问题完整解决与数据库删除测试

目录 1、环境变量与终端问题2、数据库删除测试1、环境变量与终端问题 在上一篇文章中提到mysql专用终端会失效的问题,通常使用一段时间之后,点击会出现闪退的情况,主要原因是没有配置好环境变量。 因此,要解决上述问题就需要配置环境变量,这样就可以在Windows终端失效m…

域名解析设置方法

域名解析设置都是实时生效的&#xff0c;一般只需几秒即可同步到各地 DNS 上&#xff0c;但各地 DNS 均有缓存机制&#xff0c;解析的最终生效取决于各运营商刷新时间! 一、A记录 ①.主机名必须填写&#xff1b; 常用主机名有&#xff1a;www//*&#xff0c;效果参见上图说明&…

【linux】基于环形队列的生产者消费者模型(信号量)

文章目录一、引入二、信号量2.1 信号量的概念2.2 信号量的PV操作2.3 信号量接口2.3.1 信号量初始化sem_init2.3.2 信号量销毁sem_destroy2.3.3 信号量等待sem_wait(P)2.3.4 信号量发布sem_post(V)三、基于环形队列的生产者消费者模型3.1 引入环形队列3.2 环形队列的访问3.3 代码…

java单例模式的线程安全 JAVA多线程编程中的双重检查锁定(DCL单例(Double Check Lock))

java单例模式的线程安全 JAVA多线程编程中的双重检查锁定&#xff08;DCL单例&#xff08;Double Check Lock&#xff09;&#xff09;一、饿汉模式单例&#xff08;本身及时线程安全的&#xff09;二、懒汉模式单例1.懒汉模式第一版&#xff0c;用INSTANCE null判断是否初始化…

2023 年男生还推荐报计算机专业吗?

计算机专业确实是一个非常热门的专业&#xff0c;就业前景也很广阔。 但是&#xff0c;近些年随着各个大学对计算机专业及其相关专业疯狂扩招&#xff0c;而且每年的毕业人口都在增多&#xff0c;行业是根本容纳不下的&#xff0c;就业竞争力度也急剧上升。因此&#xff0c;选…

图解PMP项目管理马斯洛需求层次理论在公司管理中的应用!

马斯洛的需求层次结构是心理学中的激励理论&#xff0c;包括人类需求的五级模型&#xff0c;通常被描绘成金字塔内的等级。 从层次结构的底部向上&#xff0c;需求分别为&#xff1a;生理&#xff08;食物和衣服&#xff09;&#xff0c;安全&#xff08;工作保障&#xff09;…

小白开发微信小程序52--测试小程序

经过前面的50&#xff0c;51两个重要的步骤之后&#xff0c;小程序的前端代码和后端代码终于部署在外网了&#xff0c;回顾这个过程&#xff0c;细节很多&#xff0c;环节很杂&#xff0c;而且麻烦&#xff0c;有这些过程&#xff1a;1&#xff09;申请域名2&#xff09;域名备…

Vue本地存储及用法

1.本地存储是什么&#xff1f; 以文件的方式存储在本地&#xff0c;通过把数据存在浏览器中&#xff0c;用户不必每次都向服务器请求 获取同一个信息。在你离线时&#xff0c;使用本地存储的数据而不是向远端服务器上请求 数据就显得非常有用&#xff0c;甚至在先用户也可以从中…

Java语法理论和面经杂疑篇《五.集合框架》

目录 1. 集合框架概述 1.1 数组的特点与弊端 1.2 Java集合框架体系 2. Collection接口及方法 2.1 添加 2.2 判断 2.3 删除 2.4 其它 3. Iterator(迭代器)接口 3.1 Iterator接口 3.2 迭代器的执行原理 3.3 foreach循环 4. Collection子接口1&#xff1a;List 4.1 Li…

【数据分析之道-NumPy(三)】numpy切片与索引

文章目录 专栏导读1、前言2、NumPy数组切片2.1一维数组切片2.2多维数组切片3、NumPy数组索引3.1一维数组索引3.2多维数组索引4、NumPy数组高级索引4.1整数数组索引4.2布尔数组索引4.3数组索引总结专栏导读 ✍ 作者简介:i阿极,CSDN Python领域新星创作者,专注于分享python领域…

Linux驱动开发——字符设备(2)

目录 虚拟串口设备驱动 一个驱动支持多个设备 习题 虚拟串口设备驱动 字符设备驱动除了前面搭建好代码的框架外&#xff0c;接下来最重要的就是要实现特定于设备的操作方法&#xff0c;这是驱动的核心和关键所在&#xff0c;是一个驱动区别于其他驱动的本质所在&#xff0c;…

vue:生成二维码 qrcode、vue-qr(二维码中间可带logo)

一、方法一 qrcode qrcode - npm 1.1、安装 yarn add qrcode 1.2、页面引入 import QRCode from qrcode; 1.3、方法里边使用 getQRCodeUrl(){ QRCode.toDataURL(hello world,{color: {dark:"#010599FF",light:"#FFBF60FF"}}).then((url) > {// 获…

【华为OD机试真题】查找树中元素(查找二叉树节点)(javaC++python)100%通过率

查找树中元素 知识点树BFSQ搜索广搜 时间限制:1s空间限制:256MB限定语言:不限 题目描述: 已知树形结构的所有节点信息,现要求根据输入坐标(x,y)找到该节点保存的内容 值;其中: x表示节点所在的层数,根节点位于第0层,根节点的子节点位于第1层,依次类推; y表示节…

智慧井盖-物联网智能井盖系统-管网数字化监测,守护城市生命线

平升电子智慧井盖-物联网智能井盖系统-管网数字化监测,守护城市生命线实现对井下设备和井盖状态的监测及预警&#xff0c;是各类智慧管网管理系统中不可或缺的重要设备&#xff0c;解决了井下监测环境潮湿易水淹、电力供应困难、通讯不畅等难题&#xff0c; 适合安装于城市主干…