first commit

This commit is contained in:
萌狼蓝天 2024-08-03 21:48:13 +08:00
commit db553270ea
11 changed files with 592 additions and 0 deletions

1
README.md Normal file
View File

@ -0,0 +1 @@
@萌狼蓝天

21
config/index.yaml Normal file
View File

@ -0,0 +1,21 @@
# config/index.yaml
# 网站标题 - 显示在浏览器标签栏中
title: "个人介绍"
# 网站图标
ico: https://q2.qlogo.cn/g?b=qq&nk=2952458479&s=100
# 背景设置
# 参数支持:
# 图片: img
# 颜色: color
# 渐变颜色: color-cg
background:
# 背景类型
bgType: color
# 如果背景类型为 img则填写图片路径
bgImg: https://www.dmoe.cc/random.php
# 如果背景类型为 color则填写颜色值例如#ffffff
bgColor: "#DDE3F1"
# 如果背景类型为 color-cg则填写渐变颜色值例如linear-gradient(135deg, #f2c3fb 0%, #a65df0 100%)
bgColorCg: "linear-gradient(135deg, #f2c3fb 0%, #a65df0 100%)"

219
css/index.bak.css Normal file
View File

@ -0,0 +1,219 @@
/*
这个文件不生效只是备份一些测试样式在这里罢了
*/
/* v3 */
/* 通用样式,现在使用 Flexbox 而不是 Grid */
.grid-container {
display: flex;
flex-wrap: wrap; /* 允许子项换行 */
gap: 1em; /* 格子之间的间距 */
/* width: 100%; */
height: auto; /* 如果需要,可以调整为 auto 或其他值 */
/* 为网格项提供一些空间以避免紧贴边缘 */
/* padding: 0.5em; */
justify-content: center; /* 或者 center根据你的需要调整 */
align-items: center; /* flex-start 或者 stretch/center/flex-end根据你的需要调整 */
}
.box_width {
display: flex;
width: 90%;
margin: 1em auto;
min-height: 400px;
align-items: center; /* 垂直居中 */
justify-content: space-between; /* 水平分布 */
padding: 0.5em; /* 为盒子提供一些空间以避免紧贴边缘 */
box-sizing: border-box;
}
.box_mini {
/* 盒子样式,主要是大小自适应的问题 */
background-color: #f0f0f0; /* 盒子背景色,可根据需要调整 */
padding: 0.5em;
box-sizing: border-box;
/* 使用百分比宽度,但设置 max-width 以限制最大宽度 */
/* 假设你想每行放 3 个 box减去间隙 */
width: calc(33.333% - 1em);
max-width: 375px; /* 最大宽度限制 */
min-width: 300px; /* 最小宽度限制 */
min-height: 350px;
}
/* 媒体查询示例,针对手机和小屏幕设备 */
@media (max-width: 768px) {
.box_mini,.box_width {
/* 在小屏幕上,你可能想要每个 box 占据整行 */
width: calc(100% - 1em); /* 减去间隙 */
min-height: 300px; /* 可选:调整小屏幕上的最小高度 */
}
}
/* 对于更大的屏幕,你也可以添加媒体查询来进一步调整样式 */
@media (min-width: 768px) {
.box_width{
/* padding: 0.5em; */
}
.box_mini {
/* 在大屏幕上的样式调整 */
/* padding: 0.5em; */
/* 注意:如果你在这里改变了 padding可能也需要调整 width 的 calc 值 */
}
}
/** v2 **/
body, html {
margin: 0;
padding: 0;
height: 100%;
width: 100%;
/* overflow: hidden; */
}
/* 应用背景 */
body {
background: var(--bg-color);
background-image: var(--bg-image);
background-size: cover;
background-position: center;
}
/* 通用样式,现在使用 Flexbox 而不是 Grid */
.grid-container {
display: flex;
flex-wrap: wrap; /* 允许子项换行 */
gap: 1em; /* 格子之间的间距 */
/* width: 100%; */
height:auto; /* 如果需要,可以调整为 auto 或其他值 */
padding: 0.5em; /* 为网格项提供一些空间以避免紧贴边缘 */
justify-content: center; /* 或者 center根据你的需要调整 */
align-items: center; /* flex-star或者 stretch/center/flex-end根据你的需要调整 */
}
.box_width{
display: flex;
width: 90%; /* 占据整个容器的宽度 */
margin: auto;
max-width: 1140px;
min-height: 400px;
align-items: center; /* 垂直居中 */
justify-content: space-between; /* 水平分布 */
padding: 0.5em; /* 为盒子提供一些空间以避免紧贴边缘 */
}
.box_mini {
/* 盒子样式,主要是大小自适应的问题 */
background-color: #f0f0f0; /* 盒子背景色,可根据需要调整 */
padding: 0.5em;
box-sizing: border-box;
/* 使用百分比宽度,但设置 max-width 以限制最大宽度 */
/* 假设你想每行放 3 个 box减去间隙 */
width: calc(33.333% - 1em);
max-width: 375px; /* 最大宽度限制 */
min-width: 300px; /* 最小宽度限制 */
min-height: 350px;
/* 注意这里使用 calc 来计算宽度时需要考虑到 gap 的影响
但是由于 gap 是在项目之间添加的并且不是项目本身的一部分
所以上面的 calc 可能需要根据你的具体布局进行调整
更简单的方法是直接设置 width 为百分比并通过媒体查询来调整不同屏幕尺寸下的宽度
*/
}
/* 媒体查询示例,针对手机和小屏幕设备 */
@media (max-width: 768px) {
.box_mini {
/* 在小屏幕上,你可能想要每个 box 占据整行 */
width: calc(100% - 1em); /* 减去间隙 */
min-height: 300px; /* 可选:调整小屏幕上的最小高度 */
}
}
/* 对于更大的屏幕,你也可以添加媒体查询来进一步调整样式 */
@media (min-width: 1200px) {
.box_mini {
/* 在大屏幕上的样式调整 */
padding: 0.5em;
/* 注意:如果你在这里改变了 padding可能也需要调整 width 的 calc 值 */
}
}
/*阴影效果*/
.shadow {
box-shadow: 0 4px 8px rgba(0,0,0,0.1); /* 水平和垂直偏移量,模糊半径,和颜色 */
}
/*背景模糊*/
.mh {
backdrop-filter: blur(10px); /* 模糊背后的内容 */
/* 为了看到模糊效果,可能需要设置背景透明 */
background-color: rgba(255, 255, 255, 0.5); /* 半透明背景 */
}
/*圆角效果*/
.round{
border-radius: 15px;
}
/** v1 **/
/* 通用样式 */
.grid-container {
display: grid;
/* 根据容器宽度自动填充列每列至少200px宽 */
grid-template-columns: repeat(auto-fill, minmax(375, 1fr));
gap: 1em; /* 格子之间的间距 */
width: 100%;
height: 100%; /* 根据需要设置高度 */
min-height: 100%;
justify-content: center; /* 确保网格项居中 */
padding: 0.5em; /* 为网格项提供一些空间以避免紧贴边缘 */
}
.box{
/*盒子样式 主要是大小自适应的问题*/
/*当存在多个盒子的时候,能以瀑布流进行排列*/
background-color: #f0f0f0; /* 盒子背景色,可根据需要调整 */
/* 其他样式如padding, margin等 */
/* margin: 1em auto; */
padding: 0.5em;
box-sizing: border-box;
width: 90%;
max-width: 375px;
min-width: 300px;
min-height: 350px;
}
/* 媒体查询示例,针对手机和小屏幕设备 */
@media (max-width: 768px) {
.grid-container {
grid-template-columns: repeat(auto-fit, minmax(100%, 1fr)); /* 在小屏幕上每行一个box */
}
.box {
/* 在小屏幕上调整样式,例如减少内边距或最小高度 */
padding: 0.5em;
min-height: 300px;
}
}
/* 对于更大的屏幕,您也可以添加媒体查询来进一步调整样式 */
@media (min-width: 1200px) {
.box {
/* 在大屏幕上的样式调整 */
padding: 1.5em;
min-height: 350px;
}
}

