12个很少被人知道的CSS事实

时间:2022-09-09 23:43:14

之前没有认真的研究过,padding-bottom的值如果是百分比,那么它的实际值是根据父类的宽度来调整的。我还以为是根据这个元素的本身的宽度来定义呢?汗。。padding-top/padding-left/padding-right也是一样算。

不过现在有一个CSS3属性叫box-sizing,可以取值

box-sizing:content-box | border-box

content-box:
padding和border不被包含在定义的width和height之内。对象的实际宽度等于设置的width值和border、padding之和,即 ( Element width = width + border + padding )
此属性表现为标准模式下的盒模型。
border-box:
padding和border被包含在定义的width和height之内。对象的实际宽度就等于设置的width值,即使定义有border和padding也不会改变对象的实际宽度,即 ( Element width = width )
此属性表现为怪异模式下的盒模型。

示例:

content-box:

.test1{ box-sizing:content-box; width:200px; padding:10px; border:15px solid #eee; }
12个很少被人知道的CSS事实

border-box:

.test2{ box-sizing:border-box; width:200px; padding:10px; border:15px solid #eee; }

12个很少被人知道的CSS事实
当出现用box-sizing:border-box时,它的大小同样是根据父类的宽度来调整的。但整体还是width。
 

CSS不是一门很复杂的语言,但是即使你已经写css很多年了,也很有可能遇到一些新玩意儿-某些属性从来没用过,某些值从来未曾考虑,或者某些规范细则你从来不知道。

我经常会遇到一些css小细节,所以我想在这片文章中和大家分享,需要承认的是,这篇文章中的很多东西并不具有实操价值,但也许你可以留作后用。

body上的color不只是应用于文字

让我们从最简单的开始吧,color属性是被广泛运用的属性,某些人可能不曾注意,它并不仅仅只是定义文本的颜色。

让我们看这个例子:

请注意我们只是给body设定了color为yellow,但是你可以看到,页面里的元素都变成了黄色,他们包括:

  • 图片的alt文字的值,就是当图片源载入不了时显示的文字
  • 列表元素的边框
  • 无序列表的点
  • 有序列表的数字
  • hr元素

有趣的是,hr元素默认是不会继承color属性得,我需要强制他继承border-color: inherit,这对我来说有点怪异。

W3c规范是这么定义的:

这个属性用来描述元素的文本的前景颜色,附带被用来为其他接受颜色值的其他属性提供潜在的间接的值。

我不是很明确地知道有哪些是被当做所谓的前景的,如果你知道的话,请在评论中告诉我。

visibility还可以设置 “collapse”值

你可能已经用过visibility上千遍了,最常用的是visible和hidden,用来使元素显示或者隐藏。

还有第三个很少被用到的值是collapse,除了在表格的行,列中使用有差异外,他和hidden的作用是等同的。

下面让我们看看在表格元素中,collapse是怎么工作的,不过前提是table的border-collapse需要设定成separate才会有效果哦!

CSS-Trick 网站的Almanac同学说不要用这个属性,因为这个属性存在兼容问题。

我的测试结果是:

  • 在Chrome中,collapse和hidden的表现并无不同(请看bug报告和讨论
  • 在firefox,opera和ie11中,collpase的工作是正常的,那就是,表格的行被清除了,而且不再占据空间。

我得承认,这个值可能很少会被用到,但是他确实是存在的。

background这个简写又有了新值

在css2.1中,background是这5个值的缩写,background-color, background-image, background-repeat, background-attachment, background-position。现在,在css3中,又有三个成员被加进来了,现在总共有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-origin和background-clip。

实操中语法会变成这个样子

.example {
background: aquamarine url(img.png)
no-repeat
scroll
center center / 50%
content-box content-box;
}

让我们在demo中来一起 感受它:

这些新值在现代浏览器中工作完美,但是你可能需要为不支持的浏览器优雅降级。

clip只对absolute元素和fixed元素有效

上边我们谈到了backgrond-clip,现在我们谈谈clip,我们一般是这么写的:

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

我们用这个方法来剪切元素的一部分,但是它的前提是这个元素必须是absolute定位的(这里有解释),所以代码变成这样

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

你可以看到当我们切换这个元素absolute定位的时候,clip也会跟着变化:

你也可以通过设定position:fixed来让clip变得有效,因为根据规范,fixed元素有资格被当做absolute元素。

垂直百分比是根据父层的宽度计算的,而不是父层高度计算的

这个说起来有一点麻烦,你应该知道百分比宽度是根据父层的宽度计算的,但是如果像padding,margin这样的属性用上百分比的时候,最终的结果是根据父层的宽度计算的,而不是根据父层的高度计算。

大家来看这个例子:

注意当我们滑动滑块的时候,只是改变了父层容器的宽度,但是padding-bottom的值却产生了变化。

border实际上是简写属性的简写

我们都写过这样的语句:

.example {
border: solid 1px black;
}

border属性是border-style,border-width,border-color的简写 但是请不要忘了,这三个属性每个属性都包含有自身的简写,比如:

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

这样会让四个border获得不同的宽度,同理,border-color和border-style也是这样:

这里的重点是,你没法用border这个属性为四条边做出不同的颜色,宽度,样式,所以属性简写再简写后,表达就变得不那么精确了。

text-decoration实际上是三种属性的简写

我知道这篇文章所说的的可能会让你有一点点晕。

根据w3c规范,现在这个语句是符合标准的:

a {
text-decoration: overline aqua wavy;
}

text-decoration现在是这三个属性的缩写:text-decoration-line, text-decoration-color和text-decoration-style.

不幸的是,目前只有firefox一家支持这个新属性:

在这个demo中,我们用了类似text-decoration-color这样的写法,我知道这样写很不爽,因为目前很多浏览器不支持,如果我们直接写text-decoration: overline aqua wavy;的话,无疑目前的浏览器识别不了这样的写法,于是只能不解析有,所以为了向下兼容,我们只能这么写了。

border-width 支持关键字值

这个并不是那么惊天地泣鬼神,但是除了接受标准的值外(像5px或者1em),border-width同时还接受三个关键字值: medium, thin,和 thick。

实际上,border-width的初始值是medium,下面这个例子中用的是thick:

当浏览器渲染这些关键字值得时候,规范并没有要求他们用特定的宽度值,但是在我的测试中,所有的浏览器都是把这三个值转化成了1px,3px,和5px。

很少有人用border-image

我曾经写过一篇关于css3的 border-image的文章,这个特性已经被现代浏览器很好的支持了,除了ie10及以下版本。但是有人在意吗?

如果你不喜欢阅读英文,你可以阅读我早前写的一篇关于CSS3的border-image的基础教程。——@大漠

它看起来是一个很优美的特性,允许你创建流动的图片边框,在这个例子中,你可以缩放窗口来观察图片边框的流动。

不幸的是,border-image仍然像一个新奇事物一样并未被很多人使用。但也许我是错的。如果你知道有哪个真实案例中有使用border-image,或者你就使用过它的话,请在评论中让我知道,我会很乐意承认我错了。

还存在empty-cells 这样一个属性

这个属性是被广泛支持的,包括ie8,它写起来是这个样子的:

table {
empty-cells: hide;
}

你也许已经知道了,它是用在表格中的,它告诉浏览器是否显示空的单元格。试着点击切换按钮来观察empty-cells的效果:

在这个例子中,需要确保表格的边框是可见的,而且border-collapse没有被设定成 collapsed。

font-style 还有一个值是“oblique”

当我们使用font-style属性得时候,经常用到的两个值是normal和italic,但是你还可以给它另一个值oblique:

但是它到底是个神马意思呢?还有就是它和italic看起来一样吗?

规范对于oblique是这么解释的:

应用oblique样式,如果没有的话就用italic样式

规范对于italic的解释和oblique基本上差不多,oblique这个词是一个排版术语,表示是在normal的基础上倾斜的字体,而不是真正的斜体。

由于css处理oblique的方式,其实它和italic是通用的,除非这个字体就是一个oblique字体。

而我从未听说过有oblique字体,但是也许我是错的。我的研究是,oblique是当一个字体没有真斜体的时候的一个仿斜体。

所以,如果我没有错的话,这就意味着如果一个字体没有真斜体字体,那么如果我们写了font-style:italic实际上会让字体变成font-style:oblique的形式。

下边这个图可以很直观的知道仿斜体和真斜体的区别。灰色的是oblique仿斜体。 ——@大圆
12个很少被人知道的CSS事实

12个很少被人知道的CSS事实

word-wrap和overflow-wrap是等同的

word-wrap不是一个被经常用到的属性,但在某些情况下是非常有用的,一个常见的例子是让长url换行,以免它撑开父容器,例子如下:

由于这个属性是微软原创的,所以它被所有的浏览器支持了,包括ie5.5。

尽管它跨浏览器,而且被一贯地支持,W3C依然决定把word-wrap换成overflow-wrap- 我猜是之前的命名有点名不副实? overflow-wrap和word-wrap有着同样的值,而word-wrap被当作是overflow-wrap的一个后补语法。

现在有一些浏览器是支持overflow-wrap的,但这么做貌似是无意义的,因为所有旧的浏览器都把word-wrap解析得很好,而且由于历史原因所有的浏览器都被要求继续支持word-wrap。

我们可以在浏览器升级后开始使用overflow-wrap,但是直到现在,我依然看不到换成新语法的意义何在。

这里边有多少是你不知道的呢?

不知你从这篇文章中有没有学到什么,我希望是这样,也许大多数有经验的css开发者知道很多,但是对于css新手应该会受益多一点。

大家都来扒一扒有几条是新发现呢?欢迎在评论中告诉我们!

英文出处:http://www.sitepoint.com/12-little-known-css-facts/

中文译文:http://www.w3cplus.com/css/12-little-known-css-facts.html

12个很少被人知道的CSS事实的更多相关文章

  1. 很少人知道的office专用卸载工具

    Microsoft Office是微软公司开发的一套基于 Windows 操作系统的办公软件套装.常用组件有 Word.Excel.Powerpoint等.当我们不需要再用了或者想安装旧版本的话,首先 ...

  2. 很少有人知道的c++中的try块函数

    c++有一些在现实世界中很少看到的结构.这些结构有着自己的用法,但是要特别小心保守的予以运用.就像是网站 The Old New Thing首页标题上面的说的那样: “代码通常被读的次数原因超过了被写 ...

  3. 12个你未必知道的CSS小知识

    虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过. 1.CSS的color属性并非只能用于文本显示 对于CSS ...

  4. webapp开发之需要知道的css细节

    引言 首先说明一下,本文分享对象是涉世未深的移动开发者,至于有经验的开发者可以自行绕道. 说来惭愧,做了几年pc端的前端开发,很少接触到webapp的移动端开发.如今有机会参与webapp的开发,发现 ...

  5. 几个超级实用但很少人知道的 VS 技巧

    大家好,今天分享几个我知道的实用 VS 技巧,而这些技巧我发现很多人都不知道.因为我经常在工作中遇到:我在同事电脑上解决问题,或在会议上演示代码示例时,使用了一些 VS "骚"操作 ...

  6. 几个超级实用但很少人知道的 VS 技巧[更新]

    大家好,今天分享一些实用的 VS 技巧,而这些技巧我发现很多人都不知道.因为我经常在工作中遇到:我在同事电脑上解决问题,或在会议上演示代码示例时,使用了一些 VS "骚"操作,他们 ...

  7. 几个超级好用但很少有人知道的 webstorm技巧

    我总结一些我发现的比较实用的功能,内容来自日常工作中用到的功能.图片来自PPT,是在公司内部的分享. 你不知道的webstorm进阶使用技巧 1.双击shift 全局搜索,可以搜索代码.设置等. 如果 ...

  8. 为数不多的人知道的 Kotlin 技巧及解析

    文章中没有奇淫技巧,都是一些在实际开发中常用,但很容易被我们忽略的一些常见问题,源于平时的总结,这篇文章主要对这些常见问题进行分析. 这篇文章主要分析一些常见问题的解决方案,如果使用不当会对 性能 和 ...

  9. Java 编程语言中很少被人了解的特性-statement label

    下面的语句会编译报错或者打印什么? System.out.print("baidu site :"); https://www.baidu.com; System.out.prin ...

随机推荐

  1. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

  2. PHP数组函数总结

    array_change_key_case - 返回字符串键名全为小写或大写的数组 array_chunk - 将一个数组分割成多个 array_column - 返回数组中指定的一列 array_c ...

  3. EF是啥?【What is Entity Framework?】(EF基础系列2)

    EF产生的背景: 编写ADO.NET访问数据的代码,是沉闷而枯燥的,所以微软提供了一个对象关系映射框架(我们称之为EF),通过EF可以自动帮助我们的程序自动生成相关数据库. Writing and m ...

  4. ios开发之网络php

    接着前面的学习,几天上午学习了数据库网络值php用户的注册与登录,感觉代码与ios上的oc太相似了,因此学习下来没什么障碍了,下面是代码: 首先是javascript.html文件中: <!DO ...

  5. JS微信分享不好写?来封装一下

    微信开发这块,作为开发工程师来说,一般是避免不了的,也好像发现一些朋友写微信分享都是在每个页面一大把一大把的代码. 代码冗余,即便是复制过来再改也很麻烦. 之前自己封装了一下js,今天来分享一下,希望 ...

  6. HDOJ 2063 过山车

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  7. 【转】Hibernate映射机制之XXX&period;hbm&period;xml

    http://blog.csdn.net/a9529lty/article/details/6454924[注意多对一中“多”和“一”各自的java文件.xml文件的书写格式] 另外两篇总结:http ...

  8. &lbrack;转&rsqb; weak&lowbar;ptr解决shared&lowbar;ptr环状引用所引起的内存泄漏

    http://blog.csdn.net/liuzhi1218/article/details/6993135 循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引 ...

  9. 【手打】LZW编码的C&sol;C&plus;&plus;实现

    LZW编码通过建立一个字符串表,用较短的代码来表示较长的字符串来实现压缩. LZW压缩算法是Unisys的专利,有效期到2003年,所以相关算法大多也已过期. 本代码只完毕了LZW的编码与解码算法功能 ...

  10. 【集美大学1411&lowbar;助教博客】个人作业2——英语学习APP案例分析 成绩

    个人作业2--英语学习APP案例分析,截止发稿时间全班31人,提交31,未提交0人.有一名同学已经写了作业但忘记提交了,这次给分了,但下不为例.由于助教这周有点忙,所以点评得非常不及时,请同学们见谅. ...