阅读更多

2顶
1踩

Web前端

转载新闻 12个你未必知道的CSS小知识

2014-08-26 14:10 by 见习编辑 u012797015 评论(3) 有10653人浏览

虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过。

1.CSS的color属性并非只能用于文本显示

对于CSS的color属性,相信所有Web开发人员都使用过。如果你并不是一个特别有经验的程序员,我相信你未必知道color属性除了能用在文本显示,还可以用作其它地方。

你可以先看一下下面的演示:

HTML代码

<img alt="Example alt text" width="200" height="200">

<ul>
  <li>Example list item</li>
</ul>

<ol>
  <li>Example list item</li>
</ol>

<hr>

CSS代码

body {
  color: yellow;
  background: #444;
  font-size: 20px;
  font-family: Arial, sans-serif;
  text-align: center;
}

ul {
  border: solid 2px;
  text-align: left;
}

ol {
  text-align: left;
}

hr {
  border-color: inherit;
}

 

请注意,上面的代码里只使用了一个color属性,就是在body元素上,设置成了yellow。但是,你也看到了,所有这个页面上的东西都变成了黄色,包括:

  • 无法显示的图片的alt文字
  • list元素的边框
  • 无序list元素前面的小点
  • 有序list元素前面的数字
  • 还有hr元素

有趣的是,这个hr元素,缺省情况下它并不从body上继承color的属性,但我使用border-color: inherit强制让它继承。这是个很诡异的特征。

CSS规范里是这样说的:

这个属性声明了元素文本内容的前景色(foreground color)。除此之外,它的值还被用于其它地方间接的引用….比如,其它可以接受颜色值的属性。

我无法想象出还有什么地方的属性能用“前景色”来描述,如果你知道,请在评论里告诉我。

 

2.CSS里的visibility属性有个collapse属性值:collapse

对于CSS里的visibility属性,相信你用过不下几百次。大多时候,你会把它的值设置成visible(这是所有页面元素的缺省值),或者是hidden。后者相当于display: none,但仍然占用页面空间。

其实visibility可以有第三种值,就是collapse。当一个元素的visibility属性被设置成collapse值后,对于一般的元素,它的表现跟hidden是一样的。但例外的是,如果这个元素是table相关的元素,例如table行,table group,table列,table column group,它的表现却跟display: none一样,也就是说,它们占用的空间也会释放。

但遗憾的是,各种浏览器对collapse值的处理方式不一样。看一下下面的演示:

HTML代码

<table cellspacing="0" class="table lazy ">
  <tr>
    <th>Fruits</th>
    <th>Vegetables</th>
    <th>Rocks</th>
  </tr>
  <tr>
    <td>Apple</td>
    <td>Celery</td>
    <td>Granite</td>
  </tr>
  <tr>
    <td>Orange</td>
    <td>Cabbage</td>
    <td>Flint</td>
  </tr>
</table>

<p><button>collapse行1</button></p>

<p><button>hide行1</button></p>

<p><button>重置</button></p>

CSS代码

body {
  text-align: center;
  padding-top: 20px;
  font-family: Arial, sans-serif;
}

table {
  border-collapse: separate;
  border-spacing: 5px;
  border: solid 1px black;
  width: 500px;
  margin: 0 auto;
}

th, td {
  text-align: center;
  border: solid 1px black;
  padding: 10px;
}

.vc {
  visibility: collapse;
}

.vh {
  visibility: hidden;
}

button {
  margin-top: 5px;
}

Javascript代码

var btns = document.getElementsByTagName('button'),
    rows = document.getElementsByTagName('tr');

btns[0].addEventListener('click', function () {
  rows[1].className = 'vc';
}, false);

btns[1].addEventListener('click', function () {
  rows[1].className = 'vh';
}, false);

btns[2].addEventListener('click', function () {
  rows[1].className = '';
}, false);

 

CSS-Tricks的Almanac建议说不要使用这个值,因为浏览器的不统一。

据我的观察:

  • 在谷歌浏览器里,使用collapse值和使用hidden值没有什么区别。 (See this bug report and comments)
  • 在火狐浏览器、Opera和IE11里,使用collapse值的效果就如它的字面意思:table的行会消失,它的下面一行会补充它的位置。