112
css/index.css Normal file
View File

@ -0,0 +1,112 @@
body, html {
margin: 0;
padding: 0;
height: 100%;
width: 100%;
/* overflow: hidden; */
}
/* 应用背景 */
body {
background: var(--bg-color);
background-image: var(--bg-image);
background-size: cover;
background-position: center;
}
/* 阴影效果 */
.shadow {
box-shadow: 0 4px 8px rgba(0,0,0,0.1); /* 水平和垂直偏移量,模糊半径,和颜色 */
}
/* 背景模糊 */
.mh {
backdrop-filter: blur(10px); /* 模糊背后的内容 */
/* 为了看到模糊效果,可能需要设置背景透明 */
background-color: rgba(255, 255, 255, 0.5); /* 半透明背景 */
}
/* 圆角效果 */
.round {
border-radius: 15px;
}
.container{
display: flex; /* 添加 Flex 容器 */
height: 100%;
min-height: 100vh;
flex-direction: column; /* 子元素垂直排列 */
justify-content: space-between; /* 顶部和底部的子元素之间留有足够的空间 */
}
/* 如果需要,可以为主要内容区域设置一个类名 */
.main-content {
flex-grow: 1; /* 使主要内容区域扩展以填充剩余的空间 */
}
.header{
width: 90%;
min-width: 350px;
/* 调整高度以适应剩余的空间 */
height: 50px;
margin: 16px auto;
padding: 0.5em;
box-sizing: border-box;
}
.jianjie{
display: flex;
}
.xiangmu,.wangzhan,.gongsi{
display: none;
}
.jianjie,.xiangmu,.wangzhan,.gongsi{
width: 90%;
min-width: 350px;
/* 调整高度以适应剩余的空间 */
height: 85%;
margin: 16px auto;
padding: 0.5em;
box-sizing: border-box;
/* 添加以下样式以实现内部滚动条 */
overflow-y: auto; /* 当内容超过 div 高度时显示滚动条 */
}
footer {
width: 100%;
height: 2.5em;
padding: 0.5em;
font-size: 16px;
box-sizing: border-box;
text-align: center;
}
footer a{
outline: none;
color: black;
text-decoration: none;
}
footer a:hover{
color: rgb(62, 173, 238);
}
.box-profile{
display: flex;
/* margin: 1em auto; */
align-items: center; /* 垂直居中 */
height: 100px;
}
.profile{
margin-left: 1em;
width: 50px;
height: 50px;
border-radius: 50px;
}
.profile-about{
margin: 0;
padding: 0;
}
.profile-name{
font-size:20px;
margin: 0;
font-weight: bold;
}
.profile-text{
margin-left: 0.5em;
}

41
css/menu.css Normal file
View File

@ -0,0 +1,41 @@
.menu-container {
display: flex;
justify-content: center;
align-items: center;
gap: 10px;
}
.menu {
border-radius: 5px;
padding: 6px 10px;
/* border: 1px solid rgba(0, 0, 0, 0.5); */
color:white;
background-color: rgba(0, 0, 0, 0.8);
cursor: pointer;
}
.menu:hover{
color:rgba(0, 0, 0, 0.8);
background-color: rgba(255, 255, 255, 0.8);
}
/* 响应式设计 - 当屏幕宽度小于等于 768px 时,隐藏菜单并显示折叠按钮 */
@media (max-width: 768px) {
/* .menu-container {
display: none;
}
*/
.menu-icon {
display: flex;
flex-direction: column;
justify-content: space-around;
width: 30px;
height: 20px;
cursor: pointer;
}
/* .menu-icon span {
display: block;
width: 100%;
height: 2px;
background-color: black;
} */
}

101
index.html Normal file
View File

@ -0,0 +1,101 @@
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Loading...</title>
<link rel="icon" type="image/png" href="default.png">
<script src="https://unpkg.com/js-yaml"></script>
<script src="/script/log.js"></script>
<script src="/script/bacggroundSetting.js"></script>
<link href="css/index.css" rel="stylesheet" type="text/css">
<script src="/script/IcoSetting.js"></script>
<link href="css/menu.css" rel="stylesheet" type="text/css">
<script src="/script/menu.js"></script>
</head>
<body>
<div class="container">
<div class="main-content">
<div class="header shadow mh round">
<!--
<div class="menu-icon" id="menu-icon">
<span></span>
<span></span>
<span></span>
</div>
-->
<nav class="menu-container">
<div class="menu" data-menu="简介">简 介</div>
<div class="menu" data-menu="项目">项 目</div>
<div class="menu" data-menu="网站">网 站</div>
<div class="menu" data-menu="公司">公 司</div>
</nav>
</div>
<div class="jianjie shadow mh round">
<div class="box-profile">
<div>
<img src="https://q2.qlogo.cn/g?b=qq&nk=2952458479&s=100" alt="" class="profile">
</div>
<div class="profile-text">
<p class="profile-name">萌狼蓝天</p>
<span class="profile-about"> 乖乖狼科技首席技术官</span>
</div>
</div>
</div>
<div class="xiangmu shadow mh round">
2
</div>
<div class="wangzhan shadow mh round">
3
</div>
<div class="gongsi shadow mh round">
4
</div>
<div class="boxs">
<div class="box">
</div>
</div>
</div>
<footer class="shadow mh">
<a href="https://beian.miit.gov.cn/#/Integrated/index">渝ICP备2020015002号</a>
|
<a href="https://www.mllt.cc">乖乖狼科技</a>
</footer>
</div>
</body>
<script>
document.addEventListener('DOMContentLoaded', function() {
fetch('config/index.yaml')
.then(response => response.text())
.then(text => {
log("开始加载配置...")
const config = jsyaml.load(text);
//设置标题
document.title = config.title;
//设置网站图标
setHTMLIco(config.ico)
//设置背景
setBodyBackground(config.background);
//读入内容配置
log("配置加载完毕","green","SUCESS")
})
.catch(error => console.error('Error:', error));
});
</script>
</html>

