卡片式布局通过border-radius和box-shadow实现立体感与圆角效果,结合hover交互与响应式设计,提升视觉层次与用户体验。

卡片式布局,说到底就是给一个容器加上一点立体感和柔和的边缘。CSS里,这主要通过
box-shadow
border-radius
div
要实现一个基础的卡片效果,我们通常会给一个
div
border-radius
box-shadow
<div class="card-container">
<div class="card">
<h3 class="card-title">精选文章标题</h3>
<p class="card-content">
这篇内容简述了卡片式布局的核心理念,以及如何通过CSS的几个关键属性来快速构建它们。
我们追求的不仅仅是功能,更是用户体验上的美观与舒适。
</p>
<a href="#" class="card-link">阅读全文 →</a>
</div>
<div class="card">
<h3 class="card-title">项目展示卡片</h3>
<p class="card-content">
这里可以放一些项目的简介,比如技术栈、完成时间等。卡片是展示小块信息的绝佳载体。
</p>
<a href="#" class="card-link">查看项目 →</a>
</div>
</div>/* 容器,用于排列多张卡片 */
.card-container {
display: flex;
flex-wrap: wrap; /* 允许卡片换行 */
gap: 25px; /* 卡片之间的间距 */
justify-content: center; /* 居中对齐卡片 */
padding: 30px;
background-color: #f5f7fa; /* 稍微深一点的背景,让卡片更突出 */
}
/* 核心卡片样式 */
.card {
background-color: #ffffff; /* 卡片背景色 */
border-radius: 12px; /* 柔和的圆角,我通常喜欢用8px到12px之间 */
box-shadow: 0 6px 15px rgba(0, 0, 0, 0.08); /* 关键的阴影,轻微的Y轴偏移和模糊 */
padding: 25px;
margin: 0; /* 间距由容器的gap控制 */
width: calc(33% - 25px); /* 假设一行三张卡片,减去间距 */
min-width: 280px; /* 最小宽度,防止过窄 */
box-sizing: border-box; /* 确保padding和border不增加元素总宽度 */
text-align: left; /* 文本左对齐 */
transition: transform 0.3s ease, box-shadow 0.3s ease; /* 增加交互动画 */
}
.card:hover {
transform: translateY(-8px); /* 鼠标悬停时轻微上浮,增加立体感 */
box-shadow: 0 12px 25px rgba(0, 0, 0, 0.15); /* 阴影加深,更突出 */
}
.card-title {
font-size: 1.5em;
color: #333;
margin-bottom: 10px;
}
.card-content {
font-size: 0.95em;
color: #666;
line-height: 1.6;
margin-bottom: 20px;
}
.card-link {
display: inline-block;
color: #007bff;
text-decoration: none;
font-weight: bold;
transition: color 0.2s ease;
}
.card-link:hover {
color: #0056b3;
}
/* 响应式调整 */
@media (max-width: 768px) {
.card {
width: calc(50% - 25px); /* 两张卡片一行 */
}
}
@media (max-width: 480px) {
.card {
width: 100%; /* 单张卡片一行 */
}
}box-shadow
box-shadow
h-offset
v-offset
blur-radius
spread-radius
color
inset
在我看来,掌握阴影的关键在于理解光线的方向。一个好的阴影能暗示光线从哪里来,从而赋予元素真实的立体感。
立即学习“前端免费学习笔记(深入)”;
h-offset
v-offset
h-offset
v-offset
blur-radius
0 6px 15px
15px
6px
spread-radius
color
rgba
rgba(0, 0, 0, 0.1)
inset
高级应用:多层阴影
box-shadow
.card-advanced-shadow {
/* 第一层:模拟近距离、更实体的阴影 */
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.07),
/* 第二层:模拟远距离、更扩散、更模糊的阴影 */
0 10px 20px rgba(0, 0, 0, 0.12);
border-radius: 10px;
background-color: #fff;
padding: 20px;
}这种多层阴影的组合,能让卡片在视觉上拥有更丰富的层次感,避免了单层阴影可能带来的扁平感。不过,也要注意,阴影越多,对性能的开销可能就越大,所以要适度。
border-radius
border-radius
首先,最基础的用法是给所有角设置一个统一的半径,比如
border-radius: 8px;
top-left
top-right
bottom-right
bottom-left
border-radius: 10px 20px 30px 40px;
/
border-radius: 10px / 20px;
我个人比较喜欢用百分比来设置
border-radius
border-radius: 50%;
/* 胶囊形卡片 */
.pill-card {
border-radius: 9999px; /* 或者一个足够大的值,比如50% */
background-color: #e0f7fa;
padding: 10px 25px;
display: inline-block; /* 保持宽度适应内容 */
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);
}
/* 底部圆角,顶部直角卡片 */
.bottom-rounded-card {
border-radius: 0 0 15px 15px; /* 只有左下和右下角有圆角 */
background-color: #fff;
padding: 20px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.07);
}常见陷阱和注意事项:
border-radius
overflow: hidden;
.card-with-image {
border-radius: 10px;
overflow: hidden; /* 确保内部图片也被圆角剪裁 */
/* 其他卡片样式 */
}
.card-with-image img {
width: 100%;
height: auto;
display: block;
}border-radius
border-radius: 50%;
border-radius
box-shadow
仅仅把卡片做得好看是不够的,它还得“活”起来,并且对所有用户都友好。这主要体现在过渡动画和无障碍设计上。
过渡动画 (transition
让卡片在鼠标悬停时有所反馈,是提升用户体验的绝佳方式。一个微小的上浮、阴影加深或者背景色变化,都能让用户感受到元素的“可交互性”。我通常会给
transform
box-shadow
.card {
/* ...之前的样式... */
transition: transform 0.3s ease-out, box-shadow 0.3s ease-out; /* 注意使用ease-out,效果更自然 */
}
.card:hover {
transform: translateY(-8px) scale(1.02); /* 稍微上浮并放大一点点 */
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.2); /* 阴影加深且范围更大 */
}这里的
ease-out
ease
hover
active
无障碍设计 (Accessibility)
卡片布局在视觉上很吸引人,但在无障碍设计方面,我们不能只停留在视觉层面。我们需要确保使用屏幕阅读器的用户、键盘导航用户以及有其他辅助需求的用户也能顺畅地理解和操作卡片内容。
语义化HTML: 如果卡片是可点击的,应该使用
<a>
article
section
role="region"
role="article"
<!-- 推荐的可点击卡片结构 -->
<a href="#" class="card-link-wrapper">
<div class="card">
<h3>可点击卡片标题</h3>
<p>卡片内容。</p>
</div>
</a>或者,如果卡片内部有多个可交互元素,确保它们的焦点顺序是逻辑的。
键盘导航: 确保用户可以使用
Tab
<a>
<button>
tabindex
颜色对比度: 卡片内部的文本颜色与背景色之间必须有足够的对比度,以符合WCAG(Web内容无障碍指南)标准。这对于视力障碍用户至关重要。可以使用在线工具检查颜色对比度,确保其达到AA或AAA级别。
焦点指示器: 当用户通过键盘导航到卡片或卡片内的元素时,必须有清晰的视觉焦点指示(通常是浏览器默认的
outline
outline
这些无障碍的考量,虽然可能不会直接影响卡片的外观,但它们决定了你的网站是否真正对所有人都开放。一个真正优秀的Web设计师,不仅要让页面看起来漂亮,更要让它用起来方便、高效。
以上就是CSS容器如何实现卡片式布局?通过box-shadow和border-radius打造卡片效果的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号