我的最佳实践:CSS
1. 前言
如今 CSS 远远没有被充分利用。Angular/React/Vue/... 开发者和 UI 设计师之间隔着一道鸿沟。
UI 设计师嵌套了三十层 <div>,上面挂着四十个 CSS 类;而 Angular 开发者每隔两周就为最新的库兴奋不已,可他的依赖地狱早就离了 npm i --force 就构建不起来了,因为各个 peer dependency 互相冲突。这位 TypeScript 狂热者对 CSS 和 HTML 没什么兴趣。哪怕是最简单的输入框,他也非得用 Material,因为他担心不用的话就搞不定校验。更何况谁也不想把时间浪费在重新发明轮子上。可他没有意识到:一旦遇到第一个库无法满足的需求,省下的时间就会全部赔进去,最后发现自己正在翻这个库的 GitHub issues。
在全栈项目里做开发,很少有机会施展自己作为前端设计师的本事。你拿到 Figma 里的界面原型,就得原样实现。这类前端开发者大多根本没意识到,只用一行 CSS 就能做出响应式布局。CSS 比以往任何时候都更强大。JS 样式 hack、成堆的 media query 和 IE 8 兼容方案的时代已经过去了。万岁!
2. 完美居中
面试时并不总是讨喜,但我自己乐在其中:每当被问到前端水平如何,我都喜欢回答:“噢,当然。我能把一个 <div> 垂直居中。”
让一个 div 居中,向来是出了名的难。
现在不再是了:
:)
.parent {
display: grid;
place-items: center
}
3. 响应式网格
1
2
3
4
.parent {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
}
4. 响应式 Flex 布局
1
2
3
.parent {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
.box {
flex: 1 1 150px; /* Stretching: */
flex: 0 1 150px; /* No stretching: */
margin: 5px;
}
5. 页面布局
页眉
主体
页脚
.parent {
display: grid;
grid-template-rows: auto 1fr auto;
}
6. 侧边栏
最小:150px / 最大:25%
这个元素占据第二个网格位置(1fr),也就是说,它会占满剩下的全部空间。
.parent {
display: grid;
grid-template-columns: minmax(150px, 25%) 1fr;
}