时间:2023-09-22 03:48:01 | 来源:网站运营
时间:2023-09-22 03:48:01 来源:网站运营
打造一份网页版简历:多年前,因为换工作的需要,我得更新简历。但可能是写惯了CSS的缘故,在Word中排版实在是各种不顺手,于是就发挥了作为前端工程师的优势,把简历做成了网页。久而久之,这份简历就成为了我的个人产品,无论是否需要再找工作,每隔一段时间我都会进行更新迭代。// URL是否带有privacy参数(例如「http://abc.com?privacy」)var showPrivacy = /[?&]privacy=?(&|$)/.test(window.location.search);document.write(showPrivacy ? '张三' : '张先生');
而“加密”信息的方法,则多了去了,例如:['me', 'abc', 'com'].join('.').replace('.', '@'); // "me@abc.com"['a13800b', 'c138000d'].join('').replace(/[a-z]/g, ''); // "13800138000"
甚至,你可以把这些信息做成图片。1in = 2.54cm在595px这个宽度下,按照屏幕适配的规则,会采用小屏设备的布局。然而,A4纸的空间比小屏设备的屏幕要大得多,并不适合采用这样的布局,所以就需要大量调整样式。在这过程中,踩进了一个坑:
21cm / 2.54cm * 72px ≈ 595px
29.7cm / 2.54cm * 72px ≈ 842px
@media not print and (max-width: 639px) { /* ... */}
上面的媒体查询代码,表达的并非「不是打印设备并且宽度不超过639px」,而是「不是宽度不超过639px的打印设备」(关于这一点可以看看Mozilla的解释说明)。@media not print { @media (max-width: 639px) { /* ... */ }}
结果又掉进了另一个坑,有些旧内核的浏览器并不支持嵌套媒体查询。就这样折腾了一番之后发现,根据不同的设备应用不同的样式表文件才是最好的选择:<link href="./css/style.css" media="not print" rel="stylesheet" type="text/css" /><link href="./css/style-print.css" media="print" rel="stylesheet" type="text/css" />
那么打印的样式要怎么写呢?首先是「@page」,可以用来修改页面容器的版式,最常用的是指定页面的尺寸及边距:@page { size: A4 portrait; margin: 2.1cm 1.9cm;}
其次,某些浏览器默认是不打印背景色和背景图片的。对于Chrome,可以加上这段CSS代码强制打印背景(对其他浏览器来说,暂时没有办法):body { -webkit-print-color-adjust: exact; }
再次,根据需要处理链接。要知道打印出来之后,用手指往纸上戳是打不开网页的。如果你想让别人看到链接地址,也可以通过CSS将其输出到页面上,例如:a:after { content: '[' attr(href) ']'; }
最后,纸质简历的篇幅不宜过长,可以选择性地隐藏一些内容。CSS部分:/* style.css */.only-for-print { display: none; }/* style-print.css */.not-for-print { display: none; }
HTML部分:<div class="not-for-print">这是非打印版</div><div class="only-for-print">这是打印版</div>
顺带一提,以上所说的这些做法都不兼容IE6- 8等旧浏览器,但是打印店可能还在用XP系统,所以输出个pdf文件去打印是比较保险的。"devDependencies": { "autoprefixer": "^9.1.5", "css-loader": "^1.0.0", "cssnano": "^4.1.0", "extract-loader": "^2.0.1", "file-loader": "^1.1.11", "html-webpack-plugin": "^3.2.0", "postcss-loader": "^3.0.0", "webpack": "^4.16.4", "webpack-cli": "^3.1.0", "webpack-dev-server": "^3.1.5"}
公共构建逻辑如下:const path = require('path');module.exports = { entry: [ './src/main.js' ], output: { path: path.resolve(__dirname, './dist') }, module: { rules: [ { test: //.css$/, use: [{ loader: 'file-loader', options: { name: '[name].[hash:8].[ext]', outputPath: 'assets/', publicPath: '/assets/' } }, 'extract-loader', 'css-loader', 'postcss-loader'] }, { test: //.(jpg|png|gif|svg)$/, use: { loader: 'file-loader', options: { name: '[name].[hash:8].[ext]', outputPath: 'assets/', publicPath: '/assets/' } } } ] }};
上文提过,页面没有用到外部JavaScript,但是entry又写了「main.js」。其实这个js文件是空的,它的作用是:const path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');const config = require('./webpack.config.js');module.exports = Object.assign({ mode: 'development', plugins: [ new HtmlWebpackPlugin({ template: './src/index.ejs', inject: true, minify: { collapseWhitespace: true } }) ], devServer: { compress: true, overlay: true, port: 4550 }}, config);
为了构建html文件,这里用到了「html-webpack-plugin」,并且要把html文件中对资源的引用改成模板占位符(ejs格式):<link href="<%= require('./css/style-v2.7.css') %>" media="not print" rel="stylesheet" type="text/css" /><link href="<%= require('./css/style-v2.7-print.css') %>" media="print" rel="stylesheet" type="text/css" />
最后看看生产环境的构建逻辑:const config = require('./webpack.config.js');const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = Object.assign({ mode: 'production', plugins: [ new HtmlWebpackPlugin({ template: './src/index.ejs', inject: false, minify: { collapseWhitespace: true } }) ]}, config);
由于页面没有外部JavaScript,而且生产环境下也不需要「webpack-dev-server」,所以「inject」设成了false(仍然会生成main.js,只是没有注入到页面中)。关键词:简历,打造