7
script/IcoSetting.js Normal file
View File

@ -0,0 +1,7 @@
function setHTMLIco(url){
var link = document.createElement('link');
link.type = 'image/x-icon';
link.rel = 'icon';
link.href = url; // favicon的URL
document.getElementsByTagName('head')[0].appendChild(link);
}

View File

@ -0,0 +1,23 @@
//读取配置文件中的网站背景图片设置并处理
function setBodyBackground(config) {
const bgType = config.bgType;
log("当前背景模式:"+bgType)
switch (bgType) {
case 'color':
document.body.style.setProperty('--bg-color', config.bgColor);
log("设置背景颜色:"+config.bgColor)
break;
case 'colorCg':
document.body.style.setProperty('--bg-color', config.bgColorCg);
//todo
//直接显示太突兀了 考虑下要不要增加模糊效果
break;
case 'img':
document.body.style.setProperty('--bg-image', `url(${config.bgImg})`);
break;
default:
log('未知的背景类型:'+ bgType);
}
}

0
script/index.js Normal file
View File

9
script/log.js Normal file
View File

@ -0,0 +1,9 @@
function log(message, color = 'blue', type = 'INFO') {
const now = new Date();
const dateStr = `[${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}]`;
const timeStr = `[${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}]`;
const prefix = `${dateStr}${timeStr}[${type}] `;
const fullMessage = `${prefix}${message}`;
const style = `color: ${color}; font-weight: bold;`;
console.log(`%c${fullMessage}`, style);
}

58
script/menu.js Normal file
View File

@ -0,0 +1,58 @@
// document.addEventListener('DOMContentLoaded', function() {
// const menuIcon = document.getElementById('menu-icon');
// const menuContainer = document.querySelector('.menu-container');
// const header = document.querySelector('.header');
// const menu = document.querySelector('.menu');
// menuIcon.addEventListener('click', function() {
// if (menuContainer.style.display === "none") {
// menuContainer.style.display = "flex";
// menuContainer.style.height="100px"
// header.style.height="100px"
// menu.style.width="100%"
// menuContainer.style.flexDirection = "column"
// } else {
// menuContainer.style.display = "none";
// header.style.height="50px"
// }
// });
// });
// 获取所有的.menu元素
document.addEventListener('DOMContentLoaded', function() {
const menus = document.querySelectorAll('.menu');
// 遍历所有.menu元素并添加点击事件监听器
menus.forEach(menu => {
menu.addEventListener('click', function() {
// 获取被点击的菜单的数据属性值
const menuName = this.getAttribute('data-menu');
const menuText = this.textContent;
const jianjie= document.querySelector('.jianjie')
const xiangmu= document.querySelector('.xiangmu')
const wangzhan= document.querySelector('.wangzhan')
const gongsi= document.querySelector('.gongsi')
if(menuText==="简 介"){
jianjie.style.display="flex"
xiangmu.style.display="none"
wangzhan.style.display="none"
gongsi.style.display="none"
}else if(menuText==="项 目"){
jianjie.style.display="none"
xiangmu.style.display="flex"
wangzhan.style.display="none"
gongsi.style.display="none"
}else if(menuText==="网 站"){
jianjie.style.display="none"
xiangmu.style.display="none"
wangzhan.style.display="flex"
gongsi.style.display="none"
}else if(menuText==="公 司"){
jianjie.style.display="none"
xiangmu.style.display="none"
wangzhan.style.display="none"
gongsi.style.display="flex"
}
});
})
})