80 lines
2.5 KiB
Vue
Raw Permalink Normal View History

2025-09-11 10:55:59 +08:00
<template>
<section class="relative text-white">
<!-- 背景图层 - 确保完全填充整个红色区域 -->
<div class="absolute inset-0 bg-cover bg-center bg-no-repeat w-full h-full"
:style="bgImage ? `background-image: url('${bgImage}')` : ''"
></div>
<!-- 轻微遮罩确保文字可读性 -->
<div class="absolute inset-0 bg-black/10"></div>
<div class="container relative z-10 h-full flex items-center justify-end">
<!-- 调整移动端和桌面端的宽度保持布局结构 -->
<div class="w-full md:w-3/5 lg:w-2/5 flex flex-col items-center md:items-end pt-12 px-6 md:px-0">
<div class="text-center md:text-right">
<!-- 参考图片标题样式 -->
<h1 class="text-3xl sm:text-4xl md:text-5xl font-bold mb-1 text-white">
<span class="transition-opacity duration-300 ease-in-out">{{ title || (titleKey ? $t(titleKey) : '') }}</span>
</h1>
<!-- 副标题样式调整字体更小颜色改为蓝色添加加粗 -->
<p class="text-base sm:text-lg md:text-lg text-blue-500 mb-1 font-semibold">
<span class="transition-opacity duration-300 ease-in-out">{{ subtitle || (subtitleKey ? $t(subtitleKey) : '') }}</span>
</p>
<!-- 描述文本样式调整为细字体 -->
<p v-if="descriptionKey" class="text-sm sm:text-base text-white mb-5 font-light tracking-wide max-w-md mx-auto md:mx-0 text-left">
<span class="transition-opacity duration-300 ease-in-out">{{ $t(descriptionKey) }}</span>
</p>
<!-- 按钮布局保持不变 -->
<div class="flex flex-col sm:flex-row gap-3 justify-center md:justify-end">
<slot></slot>
</div>
</div>
</div>
</div>
</section>
</template>
<script setup lang="ts">
defineProps<{
title?: string;
subtitle?: string;
titleKey?: string;
subtitleKey?: string;
descriptionKey?: string;
bgImage?: string;
}>();
</script>
<style scoped>
/* 添加淡入淡出效果,语言切换时更平滑 */
.transition-opacity {
transition: opacity 0.3s ease;
}
:deep([i18n-in-progress]) .transition-opacity {
opacity: 0;
}
/* 确保Banner高度与设计图一致移动端更小 */
section {
height: 450px;
}
/* 移除文字阴影,符合参考图 */
h1, p {
text-shadow: none;
}
/* 移动端响应式高度和内容调整 */
@media (max-width: 768px) {
section {
height: 400px;
}
}
@media (max-width: 640px) {
section {
height: 350px;
}
}
</style>