# 首页页面修改 - 文件夹路径:`./pages/index.js` - 被引用的部分要找到对应的文件去修改 ```js //这是一个React组件的JavaScript代码,用于构建一个使用Docusaurus进行管理的站点的首页。import是引用了一些全局文件? // 这个组件和它的子组件使用了一些CSS类,这些类从`index.module.css`导入,并在`clsx`库的帮助下用于在JavaScript中构建字符串。`clsx`库是一个小巧的JavaScript库,它用于在条件性地构建字符串,尤其是用于构建CSS类名字符串。 import React from 'react'; import clsx from 'clsx'; import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Layout from '@theme/Layout'; import HomepageFeatures from '@site/src/components/HomepageFeatures'; import styles from './index.module.css'; //`HomepageHeader`组件,渲染首页头部,主要包括站点标题,副标题,以及一个链接到教程的按钮。使用了`useDocusaurusContext`这个钩子函数来获取Docusaurus的全局上下文,包含了很多有用的数据。它主要用来获取`siteConfig`对象,该对象包含站点的配置数据,如站点的标题和标签。 function HomepageHeader() { const {siteConfig} = useDocusaurusContext(); return ( <header className={clsx('hero hero--primary', styles.heroBanner)}> <div className="container"> // config文件中的title,subtitle属性 <h1 className="hero__title">{siteConfig.title}</h1> <p className="hero__subtitle">{siteConfig.tagline}</p> //`Link`是Docusaurus提供的一个组件,用于在Docusaurus站点中创建链接。这里,它被用来创建一个链接到`/docs/intro`页面的教程按钮。 <div className={styles.buttons}> <Link className="button button--secondary button--lg" to="/docs/intro"> Docusaurus Tutorial - 5min ⏱️ </Link> </div> </div> </header> ); } //`Home`组件,`Home`是此文件导出的默认组件,表示网站的首页。 它同样使用了`useDocusaurusContext`来获取站点配置。 //`Layout`组件来设置页面的基本布局,包括头部、主体等。 //头部部分是由`HomepageHeader`组件渲染的,主体部分是`HomepageFeatures`组件渲染的。 //title显示的是<head>中的title标签内容 //description显示的是<head>中的description标签内容 export default function Home() { const {siteConfig} = useDocusaurusContext(); return ( <Layout title={`Hello from ${siteConfig.title}`} description="Description will go into a meta tag in <head />"> /* 头部部分是由`HomepageHeader`组件渲染的,上面的function */ <HomepageHeader /> <main> /*主体部分是`HomepageFeatures`组件渲染的,@site/src/components/HomepageFeatures*/ <HomepageFeatures /> </main> </Layout> ); } ``` ## 首页颜色修改 - 文件夹路径:`./css/custom.css` - 修改操作:[[Styling and Layout]] ## 首页头部修改: 标题、副标题、链接到教程的按钮 - 文件夹路径:`./docusaurus.config.js` ## 首页主体部分修改 3个主题div块 - 文件夹路径:`./src/components/HomepageFeatures./index.js` 和 `./src/components/HomepageFeatures./style.module.css` - 参考:https://github.com/tansongchen/notes/blob/master/src/pages/index.tsx ``` import React from 'react'; import clsx from 'clsx'; import styles from './styles.module.css'; const FeatureList = [ { title: '职业/工作', Svg: require('@site/static/img/undraw_docusaurus_mountain.svg').default, description: ( <> Docusaurus was designed from the ground up to be easily installed and used to get your website up and running quickly. </> ), }, { title: '学习/成长', Svg: require('@site/static/img/undraw_docusaurus_tree.svg').default, description: ( <> Docusaurus lets you focus on your docs, and we&apos;ll do the chores. Go ahead and move your docs into the <code>docs</code> directory. </> ), }, { title: '创造/兴趣', Svg: require('@site/static/img/undraw_docusaurus_react.svg').default, description: ( <> Extend or customize your website layout by reusing React. Docusaurus can be extended while reusing the same header and footer. </> ), }, ]; /**** 主体部分每个布局内的内容的样式,采用bootstrap布局,每个盒子占33.3%,字体居中;svg使用了./src/components/HomepageFeatures./style.module.css文件中的fratureSvg选择器样式;title和description使用居中布局,title用h3标题,description用了p段落 *****/ function Feature({Svg, title, description}) { return ( <div className={clsx('col col--4')}> <div className="text--center"> <Svg className={styles.featureSvg} role="img" /> </div> <div className="text--center padding-horiz--md"> <h3>{title}</h3> <p>{description}</p> </div> </div> ); } /*** 相当于HTML页面布局的结构,格子的容器层container - row层 - 调用featureList的内容层 ***/ export default function HomepageFeatures() { return ( <section className={styles.features}> <div className="container"> <div className="row"> {FeatureList.map((props, idx) => ( <Feature key={idx} {...props} /> ))} </div> </div> </section> ); } ``` ### 修改后的文件 >[!info] > - 用到[[🗃️ 卡片盒子/110 - 前端开发/Docusaurus/React]]的组件需要import,例如这里用到的link > - 在react中,class的写法是className={styles.featureTitle}。 styles是css文件,featureTitle是class属性写法,不能用`-`的写法 > - 修改link的样式 > - 不能直接用Link标签在css中更改,令命名为className={styles.link} > - 在custom.css文件中加入`--ifm-link-color: #fff; --ifm-link-decoration:#0078ca;`的全局link样式 > - 在styles.modules.css中添加以下内容: > ``` > .link :hover { color: var(--ifm-link-color); text-decoration: underline var(--ifm-link-decoration); } > ``` ```js import React from 'react'; import clsx from 'clsx'; import styles from './styles.module.css'; import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Layout from '@theme/Layout'; const FeatureList = [ { title: '职业/工作', url: 'http://localhost:3000/docs/tutorial-basics/create-a-page' }, { title: '学习/成长', url: 'http://localhost:3000/docs/tutorial-basics/create-a-document' }, { title: '创造/兴趣', url: 'http://localhost:3000/docs/tutorial-basics/create-a-blog-post' }, ]; function Feature({title,url}) { return ( <div className={clsx('col col--4')}> <div className="text--center padding-horiz--md"> <Link className = {styles.link} to={url}> <div className = {styles.featureTitle}>{title}</div> </Link> </div> </div> ); } export default function HomepageFeatures() { return ( <section className={styles.features}> <div className="container"> <div className="row"> <div className={clsx('col col--12')}> <div className="text--center padding-horiz--md"> <p>这是一段描述文本</p> </div> <hr /> </div> {FeatureList.map((props, idx) => ( <Feature key={idx} {...props} /> ))} </div> </div> </section> ); } ```