这里的神奇效果其实就是一些CSS中不怎么为人所知但在解决某些问题的时候很溜的属性。
border-radius
很多开发者估计都没有正确认识这个border-radius
,因为基本上很多人都是这么用的:
<code class="hljs css"><span class="hljs-class">.box</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">border-radius</span>:<span class="hljs-value"> <span class="hljs-number">4px</span></span></span>; }</span> </code>
稍微高端一点的是这样的:
<code class="hljs css"><span class="hljs-class">.box</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">border-radius</span>:<span class="hljs-value"> <span class="hljs-number">4px</span> <span class="hljs-number">6px</span> <span class="hljs-number">6px</span> <span class="hljs-number">4px</span></span></span>; }</span> </code>
然而,终极黑科技是这样用的:
<code class="hljs css"><span class="hljs-class">.box</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">border-radius</span>:<span class="hljs-value"> <span class="hljs-number">5px</span> <span class="hljs-number">5px</span> <span class="hljs-number">3px</span> <span class="hljs-number">2px</span> / <span class="hljs-number">5px</span> <span class="hljs-number">5px</span> <span class="hljs-number">1px</span> <span class="hljs-number">3px</span></span></span>; }</span> </code>
对,它可以赋8个值,没见过?不着急,具体的解释是这样的:
<code class="hljs">斜线前面的影响的是水平方向,斜线后面影响的是垂直方向,各个数字就分别代表四个不一样的方向。 </code>
outline-offset
相信很多开发者在写CSS的时候对下面的语句会很熟悉:
<code class="hljs css"><span class="hljs-tag">input</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">outline </span>:<span class="hljs-value"> none</span></span>; }</span> <span class="hljs-rule"><span class="hljs-attribute">input</span>:<span class="hljs-value">focus { outline : none</span></span>; } </code>
这就是将input
输入框去掉默认的蓝线框的方法。其实,这里还有说一个就是,CSS中还有一个outline-offset
属性,在这个属性中,你可以设置默认线框的距离;像这样
<code class="hljs css"><span class="hljs-tag">input</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">outline-offset</span>:<span class="hljs-value"> <span class="hljs-number">4px</span> </span></span>; }</span> </code>
调节该属性值的大小你就可以看到outline
的距离变化了。
类的声明
对于下面的类的声明,可能大家都很熟悉:
<code class="hljs css"><span class="hljs-class">.col-8</span> <span class="hljs-rules">{ }</span> </code>
这当然没什么,但是如果你这样写呢:
<code class="hljs css">.♥ <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">color</span>:<span class="hljs-value"> hotpink</span></span>; }</span> .★ <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">color</span>:<span class="hljs-value"> yellow</span></span>; }</span> </code>
嗯,看起来怎么样,你是可以这么用的:
<code class="hljs javascript"><div <span class="hljs-class"><span class="hljs-keyword">class</span></span>=<span class="hljs-string">"♥ ★"</span>><span class="xml"><span class="hljs-tag"></<span class="hljs-title">div</span>></span> </span></code>
只要是Unicode的,你都可以这么来声明你的类。
选中连续的几个元素
<code class="hljs css"><span class="hljs-tag">ol</span> <span class="hljs-rule"><span class="hljs-attribute">li</span>:<span class="hljs-value"><span class="hljs-function">nth-child</span>(n+<span class="hljs-number">7</span>):<span class="hljs-function">nth-child</span>(-n+<span class="hljs-number">14</span>) { background: lightpink</span></span>; } <span class="hljs-comment">/** Or Safari Way **/</span> <span class="hljs-tag">ol</span> <span class="hljs-rule"><span class="hljs-attribute">li</span>:<span class="hljs-value"><span class="hljs-function">nth-child</span>(-n+<span class="hljs-number">14</span>):<span class="hljs-function">nth-child</span>(n+<span class="hljs-number">7</span>) { background: lightpink</span></span>; } </code>
上面的这种写法其实就可以达到选中ol下面的第七到第十四个li元素。
伪类设置单标签
html中有几个常见的单标签:<br>
,<hr>
等。具体可以查看这里:
http://www.w3.org/TR/html5/syntax.html#void-elements
下面的示例是实现对<hr>
的修饰。
<code class="hljs css"><span class="hljs-rule"><span class="hljs-attribute">hr</span>:<span class="hljs-value">before { content: <span class="hljs-string">"♪♪"</span></span></span>; } <span class="hljs-rule"><span class="hljs-attribute">hr</span>:<span class="hljs-value">after { content: <span class="hljs-string">" This is an <hr> element"</span></span></span>; } </code>
没错,关键就是使用:before
和:after
这两个伪类。在这里,顺便说一点就是,其实你还可以用这两个伪类来修饰<meta>
和 <link>
,不过这个前提是,你把这两个的display
属性设置为:
<code class="hljs http"><span class="hljs-attribute">display</span>: <span class="hljs-string">block</span> </code>
属性区分大小写
假如我们在写html的时候有类似下面的代码:
<code class="hljs xml"><span class="hljs-tag"><<span class="hljs-title">div</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"box"</span>></span><span class="hljs-tag"></<span class="hljs-title">div</span>></span> <span class="hljs-tag"><<span class="hljs-title">input</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"email"</span>></span> </code>
然后我们用属性选择器进行CSS修饰:
<code class="hljs css"><span class="hljs-tag">div</span><span class="hljs-attr_selector">[class="box"]</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">color</span>:<span class="hljs-value"> blue</span></span>; }</span> <span class="hljs-tag">input</span><span class="hljs-attr_selector">[type="email"]</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">border</span>:<span class="hljs-value"> solid <span class="hljs-number">1px</span> red</span></span>; }</span> </code>
这样的声明方式毫无疑问地就会生效。然而,如果我们声明成下面这个样子,结果会是怎么样的呢:
<code class="hljs css"><span class="hljs-tag">div</span><span class="hljs-attr_selector">[class="BOX"]</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">color</span>:<span class="hljs-value"> blue</span></span>; }</span> <span class="hljs-tag">input</span><span class="hljs-attr_selector">[type="EMAIL"]</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">border</span>:<span class="hljs-value"> solid <span class="hljs-number">1px</span> red</span></span>; }</span> </code>
这变成了大写之后,第一个class="BOX"
并不会影响到<div class="box"></div>
,而第二个type="EMAIL"
还是会正常修饰<input type="email">
。所以在使用属性选择器的时候,注意大小写问题。
empty-cells
其实在table
中,你可以使用empty-cells
这个属性来指定相应的样式,比如:
<code class="hljs css"><span class="hljs-tag">table</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">empty-cells</span>:<span class="hljs-value"> hide</span></span>; }</span> </code>
上面这一行声明就可以将table元素中的空单元格隐藏起来。
border-image
其实这个在开发中可能会比较少见到,如果不是我特意去看文档,真心不会发现还有这个border-image,没错,就如名字的意思一样,你可以给border指定image:
<code class="hljs css"><span class="hljs-class">.border-image-example</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">-webkit-border-image</span>:<span class="hljs-value"> <span class="hljs-function">url</span>(border-image.jpg) <span class="hljs-number">45</span> <span class="hljs-number">20</span> <span class="hljs-number">45</span> <span class="hljs-number">30</span> repeat</span></span>; <span class="hljs-rule"><span class="hljs-attribute">-moz-border-image</span>:<span class="hljs-value"> <span class="hljs-function">url</span>(border-image.jpg) <span class="hljs-number">45</span> <span class="hljs-number">20</span> <span class="hljs-number">45</span> <span class="hljs-number">30</span> repeat</span></span>; <span class="hljs-rule"><span class="hljs-attribute">border-image</span>:<span class="hljs-value"> <span class="hljs-function">url</span>(border-image.jpg) <span class="hljs-number">45</span> <span class="hljs-number">20</span> <span class="hljs-number">45</span> <span class="hljs-number">30</span> repeat</span></span>; }</span> </code>
text-decoration
在习惯了对text-decoration
赋值为none
之后,我们需要重新来认识一下这一位小伙伴了,它其实是可以接受三个变量声明:
<code class="hljs css"><span class="hljs-tag">a</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">text-decoration</span>:<span class="hljs-value"> overline aqua wavy</span></span>; }</span> </code>
这三个分别是代表:text-decoration-line
, text-decoration-color
和 text-decoration-style
clip
可能很多人在刚开始使用clip的时候都是这样写的:
<code class="hljs css"><span class="hljs-class">.example</span> <span class="hljs-rules">{ <span class="hljs-rule"><span class="hljs-attribute">clip</span>:<span class="hljs-value"> <span class="hljs-function">rect</span>(<span class="hljs-number">110px</span>, <span class="hljs-number">160px</span>, <span class="hljs-number">170px</span>, <span class="hljs-number">60px</span>)</span></span>; }</span> </code>
然后很惊讶地发现竟然没有起作用,为什么呢?所以在这里需要注意的地方是clip是只在position
为absolute
或position
为fixed
时候起作用的。
::first-letter
这个感觉比较神奇,虽然对于我们常用CSS修饰中文文本可能没有很大的用处,不过我看到这个时候其实还是觉得比较意外的,竟然还有这个东西:
<code class="hljs cs"><div <span class="hljs-keyword">class</span>=<span class="hljs-string">'text'</span>> I am sample text </div> </code>
然后CSS可以这样写:
<code class="hljs css"><span class="hljs-rule"><span class="hljs-attribute">.text</span>:<span class="hljs-value">:first-letter { color: blue</span></span>; <span class="hljs-rule"><span class="hljs-attribute">background</span>:<span class="hljs-value"> yellow</span></span>; } </code>
第一个字母I就会被修饰到,很神奇。暂时就补充这么多….