说实话,估计这个值很少人会使用它,但你要知道确实可以使用这样的一个值,如果以前不知道它,那么,现在,在有些罕见的地方,你也许就会变得聪明一点了。

 

3.CSS的background简写方式里新增了新的属性值

在CSS2.1里,background属性的简写方式包含五种属性值 – background-color, background-image, background-repeat, background-attachment, and background-position。从CSS3开始,又增加了3个新的属性值,加起来一共8个。下面是按顺序分别代表的意思:

background: [background-color] [background-image] [background-repeat]
            [background-attachment] [background-position] / [ background-size]
            [background-origin] [background-clip];

注意里面的反斜杠,它更font和border-radius里简写方式使用的反斜杠的用法相似。反斜杠可以在支持这种写法的浏览器里在position后面接着写background-size

除此之外,你开可以增加另外两个描述它的属性值: background-originbackground-clip.

它的语法用起来像下面这个样子:

.example {
  background: aquamarine url(img.png)
              no-repeat
              scroll
              center center / 50%
              content-box content-box;
}
关于浏览器的支持情况,大概所有的现代浏览器都支持这些新属性值,但对于一些非常老旧的浏览器(IE6/7/8),最好在代码里提供一些万一不支持的补救机制。

 

4.CSS的clip属性只在绝对定位的元素上才会生效

之前说到了background-clip,你可能会想到clip属性。它的用法是下面这个样子:

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

它的作用是按指定的尺寸、规定的大小裁剪元素。很多简单,但唯一你需要注意的事情是,clip只会在绝对定位的元素上生效。所有,你必须这样做:

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

但是,你也可以将元素的position设置成position: fixed,因为,根据css官方规范fixed的元素也属于‘absolutely positioned’元素。

 

5.元素竖向的百分比设定是相对于容器的宽度,而不是高度

这是一个很让人困惑的CSS特征,我之前也谈到过它。我们大家都知道,当按百分比设定一个元素的宽度时,它是相对于父容器的宽度计算的,但是,对于一些表示竖向距离的属性,例如padding-top,padding-bottom,margin-top,margin-bottom等,当按百分比设定它们时,依据的也是父容器的宽度,而不是高度。

下面是一个实例演示,你可以调整容器的宽度,但你会发现,黄块块的padding-bottom的距离也会随之宽度而变大或变小。

HTML代码

<div class="wrapper lazy " id="w">
  <div class="box lazy " id="b"></div>
</div>

<input type="range" min="120" max="400" value="400" class="range lazy " id="r">
<output>宽度是: <span id="op">400px</span></output>
<output>黄块块的Padding bottom是:<br><span id="op2">10%</span></output>

CSS代码

body {
  font-family: Arial, sans-serif;
  padding-top: 30px;
  text-align: center;
}

.wrapper {
  width: 400px;
  margin: 0 auto;
  border: solid 1px black;
}

.box {
  width: 100px;
  height: 100px;
  background: gold;
  margin-left: auto;
  margin-right: auto;
  padding-top: 10%;
  padding-bottom: 10%;
  margin-bottom: 5%;
}

.range {
  display: block;
  margin: 20px auto;
}

output {
  text-align: center;
  display: block;
  font-weight: bold;
  padding-bottom: 20px;
}

output span {
  font-weight: normal;
}

 

上面的代码中,我们对内部子元素声明了3个竖向的距离,都是百分比形式。当移动滑块时,我们的js代码只需修改了容器的宽度。但是,这个这三个属性高度都跟随着变化,可以看出,它们的百分比计算是基于容器的宽度,而不是高度的。

6.border属性比你想象的要复杂

我们很多人都用过这样的写法:

.example {
  border: solid 1px black;
}

这里的border属性的用法实际上是一种简写的形式,它分别设置了border-style, border-width, 和border-color — 用一句代码表示它们三个。

但不要忘记,border-style, border-width, 和border-color也都有自己的简写形式。所以,border-width可以写成这样:

.example {
  border-width: 2px 5px 1px 0;
}

这样,四个边的宽度被一次设定。border-colorborder-style 属性也可以这样做。下面的这个实例演示就是用的这种写法:

HTML代码

<div class="box lazy ">

CSS代码

body {
  font-family: Arial, sans-serif;
}

.box {
  width: 150px;
  height: 150px;
  margin: 20px auto;
  border-color: peachpuff chartreuse thistle firebrick;
  border-style: solid dashed dotted double;
  border-width: 10px 3px 1px 8px;
}

p {
  text-align: center;
}

其实,这些每个属性还可以继续细化,被拆分成border-left-style, border-top-width, border-bottom-color….

但是,你无法用border的简写分别对四个边设置不同的值,只能分开来设置。所以,border是一个简写里还有简写的属性。

7.text-decoration属性变成了属性简写

我相信有些小知识会让你大吃一惊。

跟着最新的CSS规范,text-decoration现在的写法是这样的:

a {
  text-decoration: overline aqua wavy;
}

text-decoration属性现在需要用三种属性值来表示了:text-decoration-line, text-decoration-color, and text-decoration-style.

但不幸的是,目前只有火狐浏览器实现了对这些新属性的支持。

你可以用火狐浏览器试一试下面的演示:

HTML代码

<a href="#" id="a">IT'S LIKE WATER, PEOPLE

(You should see a wavy line on top. Currently works only in Firefox)

CSS代码

body {
  padding: 30px;
  text-align: center;
  font-family: Arial, sans-serif;
}

a, a:visited {
  color: blue;
  background: aqua;
  -moz-text-decoration-color: aqua;
  -moz-text-decoration-line: overline;
  -moz-text-decoration-style: wavy;
  text-decoration-color: aqua;
  text-decoration-line: overline;
  text-decoration-style: wavy;
}

 

在这演示中,我们没有使用简写形式,而是分开描述每个属性。这是可以更好的保证浏览器的向后兼容,使那些目前不支持这种写法的浏览器也不受影响。

 

8.border-width属性可以使用预定义常量值

也许对与你来说这并不是一个什么新鲜信息。除了可以使用标准宽度值(例如5px或1em)外,border-width属性可以接受预定义的常量值:medium, thin, 和 thick

事实上,如果你不给border-width属性赋值,那它的缺省值是“medium”。下面的演示就是用了预定义常量值:

HTML代码

<div class="example lazy ">

CSS代码

body {
  font-family: Arial, sans-serif;
  text-align: center;
}

.example {
  width: 100px;
  height: 100px;
  margin: 20px auto;
  background: aqua;
  border: solid thick red;
}

在浏览器使用这些预定义常量值时,CSS规范里并没有规定都应该是什么宽度,但从我的观察看,它们的值分别是 1px, 3px, 和 5px.

 

9.为什么没有人使用border-image

之前我曾经写过一篇关于CSS的border-image属性的文章。现在几乎所有的现代浏览器都支持这个属性——除了IE10及以下IE版本。

看起来这是一个非常漂亮的CSS功能,它可以让你用图片修饰元素的边框。下面是一个实例演示,你可以拖拽调整里面的方块的大小,看看有什么边框图案的变化。

HTML代码

<div class="bi lazy ">
<p><上面的方块使用了图片描边。在这个方块的右下角,有一个可以调整这个方块大小的小三角,点住它,拖动它调整方块大小,看看有什么效果。.</strong></p>

<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
</div>

CSS代码

body {
  font-family: Arial, sans-serif;
  text-align: center;
}

