本教程将详细指导如何使用html、css和javascript(jquery)创建一个从页面底部平滑滑出且不影响文档流的弹出层组件。通过利用css的position: fixed实现元素固定定位,transform: translatey实现垂直方向的动画,以及transition属性提供平滑过渡效果,我们将构建一个用户友好的交互式ui元素。
在现代网页设计中,弹出层(Pop-up)是一种常见的交互模式,用于展示额外信息、菜单或表单。本教程将专注于实现一种特定类型的弹出层:当用户点击按钮时,它能从页面底部平滑地向上滑出,并且在出现时不会影响页面其他内容的布局。
实现这种效果主要依赖于以下CSS和JavaScript技术:
首先,我们需要定义页面的基本HTML结构。这包括一个触发弹出层的按钮和一个用于显示内容的弹出层容器。
从底部滑出的弹出层
页面主体内容
向下滚动以查看固定在底部的按钮。
Lorem ipsum dolor sit amet consectetur adipisicing elit. Architecto, quidem.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Sapiente, eligendi.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Architecto, quidem.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Sapiente, eligendi.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Architecto, quidem.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Sapiente, eligendi.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Architecto, quidem.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Sapiente, eligendi.
这是一个从底部滑出的弹出层内容示例。
您可以在这里放置任何HTML元素,如导航链接、表单或详细信息。
在上述HTML结构中:
接下来,我们为这些HTML元素定义样式,以实现固定定位、隐藏、显示和动画效果。
/* 页面主体内容,仅用于演示滚动 */
.main-content {
height: 150vh; /* 确保页面可滚动 */
background-color: #f0f0f0;
padding: 20px;
}
/* 底部固定菜单容器 */
.bottom-fixed-menu {
position: fixed; /* 固定定位 */
z-index: 777; /* 确保在弹出层下方 */
bottom: 0; /* 贴合页面底部 */
left: 50%; /* 水平居中 */
transform: translateX(-50%); /* 精确水平居中 */
background-color: chartreuse; /* 背景色 */
padding: 10px 20px;
border-radius: 5px 5px 0 0; /* 顶部圆角 */
box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
}
.bottom-fixed-menu button {
padding: 8px 40px;
font-size: 16px;
border: none;
border-radius: 5px;
background-color: #007bff;
color: white;
cursor: pointer;
outline: none;
transition: background-color 0.3s ease;
}
.bottom-fixed-menu button:hover {
background-color: #0056b3;
}
/* 弹出层默认样式:初始隐藏在视窗下方 */
.popup-content {
display: flex;
flex-direction: column; /* 内容垂直排列 */
justify-content: center;
align-items: center;
position: fixed; /* 固定定位 */
left: 50%; /* 水平居中 */
transform: translateX(-50%) translateY(1000%); /* 关键:水平居中,并垂直向下移动极远的距离使其完全隐藏 */
width: 90%; /* 弹出层宽度 */
max-width: 600px; /* 最大宽度 */
height: auto; /* 高度自适应内容 */
min-height: 150px; /* 最小高度 */
padding: 20px;
font-size: 18px;
color: white;
background-color: darkgoldenrod;
border-radius: 10px 10px 0 0; /* 顶部圆角 */
z-index: 999; /* 确保在所有内容之上,包括按钮容器 */
transition: transform 0.4s ease-out; /* 动画过渡效果,只针对transform属性 */
box-shadow: 0 -5px 20px rgba(0, 0, 0, 0.3);
text-align: center;
}
.popup-content p {
margin: 5px 0;
line-height: 1.6;
}
/* 弹出层激活样式:滑入视窗 */
.popup-content.active {
bottom: 29px; /* 关键:最终位置,距离底部29px */
transform: translateX(-50%) translateY(0); /* 关键:取消垂直位移,使其滑入视窗 */
/* 注意:bottom属性与transform结合使用时,transform的优先级更高,
这里bottom: 29px会设置元素基线,然后transform: translateY(0)将元素从该基线位置显示 */
}CSS 关键点解析: