CSS奇淫巧技( 持续更新 )

1,091 阅读3分钟

「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」。

在日常工作中有时候会遇到很多样式或者功能需要使用js配合设置,但是如果足够了解CSS的话,其中一部分的内容其实只使用CSS就可以实现;

所以我在这里会罗列我我个人使用频率比较高的小技巧,希望我自己能坚持维护这篇文章,以后再学到新的好的CSS使用方式,再更新进这篇文章;

如果有人能分享一些思路在评论区,我也会查阅资料后添加进来;

calc函数

一般我在处理一侧固定尺寸一侧自适应的页面会使用calc函数,因为无论是顶部还是侧边需要固定尺寸,那么另外一侧的宽度就可以直接使用calc函数计算出来了;

// 下面的例子就是左侧固定宽度,右侧自适应
.left {
  width: 100px;
  height: 100vh;
}

.right {
	width: calc(100% - 100px);
  height: 100vh;
}

当然calc不仅仅只有这么点作用,calse函数可以在css中进行简单的计算(加减乘除),他不仅可以对确定的值做计算,还可以对css变量进行计算;

// 下面的例子中'box-1'的宽永远占'box'的一半
.box {
  --myWidth: 1920px;
	width: var(--myWidth);
}

.box-1 {
	width: calc(--myWidth / 2);
  height: 100vh;
}

这样写还有一个好处就是如果项目中使用了类似lib-flexible的依赖对px进行了转化,那么就不会出现在js中动态修改尺寸需要重新计算的问题;

长文本超出自动转化为...

在项目中经常会遇到长文本的显示问题,而在一开始,我都是先判断字符串长度,然后根据适合的长度去截取字符串,再添加上'...',这样不仅麻烦,假设宽度出现变化,需要截取的长度也得跟着变化;

知道我发现了text-overflow这个属性,设置这个属性后,当块状元素内的文本溢出是自动转化为'...'

<p class="txt">aaaaaaaaaaaa</p>

<style>
.txt {
  overflow: hidden;
  text-overflow: ellipsis;
}
</style>

CSS选择器

我自己比较常用的是下面几个:

  • :nth-child(1) - 首先找到所有当前元素的兄弟元素,然后根据你输入的值匹配第几个元素
  • :last-child - 当前元素集合中的最后一个元素
  • :first-child - 当前元素集合中的第一个元素
  • :not()

前三个比较好理解,大家在日常中也应该经常使用,最后一个:not()我也是最近才发现的;大部分选择器都是进行赋值的操作,而:not()进行的是非的操作,并且他可以对选择器和元素进行操作;

// 设置非 <p> 元素的所有元素的背景色
:not(p) {
	color:#ff0000;
}

// 也可以直接使用伪类作为条件
// 但是有一个小问题,就是这里的p标签如果没有包裹在一个div下面的话是不起作用的,我也不明白为什么
p:not(:last-child) {
  color: #f40;
}