Browse Source

样式修改

main
jack 4 days ago
parent
commit
69755ac7df
  1. 25
      src/views/withmind/assets/index.rem.css
  2. 124
      src/views/withmind/index.vue

25
src/views/withmind/assets/index.rem.css

@ -48,8 +48,6 @@ html {
width: 1.814rem;
height: 0.694rem;
overflow-wrap: break-word;
/* color: rgba(25, 140, 255, 1) 已改:不再固定蓝色,
改用 .nav-active 类由 scroll-spy 控制高亮(滚动到对应 section 才变蓝) */
color: rgba(22, 22, 22, 1);
font-size: 0.48rem;
font-family: Source Han Sans CN-Medium;
@ -57,7 +55,7 @@ html {
text-align: right;
white-space: nowrap;
line-height: 0.694rem;
/* 比照 newcss:.text_1(首页)margin-left 12.294rem;用户微调 → 11.3rem(再右移 0.3rem) */
/* margin-left 11.3rem,比照 newcss .text_1 */
margin: 0.72rem 0 0 11.3rem;
}
@ -120,7 +118,7 @@ html {
/* footer 新增的"应用实践"项:跟其他 footer nav-link 字体一致 */
.text_nav_practice_footer {
/* 比照 newcss .text_34:width 2.134rem(原 1.92rem,跟其他 4 个镜像标题宽度一致) */
/* width 2.134rem,比照 newcss .text_34 */
width: 2.134rem;
height: 0.694rem;
overflow-wrap: break-word;
@ -195,8 +193,6 @@ html {
white-space: nowrap;
line-height: 1.6rem;
vertical-align: middle;
/* margin-right: 0.293rem 已删:导致"关于""WithMind"间距过大,
改用 HTML 里的   控制间距(更精确) */
}
.text_7 {
@ -210,7 +206,7 @@ html {
源图宽高比 7.44:1,显示比例保持一致 */
width: 8rem;
height: 1.067rem;
margin-left: 0.187rem;
margin: 0.1rem 0 0 0.187rem;
vertical-align: middle;
display: inline-block;
image-rendering: -webkit-optimize-contrast;
@ -296,7 +292,6 @@ html {
overflow-wrap: break-word;
color: rgba(153, 153, 153, 1);
font-size: 0.426rem;
letter-spacing: -0.5px;
font-family: Source Han Sans CN-Regular;
font-weight: 400;
text-align: center;
@ -370,7 +365,6 @@ html {
overflow-wrap: break-word;
color: rgba(153, 153, 153, 1);
font-size: 0.426rem;
letter-spacing: -0.5px;
font-family: Source Han Sans CN-Regular;
font-weight: 400;
text-align: center;
@ -430,7 +424,6 @@ html {
overflow-wrap: break-word;
color: rgba(153, 153, 153, 1);
font-size: 0.426rem;
letter-spacing: -0.5px;
font-family: Source Han Sans CN-Regular;
font-weight: 400;
text-align: center;
@ -490,7 +483,6 @@ html {
overflow-wrap: break-word;
color: rgba(153, 153, 153, 1);
font-size: 0.426rem;
letter-spacing: -0.5px;
font-family: Source Han Sans CN-Regular;
font-weight: 400;
text-align: center;
@ -499,7 +491,6 @@ html {
}
.image-wrapper_5 {
/* 原 background-color: rgba(249, 250, 252, 1) 已删除:会让 Skills 段视觉发蓝 */
height: 24.507rem;
margin-top: 3.2rem;
width: 51.2rem;
@ -600,7 +591,7 @@ html {
.group_10 {
width: 38.054rem;
height: 13.36rem;
margin: 3.2rem 0 0 5.434rem; /* 左移 0.5+0.3+0.3+0.2+0.2rem(共 1.5rem,原 6.934rem) */
margin: 3.2rem 0 0 5.434rem;
}
.image_9 {
@ -1268,15 +1259,12 @@ html {
.group_23 {
width: 37.12rem;
height: 6.267rem;
/* 用户要求整体左移让下方 5 列文字对齐顶部 5 个镜像标题:
左移 0.3rem 后再回退 0.1rem(6.134 6.234rem), newcss 原版 6.934rem 仍左移 0.7rem */
margin: 0.56rem 0 0 6.234rem;
}
.group_24 {
width: 15.947rem;
height: 6.054rem;
/* 描述区再右移 0.2rem(原 0.6rem → 0.8rem) */
margin: 0.214rem 0 0 0.8rem;
}
@ -1482,7 +1470,6 @@ html {
font-size: 0.48rem;
font-family: Source Han Sans CN-Regular;
font-weight: NaN;
/* 原 text-align: right 已改:left 对齐"文档"两字 */
text-align: left;
line-height: 0.96rem;
margin-top: 0.427rem;
@ -2103,3 +2090,7 @@ html {
height: 8.747rem;
}
.text_nav_practice.nav-active {
color: rgba(25, 140, 255, 1) !important;
}

124
src/views/withmind/index.vue

@ -534,7 +534,7 @@
/>
</div>
<div class="section_12 flex-row">
<div class="box_16 flex-row">
<div class="box_16 flex-row" @click="onLearnMore">
<div class="image-text_8 flex-row justify-between">
<span class="text-group_17">了解更多</span>
<div class="image-wrapper_16 flex-col">
@ -556,29 +556,21 @@ export default {
data() {
return {
constants: {},
activeSection: 'top' /* 当前高亮的 nav 对应的 section id */
activeSection: 'top',
scrollLocked: false
};
},
mounted() {
this.initScrollSpy();
},
methods: {
/* scroll-spy: Vue data(activeSection) nav-link :class
关键设计:点击 nav-link ,锁定 activeSection = id,屏蔽一切自动 update,
直到平滑滚动结束再校准这样彻底避免"点击瞬间设的 activeSection
IO/scroll 回调里的 compute() 改掉"的竞态 */
initScrollSpy() {
const sectionIds = ['about', 'skills', 'platform', 'agent', 'media', 'practice', 'gateway'];
// compute:section 50%("section 线")
// about ~144px :
// skills ,skills 260px < 375px(50% vh),platform > 375 skills
// about 116px 375, for , skills
const compute = () => {
const scrollY = window.scrollY || window.pageYOffset || 0;
if (scrollY < 100) return 'top';
const vh = window.innerHeight || document.documentElement.clientHeight;
const trigger = vh * 0.5;
const trigger = 200;
let activeId = 'top';
for (const id of sectionIds) {
const el = document.getElementById(id);
@ -594,14 +586,13 @@ export default {
};
const update = () => {
// (scrollTo ) update
if (this.scrollLocked) return;
if (Date.now() < (this.scrollSuppressUntil || 0)) return;
this.activeSection = compute();
};
// IO :section /退
const observer = new IntersectionObserver(() => update(), {
rootMargin: '0px 0px -50% 0px',
rootMargin: '0px 0px -200px 0px',
threshold: 0
});
sectionIds.forEach((id) => {
@ -621,37 +612,27 @@ export default {
update();
},
onLearnMore(event) {
const btn = event.currentTarget;
if (btn) {
btn.classList.add('btn-flash');
setTimeout(() => btn.classList.remove('btn-flash'), 300);
}
setTimeout(() => this.scrollTo('about'), 200);
},
scrollTo(id) {
// 1) ()
this.activeSection = id;
// 2) update 1.2s( smooth )
const suppressMs = 1200;
const suppressMs = 2000;
this.scrollSuppressUntil = Date.now() + suppressMs;
// 3) , scrollY
// """"
// ,scroll/IO update() return, activeSection
this.scrollLocked = true;
setTimeout(() => {
this.scrollSuppressUntil = 0; //
// ,scrollY ,compute()
this.activeSection = (() => {
const sectionIds = ['about', 'skills', 'platform', 'agent', 'media', 'practice', 'gateway'];
const scrollY = window.scrollY || window.pageYOffset || 0;
if (scrollY < 100) return 'top';
const vh = window.innerHeight || document.documentElement.clientHeight;
const trigger = vh * 0.5;
let activeId = 'top';
for (const sid of sectionIds) {
const el = document.getElementById(sid);
if (!el) continue;
const top = el.getBoundingClientRect().top;
if (top <= trigger) {
activeId = sid;
} else {
break;
}
}
return activeId;
})();
this.scrollSuppressUntil = 0;
this.activeSection = id;
// 200ms , scroll compute
setTimeout(() => { this.scrollLocked = false; }, 200);
}, suppressMs);
// 4)
if (id === 'top') {
window.scrollTo({ top: 0, behavior: 'smooth' });
return;
@ -659,17 +640,13 @@ export default {
const el = document.getElementById(id);
if (el) {
if (id === 'gateway') {
// gateway 23.574rem ,""
// ( 100px nav,"")
const top = el.getBoundingClientRect().top + window.pageYOffset - 100;
const top = el.getBoundingClientRect().top + window.pageYOffset - 300;
window.scrollTo({ top: top, behavior: 'smooth' });
} else if (id === 'skills') {
// skills absolute (group_27 top: 35.547rem),,
// 260px( gateway "///")
const top = el.getBoundingClientRect().top + window.pageYOffset;
const top = el.getBoundingClientRect().top + window.pageYOffset - 200;
window.scrollTo({ top: top, behavior: 'smooth' });
} else {
const top = el.getBoundingClientRect().top + window.pageYOffset - 260;
const top = el.getBoundingClientRect().top + window.pageYOffset - 460;
window.scrollTo({ top: top, behavior: 'smooth' });
}
}
@ -679,18 +656,14 @@ export default {
</script>
<style scoped lang="css" src="./assets/index.rem.css" />
<style scoped>
/* 顶部导航固定,滚动时始终可见、可点击 */
.section_2 {
position: fixed;
top: 0;
left: 0;
z-index: 100;
/* will-change:transform + transform:translateZ(0): fixed GPU ,
滚动时导航不再走主线程重绘,避免每帧重新画整个 nav 元素造成顶部闪/ */
will-change: transform;
transform: translateZ(0);
}
/* 导航被 fixed 移出文档流,给内容补回 80px 顶部间距,避免上移错位 */
.section_1 {
margin-top: 2.133rem;
}
@ -708,10 +681,24 @@ export default {
.nav-link.nav-active {
color: rgba(25, 140, 255, 1) !important;
}
/* 应用实践 nav 项(全局 CSS 的 .text_nav_practice 没被 scope,需要单独覆盖高亮) */
.text_nav_practice.nav-active {
color: rgba(25, 140, 255, 1) !important;
}
.box_16 {
cursor: pointer !important;
transition: background-color 0.3s, transform 0.15s, box-shadow 0.2s;
}
.box_16:hover {
background-color: rgba(40, 40, 40, 1) !important;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}
.btn-flash {
background-color: rgba(60, 60, 60, 1) !important;
transform: scale(0.95);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) inset;
}
/* ===== 修复 logo:底部用与首页 image_1 同款整张合并图 ===== */
/* 顶部 image_1 (slice-3-black, 浅色页头) + 底部 .footer-logo (slice-3-white, 深色页脚 group_21 bg: rgba(16,16,16,1)) */
/* 尺寸/比例与首页 6.347rem × 0.854rem 完全一致,无图-字缝隙 */
.footer-logo {
width: 6.347rem;
height: 0.854rem;
@ -720,9 +707,6 @@ export default {
margin: 0;
}
/* ===== 4 个价值标签(降本/增效/留资/安全)的小字描述:强制两行 + 居中 + 跟参考图断句一字不差(不改文案) ===== */
/* font-size 0.39rem + letter-spacing 0rem 6.4rem 16-17 ( 1-2 ),
配合 <br /> 14-15 字处硬换行,避免自然换行与 <br /> 重复触发导致 3 */
.text-group_1,
.text-group_2,
.text-group_3,
@ -733,11 +717,9 @@ export default {
.text_12,
.text_14,
.text_16 {
/* 还原:不强制 2 行、不改 font-size / line-height,文字回到原本单行布局,行间距恢复默认 */
}
/* ===== 底部 footer 版权信息上方加横线分隔 ===== */
/* 写在 <style scoped> 里(用 !important),因为外部 index.rem.css 的 .text-wrapper_7 没被 scoped 处理,匹配不上 */
/* 底部 footer 版权信息上方加横线分隔(用 !important 覆盖全局 .text-wrapper_7) */
.text-wrapper_7 {
border-top: 1px solid rgba(255, 255, 255, 0.5) !important;
padding-top: 1.067rem !important;
@ -746,10 +728,9 @@ export default {
}
.group_20,
.group_21 {
height: 16rem !important; /* footer 内容实际累加 ≈ 16rem,缩 3.3rem 消除底部黑色空白 */
height: 16rem !important;
}
/* 知识大脑右侧装饰图(新版蓝湖:单张 339x327 替代原 image_35 + label_5 拼接) */
.image-26-knowledge {
width: 9.04rem;
height: 8.72rem;
@ -757,9 +738,8 @@ export default {
display: block;
}
/* ============ 应用实践板块(全部 class 用 practice_ 前缀避开与 gateway 的 class 冲突)============ */
/* : CSS <style scoped> ( index.rem.css),
自动带 [data-v-xxx] 属性选择器,scope 隔离不会被全局污染 */
/* ============ 应用实践板块 ============ */
.practice_text_wrapper_13 {
width: 4.694rem;
height: 1.707rem;
@ -916,20 +896,10 @@ export default {
margin-top: 0.374rem;
}
/* ============ footer 应用实践列(比照 newcss text-wrapper_16,放在"创作平台"和"模型网关"之间)============ */
/* newcss .text-wrapper_16:
- width: 1.92rem( withmind 误用 2.4rem)
- height: 5.12rem( withmind 误用 3.734rem,4 项需要 5.12rem)
- margin-left: 0.934rem( withmind 误用 1.787rem)
写在 <style scoped> 里自动带 [data-v-xxx],scope 隔离不会污染其他列
关键修复:不要用 justify-between,改用普通流式布局 + 每项固定 margin-top,
这样 4 项的实际渲染高度 = 4*0.96 + 3*0.427 = 5.121rem 5.12rem,精确填满,
不会因 justify-between 撑开产生视觉间距不一致 */
/* ============ footer 应用实践列 ============ */
.practice_footer_col {
width: 1.92rem;
height: 5.12rem;
/* 再右移 0.2rem(原 0.747rem → 0.947rem) */
margin-left: 0.947rem;
}

Loading…
Cancel
Save