使用HTML和CSS创建一个响应式咖啡网站
本文将向您展示如何使用HTML和CSS创建一个响应式咖啡网站。我们将设计英雄区域、产品列表和联系表单等部分,并确保它们在台式机和移动设备上都能很好地显示。
在这篇文章中,我们将使用HTML和CSS创建一个响应式咖啡网站。
使用HTML和CSS创建一个响应式咖啡网站
在本教程中,我们将通过六个简单的步骤来构建一个时尚的响应式咖啡店网站。
响应式咖啡网站应该具备
我们将构建一个简洁时尚的咖啡店网站,该网站可以适应不同的屏幕尺寸。网站将包括
- 一个具有醒目欢迎信息的英雄区域。
- 一个展示几种咖啡选项及其描述的产品区域。
- 一个用于用户咨询的联系表单。
- 响应式设计,使网站在台式机和移动屏幕上都能显示良好。
理解响应式网页设计
响应式设计意味着网站布局会自动调整以适应不同的屏幕尺寸。对于这个咖啡网站,我们将使用CSS媒体查询来确保我们的网站布局在较小的屏幕(例如手机)上平滑地变化。
图像资源
为了创建一个视觉上吸引人的咖啡网站,我们需要几张图片
- 英雄区域图片:coffee-hero.jpg - 英雄区域的全宽、醒目的咖啡图片。
- 产品图片:coffee1.jpg、coffee2.jpg和coffee3.jpg - 产品区域中显示的各种咖啡类型(如浓缩咖啡、拿铁和卡布奇诺)的图片。
咖啡网站的HTML结构
让我们从基本的HTML结构开始。我们将在HTML文件中创建一个英雄区域、一个产品区域和一个联系区域。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Responsive Coffee Website</title>
<link rel="stylesheet" href="style.css">
<script>
document.addEventListener("DOMContentLoaded", function() {
const faders = document.querySelectorAll(".about, .products, .contact");
const appearOptions = {
threshold: 0.2, // Trigger when 20% of the section is in view
rootMargin: "0px 0px -100px 0px"
};
const appearOnScroll = new IntersectionObserver(function(entries, appearOnScroll) {
entries.forEach(entry => {
if (!entry.isIntersecting) {
return;
} else {
entry.target.classList.add("appear");
appearOnScroll.unobserve(entry.target);
}
});
}, appearOptions);
faders.forEach(fader => {
appearOnScroll.observe(fader);
});
});
</script>
</head>
<body>
<!-- Header Section -->
<header>
<div class="container">
<h1 class="logo">CoffeeHouse</h1>
<nav>
<ul class="nav-links">
<li><a href="#home">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#products">Products</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
</div>
</header>
<!-- Hero Section -->
<section id="home" class="hero">
<div class="container hero-content">
<div class="hero-text">
<h2>Welcome to CoffeeHouse</h2>
<p>Experience the rich aroma and flavors of our carefully selected beans.</p>
<a href="#products" class="btn">Shop Now</a>
</div>
</div>
</section>
<!-- About Section -->
<section id="about" class="about">
<div class="container">
<h2>About Us</h2>
<p>At CoffeeHouse, we believe in providing the best coffee experience. Our beans are sourced from the finest farms around the world and roasted to perfection to deliver a bold, smooth taste with every sip.</p>
</div>
</section>
<!-- Products Section -->
<section id="products" class="products">
<div class="container">
<h2>Our Products</h2>
<div class="product-list">
<div class="product">
<img src="img/coffee1.jpg" alt="Espresso">
<h3>Espresso</h3>
<p>A rich and intense coffee experience.</p>
</div>
<div class="product">
<img src="img/coffee2.jpg" alt="Latte">
<h3>Latte</h3>
<p>A smooth and creamy delight.</p>
</div>
<div class="product">
<img src="img/coffee3.png" alt="Cappuccino">
<h3>Cappuccino</h3>
<p>The perfect blend of coffee and foam.</p>
</div>
</div>
</div>
</section>
<!-- Contact Section -->
<section id="contact" class="contact">
<div class="container">
<h2>Contact Us</h2>
<p>Got questions? We'd love to hear from you!</p>
<a href="mailto:info@coffeehouse.com" class="btn">Email Us</a>
</div>
</section>
<!-- Footer Section -->
<footer>
<div class="container">
<p>© 2024 CoffeeHouse. All rights reserved.</p>
</div>
</footer>
</body>
</html>
用于样式和响应式的CSS
在我们的CSS文件中,我们将应用样式以使网站看起来简洁。我们还将添加媒体查询以使布局适应较小的屏幕。
/* Basic Reset */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Arial, sans-serif;
}
body {
line-height: 1.6;
color: #333;
}
html {
scroll-behavior: smooth;
}
/* Container */
.container {
width: 90%;
max-width: 1200px;
margin: auto;
}
/* Header */
header {
background-color: #333;
color: #fff;
padding: 10px 0;
position: fixed;
width: 100%;
top: 0;
z-index: 10;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
animation: fadeIn 1.2s cubic-bezier(0.4, 0.0, 0.2, 1) forwards;
}
header .container {
display: flex;
align-items: center;
justify-content: space-between;
}
header .logo {
font-size: 24px;
font-weight: bold;
text-transform: uppercase;
}
header nav ul {
list-style-type: none;
display: flex;
gap: 20px;
}
header nav ul li a {
color: #fff;
text-decoration: none;
padding: 5px 10px;
border-radius: 5px;
transition: background 0.3s;
}
header nav ul li a:hover {
background-color: #f0a500;
}
/* Hero Section */
.hero {
background: url('img/coffee-hero.jpg') no-repeat center center/cover;
height: 80vh;
color: #fff;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
position: relative;
overflow: hidden;
clip-path: ellipse(100% 60% at 50% 40%);
}
.hero-content {
display: flex;
align-items: center;
justify-content: center;
gap: 20px;
max-width: 1200px;
width: 100%;
}
.hero-text {
max-width: 50%;
text-align: left;
animation: fadeIn 1.8s cubic-bezier(0.4, 0.0, 0.2, 1) forwards;
animation-delay: 0.5s;
animation-fill-mode: backwards;
}
.hero h2 {
font-size: 42px;
font-weight: bold;
}
.hero p {
margin: 10px 0 20px;
font-size: 18px;
}
.hero .btn {
background-color: #f0a500;
color: #fff;
padding: 10px 20px;
text-decoration: none;
border-radius: 50px;
transition: background 0.3s, transform 0.3s;
}
.hero .btn:hover {
background-color: #e89b00;
transform: scale(1.05);
}
.btn {
background-color: #f0a500;
color: #fff;
padding: 10px 20px;
text-decoration: none;
border-radius: 50px;
transition: transform 0.5s cubic-bezier(0.4, 0.0, 0.2, 1), background-color 0.5s cubic-bezier(0.4, 0.0, 0.2, 1);
}
.btn:hover {
background-color: #e89b00;
transform: scale(1.05);
}
/* Coffee Bag Image Styling */
.hero-image {
max-width: 40%;
display: flex;
justify-content: center;
}
.hero-image img {
width: 100%;
max-width: 300px;
border-radius: 8px;
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);
transition: transform 0.3s;
animation: scaleUp 1.8s cubic-bezier(0.4, 0.0, 0.2, 1) forwards;
animation-delay: 0.7s;
animation-fill-mode: backwards;
}
.hero-image img:hover {
transition: transform 0.5s cubic-bezier(0.4, 0.0, 0.2, 1);
transform: scale(1.05);
}
/* Responsive Design for Hero Section */
@media (max-width: 768px) {
.hero-content {
flex-direction: column;
text-align: center;
}
.hero-text, .hero-image {
max-width: 100%;
}
.hero h2 {
font-size: 32px;
}
.hero p {
font-size: 16px;
}
}
/* About Section with cool shape */
.about {
padding: 60px 0;
text-align: center;
background-color: #fff;
clip-path: polygon(0 15%, 100% 0, 100% 85%, 0% 100%);
margin-top: -80px;
z-index: 1;
opacity: 0;
animation: fadeIn 1.8s cubic-bezier(0.4, 0.0, 0.2, 1) forwards;
animation-delay: 0.5s;
}
.about h2 {
font-size: 32px;
margin-bottom: 20px;
color: #f0a500;
}
.about p {
max-width: 700px;
margin: auto;
font-size: 18px;
}
/* Products Section */
/* Products Section */
.products {
padding: 60px 0;
text-align: center;
}
.products h2 {
font-size: 36px;
margin-bottom: 40px;
color: #333;
}
.product-list {
display: flex;
gap: 20px;
justify-content: center;
flex-wrap: wrap;
}
.product {
width: 280px;
padding: 20px;
border-radius: 10px;
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease, box-shadow 0.3s ease;
background-color: #fff;
cursor: pointer;
overflow: hidden;
text-align: center;
}
.product img {
width: 100%;
height: auto;
border-radius: 10px;
transition: transform 0.3s ease;
}
.product h3 {
font-size: 24px;
color: #333;
margin: 15px 0 5px;
transition: color 0.3s ease;
}
.product p {
color: #666;
font-size: 16px;
transition: color 0.3s ease;
}
/* Hover Effects */
.product:hover {
transform: translateY(-10px) scale(1.03);
/* Lift and scale effect */
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.2);
/* Stronger shadow on hover */
}
.product:hover img {
transform: scale(1.1);
/* Slight zoom effect on image */
}
.product:hover h3 {
color: #e89b00;
/* Change text color on hover */
}
.product:hover p {
color: #444;
/* Darken text color on hover */
}
/* Contact Section */
.contact {
padding: 40px 0;
text-align: center;
background-color: #333;
color: #fff;
position: relative;
clip-path: ellipse(100% 90% at 50% 10%);
opacity: 0;
animation: fadeIn 1.8s cubic-bezier(0.4, 0.0, 0.2, 1) forwards;
animation-delay: 0.3s;
}
.contact h2 {
font-size: 32px;
margin-bottom: 20px;
color: #f0a500;
}
.contact p {
font-size: 18px;
}
.contact .btn {
background-color: #f0a500;
color: #fff;
padding: 10px 20px;
text-decoration: none;
border-radius: 50px;
transition: background 0.3s, transform 0.3s;
}
.contact .btn:hover {
background-color: #e89b00;
transform: scale(1.05);
}
/* Footer */
footer {
background-color: #222;
color: #fff;
padding: 10px 0;
text-align: center;
font-size: 14px;
}
/* Responsive Design */
@media (max-width: 768px) {
header .container {
flex-direction: column;
}
header nav ul {
flex-direction: column;
gap: 10px;
}
.product-list {
flex-direction: column;
}
.hero h2 {
font-size: 32px;
}
.hero p {
font-size: 16px;
}
}
/* Fade-in Animation */
@keyframes fadeIn {
0% {
opacity: 0;
transform: translateY(40px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
/* Slide-in Animation */
@keyframes slideIn {
0% {
opacity: 0;
transform: translateX(-40px);
}
100% {
opacity: 1;
transform: translateX(0);
}
}
/* Scale Animation */
@keyframes scaleUp {
0% {
transform: scale(0.8);
opacity: 0;
}
100% {
transform: scale(1);
opacity: 1;
}
}
/* Sections that fade in on scroll */
.about, .products, .contact {
opacity: 0;
transform: translateY(40px);
transition: opacity 1.8s cubic-bezier(0.4, 0.0, 0.2, 1), transform 1.8s cubic-bezier(0.4, 0.0, 0.2, 1);
}
.appear {
opacity: 1;
transform: translateY(0);
}
网站各部分的解释
这个咖啡网站被组织成几个关键部分,每个部分都旨在增强用户体验并引导访问者浏览网站。
页眉和英雄区域
- 页眉包含徽标和导航链接,允许用户跳转到页面的不同部分,例如“产品”和“联系”。
- 英雄区域包含一个全宽背景图片(coffee-hero.jpg),展示了一张视觉上醒目的咖啡图片,并以大型友好的标题和简短的标语欢迎用户。
关于部分
- 此可选部分提供了对咖啡店的简短描述。这是一个介绍咖啡店独特之处或特色产品的机会,从而与访客建立个人联系。
产品部分
此部分显示精选的咖啡产品,例如浓缩咖啡、拿铁和卡布奇诺,每个产品都配有图片和描述。
- 网格布局:在台式机屏幕上,产品以网格形式排列,这使每个产品都具有相同的可见性,并使布局简洁有序。
- 响应式布局:在较小的屏幕(如移动设备)上,网格布局切换为单列格式,使图像和文本更易于查看。
联系部分
- 联系部分包含一个表单,供用户在有疑问或想联系时填写。
- 该表单通常包括“姓名”、“电子邮件”和“消息”等字段,以及一个用于发送消息的号召性用语按钮。此部分鼓励用户互动,并可以帮助咖啡店收集咨询。
页脚部分
- 页脚包含简单的版权信息,使网站具有专业的完成度。
- 您也可以在此处添加指向社交媒体个人资料或联系信息的链接。
完整代码(HTML和CSS)
以下是我们咖啡网站的完整代码,结合了上面各部分的HTML和CSS代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Responsive Coffee Website</title>
<!-- <link rel="stylesheet" href="style.css"> -->
<style>
/* Basic Reset */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Arial, sans-serif;
}
body {
line-height: 1.6;
color: #333;
}
html {
scroll-behavior: smooth;
}
/* Container */
.container {
width: 90%;
max-width: 1200px;
margin: auto;
}
/* Header */
header {
background-color: #333;
color: #fff;
padding: 10px 0;
position: fixed;
width: 100%;
top: 0;
z-index: 10;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
animation: fadeIn 1.2s cubic-bezier(0.4, 0.0, 0.2, 1) forwards;
}
header .container {
display: flex;
align-items: center;
justify-content: space-between;
}
header .logo {
font-size: 24px;
font-weight: bold;
text-transform: uppercase;
}
header nav ul {
list-style-type: none;
display: flex;
gap: 20px;
}
header nav ul li a {
color: #fff;
text-decoration: none;
padding: 5px 10px;
border-radius: 5px;
transition: background 0.3s;
}
header nav ul li a:hover {
background-color: #f0a500;
}
/* Hero Section */
.hero {
background: url('img/coffee-hero.jpg') no-repeat center center/cover;
height: 80vh;
color: #fff;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
position: relative;
overflow: hidden;
clip-path: ellipse(100% 60% at 50% 40%);
}
.hero-content {
display: flex;
align-items: center;
justify-content: center;
gap: 20px;
max-width: 1200px;
width: 100%;
}
.hero-text {
max-width: 50%;
text-align: left;
animation: fadeIn 1.8s cubic-bezier(0.4, 0.0, 0.2, 1) forwards;
animation-delay: 0.5s;
animation-fill-mode: backwards;
}
.hero h2 {
font-size: 42px;
font-weight: bold;
}
.hero p {
margin: 10px 0 20px;
font-size: 18px;
}
.hero .btn {
background-color: #f0a500;
color: #fff;
padding: 10px 20px;
text-decoration: none;
border-radius: 50px;
transition: background 0.3s, transform 0.3s;
}
.hero .btn:hover {
background-color: #e89b00;
transform: scale(1.05);
}
.btn {
background-color: #f0a500;
color: #fff;
padding: 10px 20px;
text-decoration: none;
border-radius: 50px;
transition: transform 0.5s cubic-bezier(0.4, 0.0, 0.2, 1), background-color 0.5s cubic-bezier(0.4, 0.0, 0.2, 1);
}
.btn:hover {
background-color: #e89b00;
transform: scale(1.05);
}
/* Coffee Bag Image Styling */
.hero-image {
max-width: 40%;
display: flex;
justify-content: center;
}
.hero-image img {
width: 100%;
max-width: 300px;
border-radius: 8px;
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);
transition: transform 0.3s;
animation: scaleUp 1.8s cubic-bezier(0.4, 0.0, 0.2, 1) forwards;
animation-delay: 0.7s;
animation-fill-mode: backwards;
}
.hero-image img:hover {
transition: transform 0.5s cubic-bezier(0.4, 0.0, 0.2, 1);
transform: scale(1.05);
}
/* Responsive Design for Hero Section */
@media (max-width: 768px) {
.hero-content {
flex-direction: column;
text-align: center;
}
.hero-text,
.hero-image {
max-width: 100%;
}
.hero h2 {
font-size: 32px;
}
.hero p {
font-size: 16px;
}
}
/* About Section with cool shape */
.about {
padding: 60px 0;
text-align: center;
background-color: #fff;
clip-path: polygon(0 15%, 100% 0, 100% 85%, 0% 100%);
margin-top: -80px;
z-index: 1;
opacity: 0;
animation: fadeIn 1.8s cubic-bezier(0.4, 0.0, 0.2, 1) forwards;
animation-delay: 0.5s;
}
.about h2 {
font-size: 32px;
margin-bottom: 20px;
color: #f0a500;
}
.about p {
max-width: 700px;
margin: auto;
font-size: 18px;
}
/* Products Section */
/* Products Section */
.products {
padding: 60px 0;
text-align: center;
}
.products h2 {
font-size: 36px;
margin-bottom: 40px;
color: #333;
}
.product-list {
display: flex;
gap: 20px;
justify-content: center;
flex-wrap: wrap;
}
.product {
width: 280px;
padding: 20px;
border-radius: 10px;
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease, box-shadow 0.3s ease;
background-color: #fff;
cursor: pointer;
overflow: hidden;
text-align: center;
}
.product img {
width: 100%;
height: auto;
border-radius: 10px;
transition: transform 0.3s ease;
}
.product h3 {
font-size: 24px;
color: #333;
margin: 15px 0 5px;
transition: color 0.3s ease;
}
.product p {
color: #666;
font-size: 16px;
transition: color 0.3s ease;
}
/* Hover Effects */
.product:hover {
transform: translateY(-10px) scale(1.03);
/* Lift and scale effect */
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.2);
/* Stronger shadow on hover */
}
.product:hover img {
transform: scale(1.1);
/* Slight zoom effect on image */
}
.product:hover h3 {
color: #e89b00;
/* Change text color on hover */
}
.product:hover p {
color: #444;
/* Darken text color on hover */
}
/* Contact Section */
.contact {
padding: 40px 0;
text-align: center;
background-color: #333;
color: #fff;
position: relative;
clip-path: ellipse(100% 90% at 50% 10%);
opacity: 0;
animation: fadeIn 1.8s cubic-bezier(0.4, 0.0, 0.2, 1) forwards;
animation-delay: 0.3s;
}
.contact h2 {
font-size: 32px;
margin-bottom: 20px;
color: #f0a500;
}
.contact p {
font-size: 18px;
}
.contact .btn {
background-color: #f0a500;
color: #fff;
padding: 10px 20px;
text-decoration: none;
border-radius: 50px;
transition: background 0.3s, transform 0.3s;
}
.contact .btn:hover {
background-color: #e89b00;
transform: scale(1.05);
}
/* Footer */
footer {
background-color: #222;
color: #fff;
padding: 10px 0;
text-align: center;
font-size: 14px;
}
/* Responsive Design */
@media (max-width: 768px) {
header .container {
flex-direction: column;
}
header nav ul {
flex-direction: column;
gap: 10px;
}
.product-list {
flex-direction: column;
}
.hero h2 {
font-size: 32px;
}
.hero p {
font-size: 16px;
}
}
/* Fade-in Animation */
@keyframes fadeIn {
0% {
opacity: 0;
transform: translateY(40px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
/* Slide-in Animation */
@keyframes slideIn {
0% {
opacity: 0;
transform: translateX(-40px);
}
100% {
opacity: 1;
transform: translateX(0);
}
}
/* Scale Animation */
@keyframes scaleUp {
0% {
transform: scale(0.8);
opacity: 0;
}
100% {
transform: scale(1);
opacity: 1;
}
}
/* Sections that fade in on scroll */
.about,
.products,
.contact {
opacity: 0;
transform: translateY(40px);
transition: opacity 1.8s cubic-bezier(0.4, 0.0, 0.2, 1), transform 1.8s cubic-bezier(0.4, 0.0, 0.2, 1);
}
.appear {
opacity: 1;
transform: translateY(0);
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
const faders = document.querySelectorAll(".about, .products, .contact");
const appearOptions = {
threshold: 0.2, // Trigger when 20% of the section is in view
rootMargin: "0px 0px -100px 0px"
};
const appearOnScroll = new IntersectionObserver(function(entries, appearOnScroll) {
entries.forEach(entry => {
if (!entry.isIntersecting) {
return;
} else {
entry.target.classList.add("appear");
appearOnScroll.unobserve(entry.target);
}
});
}, appearOptions);
faders.forEach(fader => {
appearOnScroll.observe(fader);
});
});
</script>
</head>
<body>
<!-- Header Section -->
<header>
<div class="container">
<h1 class="logo">CoffeeHouse</h1>
<nav>
<ul class="nav-links">
<li><a href="#home">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#products">Products</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</nav>
</div>
</header>
<!-- Hero Section -->
<section id="home" class="hero">
<div class="container hero-content">
<div class="hero-text">
<h2>Welcome to CoffeeHouse</h2>
<p>Experience the rich aroma and flavors of our carefully selected beans.</p>
<a href="#products" class="btn">Shop Now</a>
</div>
</div>
</section>
<!-- About Section -->
<section id="about" class="about">
<div class="container">
<h2>About Us</h2>
<p>At CoffeeHouse, we believe in providing the best coffee experience. Our beans are sourced from the finest farms around the world and roasted to perfection to deliver a bold, smooth taste with every sip.</p>
</div>
</section>
<!-- Products Section -->
<section id="products" class="products">
<div class="container">
<h2>Our Products</h2>
<div class="product-list">
<div class="product">
<img src="img/coffee1.jpg" alt="Espresso">
<h3>Espresso</h3>
<p>A rich and intense coffee experience.</p>
</div>
<div class="product">
<img src="img/coffee2.jpg" alt="Latte">
<h3>Latte</h3>
<p>A smooth and creamy delight.</p>
</div>
<div class="product">
<img src="img/coffee3.png" alt="Cappuccino">
<h3>Cappuccino</h3>
<p>The perfect blend of coffee and foam.</p>
</div>
</div>
</div>
</section>
<!-- Contact Section -->
<section id="contact" class="contact">
<div class="container">
<h2>Contact Us</h2>
<p>Got questions? We'd love to hear from you!</p>
<a href="mailto:info@coffeehouse.com" class="btn">Email Us</a>
</div>
</section>
<!-- Footer Section -->
<footer>
<div class="container">
<p>© 2024 CoffeeHouse. All rights reserved.</p>
</div>
</footer>
</body>
</html>
输出
以下是最终输出的样子。

在这篇文章中,我们使用HTML和CSS创建了一个响应式咖啡网站。我们设计了一个简洁易用的布局,其中包含英雄横幅、产品和联系表单部分,确保它在所有屏幕尺寸上都能显示良好。本项目演示了构建响应式网站的基础知识,为类似项目提供了坚实的基础。
广告
数据结构
网络
关系型数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP