超能刚哥

##CSS黑科技【随时更新】

发表于2015-07-31

首先感谢@JellyBool 大大写了这篇文章,后面我也会补充一下我暂时知道的一些实用技巧

以下是原文地址:

https://jellybool.com/post/css-that-you-may-not-know

http://segmentfault.com/a/1190000003023537?_ea=280655

昨天由于某些原因没有写博客,之前说好的每天一篇的,这篇是为了补昨天的了。然后我就要当一次标题党了。这里的黑科技其实就是一些CSS中不怎么为人所知但在解决某些问题的时候很溜的属性。

border-radius

很多开发者估计都没有正确认识这个border-radius,因为基本上很多人都是这么用的:

.box {
  border-radius: 4px;
}


稍微高端一点的是这样的:

.box {
  border-radius: 4px 6px 6px 4px;
}


然而,终极黑科技是这样用的:

.box {
  border-radius: 5px 5px 3px 2px / 5px 5px 1px 3px;
}

对,它可以赋8个值,没见过?不着急,具体的解释是这样的:

斜线前面的影响的是水平方向,斜线后面影响的是垂直方向,各个数字就分别代表四个不一样的方向。

outline-offset

相信很多开发者在写CSS的时候对下面的语句会很熟悉:

input {
    outline : none;
}

input:focus {
    outline : none;
}

这就是将input输入框去掉默认的蓝线框的方法。其实,这里还有说一个就是,CSS中还有一个outline-offset属性,在这个属性中,你可以设置默认线框的距离;像这样

input {
    outline-offset: 4px ;
}

调节该属性值的大小你就可以看到outline的距离变化了。

类的声明

对于下面的类的声明,可能大家都很熟悉:

.col-8 {

}

这当然没什么,但是如果你这样写呢:

.♥ {
  color: hotpink;
}

.★ {
  color: yellow;
}

嗯,看起来怎么样,你是可以这么用的:


<div class="♥ ★"></div>



只要是Unicode的,你都可以这么来声明你的类。

选中连续的几个元素

ol li:nth-child(n+7):nth-child(-n+14) {
  background: lightpink;
}
/** Or Safari Way **/
ol li:nth-child(-n+14):nth-child(n+7) {
  background: lightpink;
}

上面的这种写法其实就可以达到选中ol下面的第七到第十四个li元素。

伪类设置单标签

html中有几个常见的单标签:<br> ,<hr>等。具体可以查看这里:

http://www.w3.org/TR/html5/syntax.html#void-elements

下面的示例是实现对<hr>的修饰。

hr:before {
    content: "♪♪";
}

hr:after {
    content: " This is an 

<hr>

 element";
}

没错,关键就是使用:before:after这两个伪类。在这里,顺便说一点就是,其实你还可以用这两个伪类来修饰<meta><link>,不过这个前提是,你把这两个的display属性设置为:

display: block

属性区分大小写

假如我们在写html的时候有类似下面的代码:


<div class="box"></div>


<input type="email">

然后我们用属性选择器进行CSS修饰:

div[class="box"] {
  color: blue;
}

input[type="email"] {
  border: solid 1px red;
}

这样的声明方式毫无疑问地就会生效。然而,如果我们声明成下面这个样子,结果会是怎么样的呢:

div[class="BOX"] {
  color: blue;
}

input[type="EMAIL"] {
  border: solid 1px red;
}

这变成了大写之后,第一个class="BOX"并不会影响到<div class="box"></div>,而第二个type="EMAIL"还是会正常修饰<input type="email">。所以在使用属性选择器的时候,注意大小写问题。

目前就只觉得这些CSS黑科技需要提醒自己一下,有可以补充。


以下是原作者后来发的补充篇:

继上一次写的CSS黑科技之后,这次貌似还专门去找了一些CSS中可能还是比较不太会引起开发者注意的属性。

empty-cells

其实在table中,你可以使用empty-cells这个属性来指定相应的样式,比如:

table {
  empty-cells: hide;
}

上面这一行声明就可以将table元素中的空单元格隐藏起来。

border-image

其实这个在开发中可能会比较少见到,如果不是我特意去看文档,真心不会发现还有这个border-image,没错,就如名字的意思一样,你可以给border指定image:

.border-image-example {  
    -webkit-border-image: url(border-image.jpg) 45 20 45 30 repeat;  
    -moz-border-image: url(border-image.jpg) 45 20 45 30 repeat;  
    border-image: url(border-image.jpg) 45 20 45 30 repeat;
}

text-decoration

在习惯了对text-decoration赋值为none之后,我们需要重新来认识一下这一位小伙伴了,它其实是可以接受三个变量声明:

a {
  text-decoration: overline aqua wavy;
}

这三个分别是代表:text-decoration-linetext-decoration-colortext-decoration-style

注:这几个属性实际上几乎只有火狐浏览器才支持

clip

可能很多人在刚开始使用clip的时候都是这样写的:

.example {
    clip: rect(110px, 160px, 170px, 60px);
}

然后很惊讶地发现竟然没有起作用,为什么呢?所以在这里需要注意的地方是clip是只在positionabsolutepositionfixed时候起作用的。

::first-letter

这个感觉比较神奇,虽然对于我们常用CSS修饰中文文本可能没有很大的用处,不过我看到这个时候其实还是觉得比较意外的,竟然还有这个东西:


<div class='text'>
    I am sample text
</div>

注:还有个::first-line伪元素,效果如其名

然后CSS可以这样写:

.text::first-letter {
  color: blue;
  background: yellow;
}

第一个字母I就会被修饰到,很神奇。暂时就补充这么多….


个人补充:

currentColor

这是一个神奇的属性值,可以用在除了color属性之外的任何需要使用颜色值的地方。这个属性值相当于一个变量,其实际值与元素的color值一致,例如下面的


.foo{
    color: #f00;
    border: solid 2px currentColor;
}

嘿嘿,.foo元素的文字颜色和边框颜色皆为红色

:empty伪类

可以匹配不包含任何子节点(文本节点甚至空格)的空元素
例如下面的


.foo:empty{
    display: none;
}

就可以隐藏掉没有包含任何内容的.foo元素

text-align:-webkit-center;

可以让其设置了该规则的元素的块级子元素水平居中,而且这个属性是祖传的,孙子重孙子都会被影响到。

text-decoration

咳咳。这个属性相信没有人没用过,但是你知道么?这个属性可是支持同时写多个值的,例如:


.foo{
    text-decoration: underline overline line-through;
}

啦啦啦,看这里!

响应式的正方形

以前想要实现响应式的正方形,都是用一个透明的正方形图片做占位来实现的。实际上大多数情况下都可以用width配合padding-bottom来实现,看代码:


.foo{
    width: 20%;
    margin: 10px;
    padding-bottom: 20%;
    background-color: #f60;
}

只要width和padding-bottom的值保持一致并且都是百分比的值就行了~

该文章暂无评论,赶快抢占沙发!

发表评论

电子邮件地址不会被公开。 必填项已用*标注