├── demo.png
├── babel.config.js
├── public
├── favicon.ico
├── index.html
└── conf.yml
├── src
├── assets
│ ├── theme
│ │ └── pure
│ │ │ ├── variables.less
│ │ │ ├── print.less
│ │ │ └── core.less
│ └── less
│ │ └── common.less
├── util
│ └── request.js
├── main.js
├── App.vue
└── components
│ ├── loading.vue
│ └── pure.vue
├── .prettierrc
├── vue.config.js
├── .gitignore
├── package.json
└── README.md
/demo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/17px/yaml-resume-page/HEAD/demo.png
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@vue/app'
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/17px/yaml-resume-page/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/src/assets/theme/pure/variables.less:
--------------------------------------------------------------------------------
1 | // 核心主题色
2 | :root {
3 | --mainThemeColor: "red";
4 | }
5 |
6 | // tip-color
7 | @tip-color: #ccc;
8 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "tabWidth": 2,
3 | "semi": false,
4 | "singleQuote": true,
5 | "printWidth": 120,
6 | "arrowParens": "avoid",
7 | "endOfLine": "crlf"
8 | }
9 |
--------------------------------------------------------------------------------
/vue.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | chainWebpack: config => {
3 | config.plugin('html').tap(args => {
4 | args[0].title = 'Choi 简历生成器'
5 | return args
6 | })
7 | },
8 | configureWebpack: {
9 | externals: {
10 | vue: 'Vue',
11 | axios: 'axios'
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | # local env files
6 | .env.local
7 | .env.*.local
8 |
9 | # Log files
10 | npm-debug.log*
11 | yarn-debug.log*
12 | yarn-error.log*
13 |
14 | # Editor directories and files
15 | .idea
16 | .vscode
17 | *.suo
18 | *.ntvs*
19 | *.njsproj
20 | *.sln
21 | *.sw?
22 |
--------------------------------------------------------------------------------
/src/util/request.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 |
3 | const baseUrl =
4 | process.env.NODE_ENV === "development" ? "/" : "./";
5 |
6 | const ins = axios.create({
7 | timeout: 7000,
8 | baseURL: baseUrl,
9 | headers: {
10 | "Cache-Control": "no-cache",
11 | },
12 | });
13 |
14 | export default ins;
15 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from "vue";
2 | import App from "./App.vue";
3 | import yaml from "js-yaml";
4 | import axios from "@/util/request";
5 | import "font-awesome/css/font-awesome.css";
6 | import "@/assets/less/common.less";
7 |
8 | Vue.prototype.$Y = yaml;
9 | Vue.prototype.$http = axios;
10 |
11 | Vue.config.productionTip = false;
12 |
13 | new Vue({
14 | render: (h) => h(App),
15 | }).$mount("#app");
16 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | <%= htmlWebpackPlugin.options.title %>
11 |
12 |
13 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/assets/theme/pure/print.less:
--------------------------------------------------------------------------------
1 | // chrome打印样式
2 | @media print {
3 | body {
4 | padding-top: 0;
5 | #wrapper {
6 | width: 1024px;
7 | height: 1450px; // A4 大小
8 | margin: 0 auto;
9 | border-radius: 0;
10 | box-shadow: none;
11 | padding-bottom: 40px;
12 | .basic {
13 | section {
14 | .left,
15 | .right {
16 | color: #333;
17 | small {
18 | color: #333;
19 | }
20 | }
21 | }
22 | .relative {
23 | .left {
24 | div {
25 | color: #333;
26 | }
27 | }
28 | .right {
29 | a {
30 | i {
31 | color: #333;
32 | }
33 | span {
34 | color: #333;
35 | }
36 | }
37 | }
38 | }
39 | }
40 | }
41 | .pdf {
42 | display: none;
43 | }
44 | .last-modify {
45 | position: absolute;
46 | z-index: 1;
47 | width: 970px;
48 | top: auto;
49 | bottom: 25px;
50 | text-align: left;
51 | padding-left: 20px;
52 | color: #d1d1d1;
53 | }
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "choi",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "lint": "vue-cli-service lint"
9 | },
10 | "dependencies": {
11 | "axios": "^0.21.0",
12 | "core-js": "^2.6.5",
13 | "font-awesome": "^4.7.0",
14 | "html2canvas": "^1.3.2",
15 | "js-yaml": "^3.13.1",
16 | "less": "^3.9.0",
17 | "less-loader": "^5.0.0",
18 | "vue": "^2.6.10"
19 | },
20 | "devDependencies": {
21 | "@vue/cli-plugin-babel": "^3.9.0",
22 | "@vue/cli-plugin-eslint": "^3.9.0",
23 | "@vue/cli-service": "^3.9.0",
24 | "babel-eslint": "^10.0.1",
25 | "eslint": "^5.16.0",
26 | "eslint-plugin-vue": "^5.0.0",
27 | "vue-cli-plugin-axios": "^0.0.4",
28 | "vue-template-compiler": "^2.6.10"
29 | },
30 | "eslintConfig": {
31 | "root": true,
32 | "env": {
33 | "node": true
34 | },
35 | "extends": [
36 | "plugin:vue/essential",
37 | "eslint:recommended"
38 | ],
39 | "rules": {},
40 | "parserOptions": {
41 | "parser": "babel-eslint"
42 | }
43 | },
44 | "postcss": {
45 | "plugins": {
46 | "autoprefixer": {}
47 | }
48 | },
49 | "browserslist": [
50 | "> 1%",
51 | "last 2 versions"
52 | ]
53 | }
54 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
最后更新时间:{{ lastModifyTime }}
4 |
5 |
6 |
7 |
8 |
46 |
47 |
77 |
--------------------------------------------------------------------------------
/src/assets/less/common.less:
--------------------------------------------------------------------------------
1 | @import "../theme/pure/variables.less";
2 |
3 | html {
4 | background: whitesmoke;
5 | line-height: 1;
6 | font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Microsoft YaHei",
7 | "微软雅黑", Arial, sans-serif;
8 | }
9 |
10 | * {
11 | transition: all 0.5s;
12 | box-sizing: border-box;
13 | color: #333;
14 | }
15 |
16 | ul {
17 | list-style-type: square;
18 | }
19 |
20 | body,
21 | ul,
22 | p,
23 | h1,
24 | h2,
25 | h3,
26 | h4,
27 | h5,
28 | h6 {
29 | margin: 0;
30 | }
31 |
32 | a {
33 | text-decoration: none;
34 | }
35 |
36 | .tip {
37 | display: inline-block;
38 | background: var(--mainThemeColor);
39 | padding: 1px 5px;
40 | border-radius: 3px;
41 | margin: 0 5px 5px 0;
42 | font-size: 12px;
43 | color: #fff;
44 | letter-spacing: 1px;
45 | }
46 |
47 | .tip-grey {
48 | font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Microsoft YaHei",
49 | "微软雅黑", Arial, sans-serif;
50 | font-size: 13px;
51 | line-height: 15px;
52 | font-weight: 500;
53 | color: #494949;
54 | margin: 0 3px;
55 | padding: 0 4px;
56 | border-bottom: 1px solid #eee;
57 | box-shadow: inset 0 -8px #eee;
58 | }
59 |
60 | .link {
61 | line-height: 1.2;
62 | padding: 1px 10px;
63 | border-radius: 3px;
64 | border: 1px solid var(--mainThemeColor);
65 | color: var(--mainThemeColor);
66 | font-family: "Lucida Grande", "Hiragino Sans GB", "Hiragino Sans GB W3",
67 | "Helvetica Neue", Helvetica, "PingFang SC", "Microsoft YaHei", "微软雅黑",
68 | Arial, sans-serif;
69 | }
70 |
71 | .pdf {
72 | display: inline-block;
73 | position: fixed;
74 | z-index: 10;
75 | bottom: 6px;
76 | left: 50%;
77 | margin-left: 520px;
78 | padding: 0 8px;
79 | border-radius: 3px;
80 | font-size: 12px;
81 | line-height: 26px;
82 | color: #fff;
83 | background-color: var(--mainThemeColor);
84 | transition: all 0.2s ease-in-out;
85 | animation: fade 1.6s;
86 | i {
87 | color: #fff;
88 | }
89 | @media screen and (max-width: 1246px) {
90 | left: auto;
91 | right: 8px;
92 | margin-left: 0;
93 | }
94 | }
95 |
--------------------------------------------------------------------------------
/public/conf.yml:
--------------------------------------------------------------------------------
1 | # 配置
2 | conf:
3 | #页面标题
4 | title: 陈睿 | 前端开发
5 | # 主体色
6 | mainThemeColor: '#00b38a'
7 | # 最后更新时间
8 | lastModifyTime: 2021年1月19日 14点31分
9 | # pdf简历url
10 | pdf: https://www.mozzie.cn/resume.pdf
11 | # 模块
12 | modules:
13 | skill: 技能
14 | exp: 项目经验
15 | project: 作品
16 |
17 | # 基础信息
18 | basic:
19 | cnName: 陈睿
20 | enName: Rui Chen
21 | sex: 男
22 | birth: 1994年01月
23 | objective: Web前端开发
24 | city: 南京
25 | overall: 3年前端开发经验 · 2016年毕业
26 | college: 南京信息工程大学滨江学院 / 本科
27 | phone: 18061205553
28 | email: himozzie@foxmail.com
29 | # 别再前面加https和www
30 | homepage: mozzie.cn
31 | # 别再前面加https和www
32 | git: github.com/chenrrrrrr
33 |
34 | # 技能
35 | skill:
36 | - 3 年多前端工作经验,熟练掌握 Javascript、具备 Typescript 项目经验
37 | - 熟悉 Vue 全家桶,对`模板引擎`、`AST`等底层原理有一定理解
38 | - 熟悉 Node、Java,具备 Springboot、Egg、Koa2 项目经验
39 | - 掌握 Linux 基本命令,了解 nginx 基本配置,具备单机前后端分离应用部署能力
40 | - 入门过 Electron、Flutter 等新技术
41 |
42 | # 项目经验
43 | exp:
44 | - name: PC/vue • 亚马逊测评系统
45 | role: 前端TL • (2021.03 ~ 至今)
46 | bg: 跨境电商测评业务线从零开荒
47 | des:
48 | - js全栈项目,重构2个版本,Egg.js 为移动端、pc端,提供服务,前后整体开发架构设计
49 | - 招聘,带新人,辅助组员解决Bug、业务逻辑梳理、控制研发进度,软著申请
50 | - 接入层、业务层设计,e.g 环境切换、api网关层(登录鉴权、动态角色路由、全局状态提示)
51 | - 技术难点疏通,e.g 数据库敏感字段加密算法、邮件、短信SDK、文件上传、excel报表
52 | ps: 难点:小组整体研发能力有限,解决方案:重构,集中解决硬编码、路由去中心化等问题,使用装饰器,扩展egg.ts,实现类、方法级的路由装饰器
53 | link: youam.co
54 | stack: egg vue全家桶 ElementUI
55 |
56 | - name: PC/web · docat文档系统
57 | role: 核心开发
58 | des:
59 | - vue开发的运行时文档应用,对比 vuepress,省去静态编译过程,配合 githooks 实现 markdown 文件同步
60 | - 引用cdn即可构建,内置代码高亮,扩展 markdown 原生语法,解决公司内部技术沉淀,项目文档交接问题。
61 | ps: 难点:文档目录与内容的同步滚动
62 | stack: markdown vue webpack
63 | link: mozzie.cn
64 |
65 | - name: 小程序/Wepy • 危运超级号
66 | role: 核心开发
67 | des:
68 | - 小程序wepy开发架构设计
69 | - 全局跨页面消息提示设计、骨架屏的组件便携,网络、持久化等模块封装
70 | ps: 难点:小程序多入口分发问题,解决方案:
71 | stack: 小程序API 组件 wepy
72 |
73 | - name: PC/web • 开源博客系统typecho
74 | role: 贡献者
75 | des:
76 | - 基于vue、webpack构建,将typecho二次开发由ssr改造为spa,为社区贡献了3套spa开发框架
77 | - 开发4个免费主题到社区,github,100+ star
78 | stack: vue webpack gulp
79 | link: github.com/chenrrrrr/typecho-theme-Moz/tree/feature1.0
80 |
81 | # 作品
82 | project:
83 | - title: Docat
84 | link: https://www.mozzie.cn
85 | des: 一个基于Vue开发的运行时类博客文档,用于代码笔记
86 |
87 | - title: typecho-theme-moz
88 | link: https://github.com/chenrrrrr/typecho-theme-Moz
89 | des: 博客typecho系统主题,100+ star
90 |
91 | - title: choi
92 | link: https://resume.mozzie.cn
93 | des: 基于yaml,自动化构建响应式简历,适配网页A4打印
94 |
95 | - title: Yuna
96 | link: https://github.com/chenrrrrr/Yuna
97 | des: 基于vue、webpack构建,对typecho主题由ssr服务器端渲染,改造成了spa应用,从而使得typecho主题开发、迭代版本、功能时,变得更加得心应手。
98 |
--------------------------------------------------------------------------------
/src/components/loading.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
22 |
23 |
146 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ⚠️ This project is no longer maintained ⚠️
2 | ---
3 |
4 | # choi
5 |
6 | 填写 yaml 配置文件,即可自动化构建一个简单的网页版简历
7 |
8 | ## 示例
9 |
10 | 演示地址:[https://resume.mozzie.cn/](https://resume.mozzie.cn)
11 |
12 | 
13 |
14 | ## 项目结构
15 |
16 | ```
17 | ├── README.md
18 | ├── package.json
19 | ├── public
20 | │ ├── conf.yml # 配置文件
21 | │ ├── favicon.ico # 站点图标
22 | │ └── index.html
23 | └── src
24 | ```
25 |
26 |
27 | ### 配置文件
28 |
29 | 配置文件采用了简单易懂的`yaml`语法,当`yarn`打包后的`dist`文件部署打牌`nginx`之流的服务器上,会自动解析`conf.yml`并且渲染到页面中,可参考本例项目中的`conf.yml`配置
30 |
31 | ```conf
32 | # 配置
33 | conf:
34 | # 站点标题
35 | title: '陈睿 | Web 前端开发'
36 | # 主题色
37 | mainThemeColor: '#00b38a'
38 | # 最后更新时间
39 | lastModifyTime: 2021年1月19日 14点31分
40 | # pdf简历url
41 | pdf: https://www.mozzie.cn/resume.pdf
42 | # 模块
43 | modules:
44 | skill: 技能
45 | exp: 项目经验
46 | project: 作品
47 |
48 | # 基础信息
49 | basic:
50 | cnName: 陈睿
51 | enName: Rui Chen
52 | sex: 男
53 | birth: 1994年01月
54 | objective: Web前端开发
55 | city: 南京
56 | overall: 3年前端开发经验 · 2016年毕业
57 | college: 南京信息工程大学滨江学院 / 本科
58 | phone: 18061205553
59 | email: himozzie@foxmail.com
60 | # 别再前面加https和www
61 | homepage: mozzie.cn
62 | # 别再前面加https和www
63 | git: github.com/chenrrrrrr
64 |
65 | # 技能
66 | skill:
67 | - 3 年多前端工作经验,熟练掌握 Javascript、具备 Typescript 项目经验
68 | - 熟悉 Vue 全家桶,对`模板引擎`、`AST`等底层原理有一定理解
69 | - 熟悉 Node、Java,具备 Springboot、Egg、Koa2 项目经验
70 | - 掌握 Linux 基本命令,了解 nginx 基本配置,具备单机前后端分离应用部署能力
71 | - 入门过 Electron、Flutter 等新技术
72 |
73 | # 项目经验
74 | exp:
75 | - name: PC/vue • 亚马逊测评系统
76 | role: 前端TL • (2021.03 ~ 至今)
77 | bg: 跨境电商测评业务线从零开荒
78 | des:
79 | - js全栈项目,重构2个版本,Egg.js 为移动端、pc端,提供服务,前后整体开发架构设计
80 | - 招聘,带新人,辅助组员解决Bug、业务逻辑梳理、控制研发进度,软著申请
81 | - 接入层、业务层设计,e.g 环境切换、api网关层(登录鉴权、动态角色路由、全局状态提示)
82 | - 技术难点疏通,e.g 数据库敏感字段加密算法、邮件、短信SDK、文件上传、excel报表
83 | ps: 难点:小组整体研发能力有限,解决方案:重构,集中解决硬编码、路由去中心化等问题,使用装饰器,扩展egg.ts,实现类、方法级的路由装饰器
84 | link: youam.co
85 | stack: egg vue全家桶 ElementUI
86 |
87 | - name: PC/web · docat文档系统
88 | role: 核心开发
89 | des:
90 | - vue开发的运行时文档应用,对比 vuepress,省去静态编译过程,配合 githooks 实现 markdown 文件同步
91 | - 引用cdn即可构建,内置代码高亮,扩展 markdown 原生语法,解决公司内部技术沉淀,项目文档交接问题。
92 | ps: 难点:文档目录与内容的同步滚动
93 | stack: markdown vue webpack
94 | link: mozzie.cn
95 |
96 | - name: 小程序/Wepy • 危运超级号
97 | role: 核心开发
98 | des:
99 | - 小程序wepy开发架构设计
100 | - 全局跨页面消息提示设计、骨架屏的组件便携,网络、持久化等模块封装
101 | ps: 难点:小程序多入口分发问题,解决方案:
102 | stack: 小程序API 组件 wepy
103 |
104 | - name: PC/web • 开源博客系统typecho
105 | role: 贡献者
106 | des:
107 | - 基于vue、webpack构建,将typecho二次开发由ssr改造为spa,为社区贡献了3套spa开发框架
108 | - 开发4个免费主题到社区,github,100+ star
109 | stack: vue webpack gulp
110 | link: github.com/chenrrrrr/typecho-theme-Moz/tree/feature1.0
111 |
112 | # 作品
113 | project:
114 | - title: Docat
115 | link: https://www.mozzie.cn
116 | des: 一个基于Vue开发的运行时类博客文档,用于代码笔记
117 |
118 | - title: typecho-theme-moz
119 | link: https://github.com/chenrrrrr/typecho-theme-Moz
120 | des: 博客typecho系统主题,100+ star
121 |
122 | - title: choi
123 | link: https://resume.mozzie.cn
124 | des: 基于yaml,自动化构建响应式简历,适配网页A4打印
125 |
126 | - title: Yuna
127 | link: https://github.com/chenrrrrr/Yuna
128 | des: 基于vue、webpack构建,对typecho主题由ssr服务器端渲染,改造成了spa应用,从而使得typecho主题开发、迭代版本、功能时,变得更加得心应手。
129 | ```
130 |
131 | ### 安装依赖
132 |
133 | ```
134 | yarn install
135 | ```
136 |
137 | ### 打包构建
138 |
139 | ```
140 | yarn run build / yarn build
141 | ```
142 |
143 | ### 部署到服务器
144 |
145 | 将dist文件夹的静态文件上传到服务器中
146 |
147 |
--------------------------------------------------------------------------------
/src/components/pure.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | {{ d.basic.cnName }}
10 | {{ d.basic.enName }}
11 |
12 |
13 | {{ renderData.basic.objective }}
14 | / {{ renderData.basic.city }}
15 |
16 |
17 |
18 |
19 |
{{ renderData.basic.sex }} / {{ renderData.basic.birth }}
20 |
{{ renderData.basic.overall }}
21 |
{{ renderData.basic.college }}
22 |
23 |
41 |
42 |
43 |
44 |
{{ d.conf.modules.skill }}
45 |
48 |
49 |
50 |
{{ d.conf.modules.exp }}
51 |
52 | -
53 |
54 |
{{ item.name }} • {{ item.role }}
55 |
link
56 |
57 |
58 |
背景:{{ item.bg }}
59 |
60 |
61 |
{{ d.conf.modules.l4 }}
62 |
63 | -
64 | {{ index + 1 }}、 {{ content }}
65 |
66 |
67 |
68 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
{{ d.conf.modules.project }}
79 |
86 |
87 |
PDF简历
88 |
89 |
90 |
91 |
92 |
144 |
145 |
151 |
--------------------------------------------------------------------------------
/src/assets/theme/pure/core.less:
--------------------------------------------------------------------------------
1 | // 核心样式表
2 | @import './variables.less';
3 | #wrapper {
4 | position: relative;
5 | width: 1024px;
6 | margin: 50px auto 30px;
7 | border-radius: 5px;
8 | background-color: #fff;
9 | box-shadow: 0 0 15px #c0c0c0;
10 | overflow: hidden;
11 | transition: all 0.2s ease-in-out;
12 | animation: fadeUp 2s cubic-bezier(0.19, 1, 0.22, 1);
13 | @media screen and (max-width: 1024px) {
14 | margin: 0;
15 | box-shadow: none;
16 | width: auto;
17 | border-radius: 0;
18 | }
19 | .basic {
20 | padding: 20px 30px 20px 30px;
21 | background: var(--mainThemeColor);
22 | section {
23 | position: relative;
24 | display: flex;
25 | justify-content: space-between;
26 | align-items: center;
27 | padding-bottom: 20px;
28 | @media screen and (max-width: 720px) {
29 | display: block;
30 | }
31 | h1,
32 | h2 {
33 | @media screen and (max-width: 720px) {
34 | text-align: center;
35 | }
36 | }
37 | h2 {
38 | @media screen and (max-width: 720px) {
39 | padding-top: 20px;
40 | }
41 | }
42 | .left {
43 | font-weight: 400;
44 | font-size: 48px;
45 | color: #fff;
46 | small {
47 | color: #fff;
48 | font-size: 24px;
49 | font-family: 'Lucida Grande', 'Hiragino Sans GB', 'Hiragino Sans GB W3', 'Helvetica Neue', Helvetica,
50 | 'PingFang SC', 'Microsoft YaHei', '微软雅黑', Arial, sans-serif;
51 | }
52 | }
53 | .right {
54 | font-size: 20px;
55 | color: #fff;
56 | small {
57 | font-size: 14px;
58 | color: #fff;
59 | }
60 | }
61 | }
62 | .relative {
63 | @media screen and (max-width: 720px) {
64 | display: block;
65 | }
66 | display: flex;
67 | justify-content: space-between;
68 | .left {
69 | @media screen and (max-width: 720px) {
70 | text-align: center;
71 | line-height: 30px;
72 | }
73 | display: flex;
74 | flex-direction: column;
75 | justify-content: space-around;
76 | font-size: 14px;
77 | div {
78 | color: #fff;
79 | }
80 | }
81 | .right {
82 | @media screen and (max-width: 720px) {
83 | display: flex;
84 | justify-content: center;
85 | }
86 | line-height: 22px;
87 | font-size: 14px;
88 | a {
89 | display: flex;
90 | justify-content: flex-end;
91 | align-items: center;
92 | i {
93 | padding-left: 10px;
94 | color: #fff;
95 | font-size: 20px;
96 | @media screen and (max-width: 720px) {
97 | padding-right: 10px;
98 | }
99 | }
100 | span {
101 | color: #fff;
102 | @media screen and (max-width: 720px) {
103 | display: none;
104 | }
105 | }
106 | }
107 | }
108 | }
109 | }
110 | .skill,
111 | .exp,
112 | .project {
113 | padding: 10px 20px;
114 | h5 {
115 | padding-bottom: 10px;
116 | border-bottom: 1px solid #f3f3f3;
117 | }
118 | ul {
119 | padding: 10px 0 5px 20px;
120 | li {
121 | line-height: 1.5;
122 | padding-bottom: 5px;
123 | font-size: 14px;
124 | &:last-of-type {
125 | padding-bottom: 0;
126 | }
127 | }
128 | }
129 | }
130 | .skill {
131 | padding-top: 20px;
132 | ul {
133 | @media screen and (max-width: 720px) {
134 | padding-left: 10px;
135 | }
136 | }
137 | }
138 | .exp {
139 | ul {
140 | @media screen and (max-width: 720px) {
141 | padding-left: 10px;
142 | }
143 | }
144 | li {
145 | font-size: 14px;
146 | position: relative;
147 | margin-bottom: 10px;
148 | .title {
149 | display: flex;
150 | justify-content: space-between;
151 | align-items: center;
152 | padding: 5px 0;
153 | .name {
154 | padding-right: 50px;
155 | font-weight: bold;
156 | }
157 | a {
158 | transition: all 0.5s;
159 | }
160 | a:hover {
161 | cursor: pointer;
162 | background: var(--mainThemeColor);
163 | color: #fff;
164 | }
165 | }
166 | .des {
167 | padding: 5px 0;
168 | line-height: 1.5;
169 | ul {
170 | padding: 0;
171 | list-style: none;
172 | li {
173 | margin: 0;
174 | padding: 0;
175 | }
176 | }
177 | }
178 | .bg {
179 | p {
180 | color: var(--mainThemeColor);
181 | }
182 | }
183 | .ps {
184 | padding-bottom: 10px;
185 | p {
186 | color: var(--mainThemeColor);
187 | }
188 | }
189 | .stack {
190 | text-align: left;
191 | }
192 | }
193 | }
194 | .project {
195 | ul {
196 | @media screen and (max-width: 720px) {
197 | padding-left: 10px;
198 | }
199 | li {
200 | a {
201 | color: var(--mainThemeColor);
202 | text-decoration: underline;
203 | }
204 | }
205 | }
206 | }
207 | }
208 |
--------------------------------------------------------------------------------