.bi {
    border: 45px solid transparent;
    -webkit-border-image: url(http://www.webhek.com/wordpress/wp-content/uploads/2014/07/bg-pawprints-all.jpg) 45 round;
    -moz-border-image: url(http://www.webhek.com/wordpress/wp-content/uploads/2014/07/bg-pawprints-all.jpg) 45 round;
    border-image: url(http://www.webhek.com/wordpress/wp-content/uploads/2014/07/bg-pawprints-all.jpg) 45 round;
    font-family: Arial, Helvetica, sans-serif;
    color: #222;
    width: 500px;
    margin: 30px auto 30px auto;
    overflow: hidden;
    resize: both;
}

但不幸的是,这么好的一个功能,却没有看到多少人使用它,也许是我的眼界太窄。如果你在哪看到过有人使用border-image属性,或你在真正项目中使用了它,请留言告诉我。

10.你知道table里的empty-cells属性吗?

css里的empty-cells属性是所有浏览器都支持的,甚至包括IE8,它的用法是下面这个样子:

table {
  empty-cells: hide;
}

估计你从语义上已经猜出它的作用了。它是为HTML table服务的。它会告诉浏览器,当一个table单元格里没有东西时,就隐藏它。下面的演示里,你可以点击里面按钮,它会切换empty-cells的属性值,看看table的显示有什么变化。

HTML代码

<table cellspacing="0" id="table">
  <tr>
    <th>Fruits</th>
    <th>Vegetables</th>
    <th>Rocks</th>
  </tr>
  <tr>
    <td></td>
    <td>Celery</td>
    <td>Granite</td>
  </tr>
  <tr>
    <td>Orange</td>
    <td></td>
    <td>Flint</td>
  </tr>
</table>
  
<button id="b" data-ec="hide">切换EMPTY-CELLS</button>

CSS代码

body {
  text-align: center;
  padding-top: 20px;
  font-family: Arial, sans-serif;
}

table {
  border: solid 1px black;
  border-collapse: separate;
  border-spacing: 5px;
  width: 500px;
  margin: 0 auto;
  empty-cells: hide;
  background: lightblue;
}

th, td {
  text-align: center;
  border: solid 1px black;
  padding: 10px;
}

button {
  margin-top: 20px;
}

js代码

var b = document.getElementById('b'),
    t = document.getElementById('table');

b.onclick = function () {
  if (this.getAttribute('data-ec') === 'hide') {
    t.style.emptyCells = 'show';
    this.setAttribute('data-ec', 'show');
  } else {
    t.style.emptyCells = 'hide';
    this.setAttribute('data-ec', 'hide');
  }
};

11.font-style的oblique属性值

对与css的font-style属性,我估计大家每次见到的都是使用“normal”或 “italic”两个属性值。但事实上,你还可以让它赋值为“oblique”。请看下面的演示:

HTML代码

<h1>Oblique Text</h1>

<h1>Italic Text</h1>

CSS代码

h1 {
  font-weight: normal;
  font-family: Georgia, serif;
  font-style: oblique;
  text-align: center;
  font-size: 50px;
}

h1:nth-child(2) {
  font-style: italic;
}

p {
  font-family: Arial, sans-serif;
  text-align: center;
}

12.word-wrap和overflow-wrap是等效的

word-wrap并不是一个很常用的CSS属性,但在特定的环境中确实非常有用的。我们经常使用的一个例子是让页面中显示一个长url时换行,而不是撑破页面,下面是一个例子。

HTML代码

<p class="p lazy " id="p">supercalifragilisticexpialidocious</p>

<button id="b" data-ww="break-word">TOGGLE word-wrap</button>

CSS代码

body {
  font-family: Arial, sans-serif;
  text-align: center;
}

.p {
  font-size: 24px;
  text-align: center;
  width: 200px;
  margin: 20px auto;
  border: solid 1px black;
  min-height: 60px;
  }<
    
  • 大小: 43 KB
来自: 歪脖骇客
2
1
评论 共 3 条 请登录后发表评论
3 楼 lancijk 2014-09-01 14:58
mfkvfn 写道
第一个,永远不要那么用。
第二个,浏览器不兼容。
第三个,CSS3功能,天朝用不上。
第四个,限制太多,还不如用overflow+固定大小容器。
第五个,是浏览器Bug。
第六个,是常识。
第七个,浏览器不兼容。
第八个,是常识。
第九个,CSS3功能,天朝用不上,外国人喜欢简洁。
第十个,不兼容IE7。
第十一个,与italic效果一样。
第十二个,CSS3功能,天朝用不上。


你是CSS大牛, 但是楼主也不弱,尤其是这种share精神更值得点赞.. 我为楼主点个赞.
2 楼 mfkvfn 2014-08-27 10:12
第一个,永远不要那么用。
第二个,浏览器不兼容。
第三个,CSS3功能,天朝用不上。
第四个,限制太多,还不如用overflow+固定大小容器。
第五个,是浏览器Bug。
第六个,是常识。
第七个,浏览器不兼容。
第八个,是常识。
第九个,CSS3功能,天朝用不上,外国人喜欢简洁。
第十个,不兼容IE7。
第十一个,与italic效果一样。
第十二个,CSS3功能,天朝用不上。
1 楼 winhell 2014-08-26 22:56
因为ie8神一样的存在,所以上面说的几乎没有任何用处。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 攒机笔记二十:改造笔记本电脑(华硕A555L)

    同事拿了一个旧的笔记本给我看看,问我能不能帮忙给硬件升下级。 笔记本的具体信息如下: 型号:华硕A555L cpu:i5-5200u 硬盘:500g东芝MQ01ABF050 内存:4g 我查了一下,准确的型号应该是华硕A555LF5200(4GB...

  • 电脑键盘部分按键失灵_华硕笔记本键盘有部分按键失灵 - 卡饭网

    华硕笔记本键盘失灵解决方法华硕笔记本键盘失灵解决方法 今天我华硕笔记本键盘按字母键会显示成数字,很是纠结。 上网查了一下原来笔记本电脑小键盘数字键和字母键是整合在一起的。 字幕编程数字解决办法:按Fn (在...

  • Thinkpad常见问题大全(转载联想工程师博客)

    想要收藏本篇文章请下载Word版 Q:我想升级成VISTA,想问一下,升级之后一键恢复是恢复到XP还是VISTA?A:如果从隐含分区恢复出厂设置,那当然是恢复到出厂时预装的系统;如果是用R&amp;amp

  • 主板检测卡c5_主板检测卡上的05.00是什么意思帮帮忙

    7A 检测&安装co-处理器(SORRY,这里我看不明白) 7F 1. 当支持全屏幕图像图形时,转换到文本模式。 - 如果错误发生报告错误并等待键盘输入。 - 如果并未发生错误,或F1按键被按下时继续: 显示/隐藏开机画面或自行...

  • ATI X550系列显卡的毛病的解决

    先描述下症状:1、进入极品飞车等3D游戏时,弹出出错。装了调试器VC弹出调试,。如果关掉去掉调试,程序闪一下及退出2、播放某些视频时,发生一个奇怪的现象,这...最后得出结论:千万配电脑时主板芯片和显卡芯片要兼容

  • 一台显示器分成双屏_华硕显示器贴心相伴:云办公、云学习宅家无忧

    然而长时间的电脑前上课,对学生的眼睛也是一种负担,这就需要一款护眼显示器来帮忙啦,华硕VZ279HE爱眼显示器,锐翼轻薄的窄边框设计,外型时尚高端颜值超高,搭载德国莱茵TUV滤蓝光不闪屏爱眼技术,有效保护眼睛,...

  • 计算机无法拔出gtx950,无法安装gtx950m图形卡驱动程序,并且无法打开nvidia控制面板. 求神帮助解决. 电脑...

    感叹号,显然驱动程序未正确安装但是您可以先安装驱动程序,但也可以转到官方网站计算机配置足够,请查看是驱动程序还是游戏问题打开设备管理器(右键单击“开始”以找到它),单击显示适配器,然后查看是否有三角形...

  • 计算机要学CAD3d吗,我是学电脑设计的需要用3D和CAD等软件希望大家能帮我看看这? 爱问知识人...

    1 935.00 主板 升技 IL8 1 720.00 内存 金士顿 512MB DDRII 533 2 365.00 硬盘 希捷 Barracuda 7200.9 160GB(SATA) 1 525.00 光驱 BenQ 1650V 1 165.00 显卡 华硕 EN7600GT/2DHT/256M 1 999.00 机箱 富士康 聚龙785...

  • 华硕K40AB笔记本重装系统蓝屏0x000000B4解决方法

    同事的一台华硕K40AB笔记本,说是坏了好久了,让我帮忙给他修一下。 拿来一看,笔记本惨不忍睹,不是一般的脏!还是女同事呢···· 女同事描述病症: 开不了机,有蓝色的图案。 我说,蓝底白字?嗯! 好吧,...

  • 替朋友求一台机子!有疑问待解决 希望各位老师 朋友帮忙

    我看了一款华硕 K40E64IN-SL 大家帮我参考下,觉得它配置够用了? 他的显卡NVIDIA GeForce G 102M 我有点看不懂,比NG 9300 GS如何?! 下面是其一些参数: 处理器系列 英特尔 酷睿2双核 T6系列 处理器...

  • 如何 DIY 一台属于你自己的电脑?

    对于显卡的挑选,大家可以结合我上面的描述从文章最后附的 2017 显卡天梯图进行选择,看看哪款是你的最爱。 四、内存条及硬盘 关于内存条的选择,首先,要看你的主板,你的主板兼容几代内存,经常有人叫我...

  • 打造黑苹果(一)组装硬件的选择与组装

    那么,这里就涉及到一个问题,那就是你必须有一台mac电脑。而macbookpro动辄上万的价格,而macmini貌似不能满足你对性能的追求,又或者,手头确实紧张,无论出于什么需求,可能你都动过黑一台MAC的念头。我本人有一...

  • linux dsdt屏蔽显卡,关于DSDT屏蔽独显的一点认识和方法

    装了黑苹果好长时间了,几乎解决了其余的所有问题,但是由于电脑是双显卡,加上inter的双显卡切换技术。。独显一直无法屏蔽,开机温度平常都是56度自己翻了许多关于屏蔽独显的帖子,试图修改dsdt,可惜都没有成功。...

  • 买新电脑要考虑的一些问题

    买电脑需要考虑的电脑配置 品牌:(个人罗列,排名不分先后,蓝色为本人比较了解的,不懂可以私聊本人) 华硕、联想、苹果、戴尔、三星...由于个人认为软件的问题不是问题(PS:安装的输入法不喜欢(卸载安装自己喜

  • 电脑疑难问题42问及解答!!

    1问:请问操作系统是XP,ip地址释放不掉,是什么原因。 答:XP的IP地址是自动获得的,你可以先把本地连接给禁用然后在启用本地连接,XP...用f8,提示是你的机器无法正常启动,可能是由于硬件或软件的最新变动所致,请

  • “国美诚信保障服务不诚信”.PK.“华硕坚若磐石品质不磐石”

    本人于2008年6月8日在国美电器深圳...接着蓝屏黑屏都来了,我吓的不轻,赶紧在周末(2008年6月14日)到华硕售后服务中心检查,经过将近四个小时艰苦的等待,最后得出的结论是“硬件没有问题,属系统驱动问题”,逐...

  • 买电脑需要考虑的电脑配置

    品牌:(个人罗列,排名不分先后,蓝色为本人比较了解的,不懂可以私聊本人) ...由于个人认为软件的问题不是问题(PS:安装的输入法不喜欢(卸载安装自己喜欢的输入法),漏洞修复问题(如果电脑很好,找...

  • 有电脑的这十年

    尤其是周围的同学都买了电脑,于是08年寒假和堂哥一起再去珠江路买电脑,我看上的是配置普通但牌子听起来还不错的富士通,而堂哥选的是高配的华硕,其中原因可能源于在计算机科学导论课上赵丰年老师请的一位外国人做...

  • 新手电脑硬件软件故障解答(一)

    显示器色彩偏红正常吗 问:我最近买了一台19英寸CRT纯平显示器,使用时发现它显示色彩偏红,检查信号线没有发现问题,更换了一台还是一样,请问这是什么原因? 答:这个应该没什么问题。一般专业的显示器生产厂商...

  • 微信小程序-番茄时钟源码

    微信小程序番茄时钟的源码,支持进一步的修改。番茄钟,指的是把工作任务分解成半小时左右,集中精力工作25分钟后休息5分钟,如此视作种一个“番茄”,而“番茄工作法”的流程能使下一个30分钟更有动力。

Global site tag (gtag.js) - Google Analytics