📗CSS辞典:currentColor、:placeholder-shown、:focus-within、overscroll-behavior

1,439 阅读3分钟

不积跬步,无以至千里;不积小流,无以成江海。

—— 荀子《劝学篇》

currentColor

currentColor 是 CSS 很早就给我们提供的一个变量,它等于当前元素的 color 属性值。

比如说下面这个

.foo {
    color: red;
    box-shadow: 0 0 2px currentColor;
}

.foo 中默认的文本颜色设置成了红色,在设置 box-shadow 的时候,指定为 currentColor ,就是说当前元素的阴影色也是红色的。

当然了,如果当前元素没有指定 color 属性,currentColor 就是指从祖先元素那里继承的 color 值。

兼容:IE9+ 和所有其他现代浏览器。

:placeholder-shown

:placeholder-shown 伪类是用在 <input><textarea> 上的。

名副其实,当元素设置了 placeholder 属性,并且我们没有在 <input>/<textarea> 中输入内容的时候,就是这个伪类起作用的时候。

input {
  border: 2px solid black;
  padding: 3px;
}

input:placeholder-shown {
  border-color: silver;
}

再稍微解释一下:有一个输入框设置了占位文本,占位文本显示的时候, 输入框边框颜色是银色,当你在输入框里输入内容后,占位文本不显示了,:placeholder-shown 就不起作用了,输入框边框就变成原来的默认黑色了。同理,我把输入框文本删除干净后,占位文本重新显示,那么 :placeholder-shown 就起作用了,输入框边框又恢复成银色。

兼容:Chrome 47+、Firefox 51+、Safair 9+。

:focus-within

:focus-within 这个伪类用在某个元素上时,什么时候起作用的呢?答案就是在元素自己或内部有元素 :focus 的时候。

比如说下面这种情况:

上面一个表单里包含两个输入框,当任意一个输入框聚焦了,表单背景就变黄了,而且 label 文字也从灰色变黑了。

代码很简单:

form:focus-within {
  background: #ff8;
  color: black;
}

是不是很方便呢,有时候子元素 focus 的时候,想控制下祖先元素的样式,就可以用这个属性啦。

兼容:Chrome 60+、Firefox 52+、Safair 10.1+。

overscroll-behavior

overscroll-behavior 是用来禁止“连锁滚动”的,很有用的。

遇到过下面这种情况吗?

滚动页面右下角这个小对话框里的内容,滚到底部,当我们继续往下滚动鼠标滚轮的时候,发现后面的主体页面也跟着滚动起来。

这是浏览器默认行为,可有时候我们不想要这样的效果,希望对话框内容滚动完毕后,后面的主体页面不要滚动。

这还是很好做的,我们只要为对话框指定下 overscroll-behavior 属性就可以了,属性置为 contain

.messages {
    overscroll-behavior: contain;
}

狠戳后面的链接查看效果:mdn.github.io/css-example…

overscroll-behavior 是一个复合属性,当我们设置 overscroll-behavior: contain; 的时候,相当于设置了 X 和 Y 轴两个方向上的行为,也就是说:

.messages {
    overscroll-behavior: contain;
}

/* 等同于 */
.messages {
    overscroll-behavior-x: contain;
    overscroll-behavior-y: contain;
}

向上面例子里的情况,如果我们只是想控制纵轴,也就是 Y 轴方向上的连锁滚动效果,只要使用

.messages {
    overscroll-behavior-y: contain;
}

就够了~

兼容:Chrome 63+、Firefox 59+。

(完)