javascript - 用 css 覆盖 img - 来自不同设备的可视化问题
问题描述
我正在寻找制作数字婚礼请柬,即使我不是网络开发人员。
我正在尝试使用非常简单的动画创建一个页面,其中有一个显示邀请的信封。我有三个使用 html 和 css 重叠的简单图像:
- 前信封 - https://i.ibb.co/HBZsxLt/optipng.png
- 邀请 - https://i.ibb.co/h7SfR5L/part.png
- 打开的信封 - https://i.ibb.co/HtkgNPy/all.png
我能够为我想要实现的目标创建代码(如下所列)。三个图像重叠,我可以用两行简单的 JavaScript 移动信封。当我用 Chrome 打开它时,重叠效果很好。但是,我的问题来自以下几点:
- 当我用 Firefox 打开网站时,一些邀请的像素会从信封中出来
- 当我从任何智能手机打开网站时,除了信封邀请尺寸问题之外,所有图像都会在左侧缩放或移动。
我试图搜索是否有任何方法以自适应方式重叠图像(从设备/浏览器的角度来看),也许只使用 JavaScript,但我没有找到任何东西。我发现只有我已经在下面实现的 css 和 html 方法。我发现解决问题的最简单方法是在正文中插入一个 gif,但我不太喜欢它。
我的简单代码是:
<!DOCTYPE html>
<html lang="it">
<head>
<title>Invitation wedding</title>
<style>
body {
margin: 0;
background-color: white;
}
#container {
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
position: relative;
}
img {
height: 50%;
padding: 80px 0;
overflow: visible; /* For Firefox */
}
.env {
position: absolute;
}
.partecipazione{
height: 130%;
padding-top: 20%;
position: absolute;
padding-right: 22px;
}
.allEnvelope{
padding-top: 20%;
position: absolute;
}
</style>
</head>
<body>
<div id="container">
<div class="allEnvelope">
<img id="allEnv" src="all.png"></img>
</div>
<div class="partecipazione">
<img id="part" src="part.png"></img>
</div>
<div class="env">
<img id="envelope" src="optipng.png"></img>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.2/TweenMax.min.js"></script>
<script>
var timeline = new TimelineMax();
timeline.to('#envelope, #allEnv', .6, {y:290}, '+=.7');
</script>
</body>
</html>
解决方案
在这里我改变了一些东西:
我删除了
img {
height: 50%;
padding: 80px 0;
overflow: visible; /* For Firefox */
}
然后在信封内的所有 div 周围添加一个额外的容器用于放置:
<div id="container">
<div class="envelopeWrapper">
<div class="allEnvelope">
<img id="allEnv" src="all.png"></img>
</div>
<div class="partecipazione">
<img id="part" src="part.png"></img>
</div>
<div class="env">
<img id="envelope" src="optipng.png"></img>
</div>
</div>
</div>
款式:
.envelopeWrapper{
width: 603px;
max-width: 95%;
height: 500px;
position: relative;
}
这里的高度只是把它放在屏幕的中间。它max-width
适用于移动设备,如果它小于width
603 像素,它将适应。还添加position: relative
以调整 div 的内部。在新包装器中添加了所有 div/图像的样式:
.env, .partecipazione, .allEnvelope {
position: absolute;
right: 0;
left: 0;
bottom: 0;
}
.envelopeWrapper img{
max-width: 100%;
height: auto;
}
.partecipazione{
padding-left: 2%;
padding-right: 6%;
padding-bottom: 7%;
}
使用绝对位置,我将其放置在新包装器 div 底部的角落。我需要为 .partecipazione 添加百分比填充,因为图像没有正确剪切。它以百分比为单位,因此它将适用于移动设备。
这是您更改的代码:
<!DOCTYPE html>
<html lang="it">
<head>
<title>Invitation wedding</title>
<style>
body {
margin: 0;
background-color: white;
}
#container {
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
position: relative;
}
.envelopeWrapper{
width: 603px;
max-width: 95%;
height: 500px;
position: relative;
}
.env, .partecipazione, .allEnvelope {
position: absolute;
right: 0;
left: 0;
bottom: 0;
}
.envelopeWrapper img{
max-width: 100%;
height: auto;
}
.partecipazione{
padding-left: 2%;
padding-right: 6%;
padding-bottom: 7%;
}
</style>
</head>
<body>
<div id="container">
<div class="envelopeWrapper">
<div class="allEnvelope">
<img id="allEnv" src="all.png"></img>
</div>
<div class="partecipazione">
<img id="part" src="part.png"></img>
</div>
<div class="env">
<img id="envelope" src="optipng.png"></img>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.2/TweenMax.min.js"></script>
<script>
var timeline = new TimelineMax();
timeline.to('#envelope, #allEnv', .6, {y:290}, '+=.7');
</script>
</body>
</html>
但我认为现在你只需要稍微调整动画的脚本。
推荐阅读
- laravel - Laravel - Mutator 似乎不适用于更新
- node.js - Node.js win32-api 获取并设置具有窗口进程id的窗口标题
- google-cloud-platform - 如何将 Google Cloud Platform 中的“localhost”添加为 OAuth2 的授权域
- html - 如何将图像添加到垂直时间线布局?
- bluetooth - gatttool 特性在非交互模式下写入
- php - 在将文件加载到网页之前检查文件是否存在
- ios - Deeplink iOS 日历
- c# - 使用 DependencyProperty 在文本框 (UWP) 上显示占位符文本
- laravel - 如何使用 eloquent 从两个 Has Many Relations 中获取值
- node.js - Socket.io 多次向客户端发射