作为Web开发人员应避免的10种css做法!有人认为CSS很难学习,没有什么逻辑可言,而且还坑很多,可能是大家对CSS还不是很了解,因为我提出了五个我不喜欢的开发者习惯,并向大家展示如何避免它们 。
1. 设置边距或填充,然后将其重置
- 我经常看到有人为所有元素设置边距或填充,然后又将第一个或最后一个元素的值重置 。
.item {margin-right: 1.6rem;}.item:last-child {margin-right: 0;}复制代码
- 对于更简单,更简洁的CSS,请使用以下选项之一:nth-child / nth-of-type选择器,:not()伪类或相邻的兄弟组合器,而后者又被称为+ 。
.item:not(:last-child) {margin-right: 1.6rem;}复制代码
.item:nth-child(n+2) {margin-left: 1.6rem;}复制代码
.item + .item {margin-left: 1.6rem;}复制代码
2. 为position:absolute/fixed的元素添加display:block.button::before {content: "";position: absolute;display: block;}复制代码
.button::before {content: "";position: fixed;display: block;}复制代码
- 你知道吗?当你为一个element设置position: absolute 或 position: fixed的时候,默认就有display: block这个属性!
- 因此,在这种情况下,如果你设置display:inline-*的时候,将会做如下的转换inline或inline-block将转换成block,inline-flex转换成flex,inlone-grid转换成grid,inline-table转换成table
.button::before {content: "";position: absolute;}复制代码
.button::before {content: "";position: flxed;}复制代码
3. 使用transform: translate (-50%, -50%)居中- 让一个element水平垂直居中,其中的一种解决方案是结合使用position: absolute和使用transform属性 。但是,这个技术在基于Chromium的浏览器中引起了模糊的文本问题 。
.parent {position: relative;}.child {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);}复制代码
- 在引入flexbox之后,我认为该技术已不再适用 。问题是它不能解决文本模糊的问题 。
- 而且,它使用了五个属性 。因此,我想分享一个技巧,可以将代码减少为两个属性 。
- 我们可以使用margin:auto在flex容器内自动放置,浏览器将元素居中 。只有两个属性,仅此而已 。
.parent {display: flex;}.child {margin: auto;}复制代码
4. 在块级元素上设置 width: 100%- 我们经常使用flexbox创建一个多列网格,该网格逐渐转换为单列 。
- 为了将网格转换为一列,开发人员使用宽度:100% 。我不明白他们为什么这么做 。网格元素是块元素,默认情况下可以执行此操作,而无需使用其他属性 。
<div class="parent"><div class="child">Item 1</div><div class="child">Item 2</div><div class="child">Item 3</div><div class="child">Item 4</div></div>复制代码
.parent {display: flex;flex-wrap: wrap;}.child {width: 100%;}@media (min-width: 1024px) {.child {width: 25%;}}复制代码
- 因此,我们不需要使用width:100%,而是应该编写媒体查询,以便flexbox仅用于创建多列网格 。
@media (min-width: 1024px) {.parent {display: flex;flex-wrap: wrap;}.child {width: 25%;}}复制代码
5. 为Flex布局下的子元素,设置display: block.parent {display: flex;}.child {display: block;}复制代码
- 使用flexbox时,请务必记住,创建Flex容器(添加显示:flex)时,所有子项(flex项)都会被阻塞 。
- 这意味着子元素被设置为display:block,并且只能具有block 。因此,如果你设置了inline或inline-block,它将更改为block,inline-flex=> flex,inline-grid=> grid和inline-table=> table 。
- 因此,不需要为flex的子项元素添加display:block,浏览器默认就会添加 。
.parent {padding: 0px;}复制代码
- 您是否知道,要将一个值设置为0时,不需要加上px:
.parent {padding: 0;}复制代码
7. 重复相同的代码?.parent {padding: 10px;margin: 20px;}.child {padding: 10px;margin: 20px}复制代码
- 始终牢记DRY规则 。不要重复自己 。代码的数量将使你在应用程序的性能和加载时间方面付出代价 。
推荐阅读
- Linux下应用开发基础知识大总结
- Web应用渗透测试的步骤、方法与工具
- 盘点使用golang作为后台的科技公司
- 异步Python Web框架比较
- 吊打tomcat的高性能web服务器undertow
- 所谓的“Web3.0”究竟是啥?
- 为什么孙权得到荆州后毫无作为,孙权为什么要给刘备借荆州
- 月经第三天就基本没了正常吗?
- 新加坡金沙酒店好不好
- Gartner 报告 | Web 应用防火墙需要哪些关键能力?