CSS基础理解(二)

一、 em、rem、vm、vw 分别如何计算尺寸的?

em:相对于父元素的font-size属性值来计算的,如果父元素为14px,那么2em=28px;
rem:相对于根元素<html>的font-size属性值来计算的,一般浏览器默认字体大小为16px,那么2rem=32px;
vhvw相对于视口的高度和宽度,1vh 等于1%的视口高度,1vw 等于1%视口宽度

二、 颜色相关属性

  1. 颜色的几种写法
  • 颜色关键字(color: white;);
  • 十六进制(background-color: #e0b0ff;);
  • rgb(224, 176, 255);//rgb分别表示red green blue比例
  • hsl(276, 100%, 85%);
H:Hue(色调)。0(或360)表示红色,120表示绿色,240表示蓝色,也可取其他数值来指定颜色。取值为:0 - 360 
S:Saturation(饱和度)。取值为:0.0% - 100.0%
L:Lightness(亮度)。取值为:0.0% - 100.0%
  1. 透明色表示
    注:设置透明色只针对背景颜色生效,对文本及其他元素效果并不生效。
  • background-color:transparent 完全透明
  • rgba(255,255,255,0.5) a表示Alpha透明度
  • hsla(276, 100%, 85%,0.5); a表示Alpha透明度
  1. 透明效果的实现
  • opacity 规定不透明度。从 0.0 (完全透明)到 1.0(完全不透明)。
<html>
<head>
<style> 
div
{
background-color:red;
opacity:0.5;
}
</style>
</head>
<body>
<div>本元素的不透明度是 0.5。请注意,文本和背景色都受到不透明级别的影响。</div>
</body>
</html>
image.png
  • color: transparent
    不建议使用该方法
  1. currentColor属性
    currentColor关键字代表原始的 color 属性的计算值。
    它允许让继承自属性或子元素的属性颜色属性以默认值不再继承。
    它也能用于那些继承了元素的 color 属性计算值的属性,相当于在这些元素上使用 inherit 关键字,如果这些元素有该关键字的话。
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<div style="color:darkred">
 The color of this text is the same as the one of the line:
  <div style="background:currentcolor; height:1px"></div>
 Some more text.
</div>
</body>
</html>
image.png

三、calc元素

calc()是css3的一个新增的功能,用来指定元素的动态长度。
calc()最大的好处就是用在流体布局上,可以通过calc()计算得到元素的宽度。

calc()的运算规则
calc()使用通用的数学运算规则,但是也提供更智能的功能:

  • 使用“+”、“-”、“*” 和 “/”四则运算;
  • 可以使用百分比、px、em、rem等单位;
  • 可以混合使用各种单位进行计算;
  • 表达式中有“+”和“-”时,其前后必须要有空格,如"width: calc(12%-5em)"这种没有空格的写法是错误的,浏览器会认为是一个无效的表达式,解析成为一个长度后跟一个加号再跟一个负百分比。
  • 表达式中有“*”和“/”时,其前后可以没有空格,但建议留有空格。

演示项目

四、CSS选择器权重

  • 权重决定了哪一条规则会被浏览器应用在元素上。
  • 权重的不同,是你所期望的效果,没有通过css规则在元素上生效的主要原因。
  • 权重的级别划分时包含了所有的css选择器
  • 如果两个选择器作用在同一元素上,则权重高者生效。
  • 权重的级别根据选择器被划分为四个分类:行内样式,id,类与属性,以及元素。
  • 如果两个选择器权重值相同,则最后定义的规则被计算到权重中(后面定度的CSS规则权重要更大,会取代前面的CSS规则)
  • 如果两个选择器权重值不同,则权重大的规则被计算到权重中
  • 如果一条规则包含了更高权重的选择器,那么这个规则权重更高
  • 最后定义的规则会覆盖所有跟前面冲突的规则
  • 内联样式表含有比别的规则更高的权重
  • Id选择器的权重比属性选择器更高
  • 你可以使用id来增大权重
  • 类选择器比任意数量的元素选择器都高
  • 通配符选择器跟继承来的样式,他们的权重以 0,0,0,0来计算
  • 你可以用css权重计算器来计算权重。
分数 条件
1000 + 1 / 在 style 属性内或在 <style>标签内
100 + 1 / 每个出现的 ID 选择器
10 + 1 / 每个出现的 类,伪类或 属性选择器
1 + 1 / 每个元素选择器或伪元素
选择器 1000 100 10 1 总分
body 0 0 0 1 1
#flash 0 1 0 0 100
h1 + p::after 0 0 0 3 3
li > a[download] > .warning 0 0 2 2 22
#notice a:hover 在 <style> 里 1 1 1 1 1111

五、盒模型

盒模型

所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。
CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。
盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。
不同部分的说明:

  • Margin(外边距) - 清除边框外的区域,外边距是透明的。
  • Border(边框) - 围绕在内边距和内容外的边框。
  • Padding(内边距) - 清除内容周围的区域,内边距是透明的。
  • Content(内容) - 盒子的内容,显示文本和图像。

在标准模式下最终元素的总宽度计算公式是这样的:
总元素的宽度=宽度+左填充+右填充+左边框+右边框+左边距+右边距
元素的总高度最终计算公式是这样的:
总元素的高度=高度+顶部填充+底部填充+上边框+下边框+上边距+下边距

根据 W3C 的规范,元素内容占据的空间是由 width 属性设置的,而内容周围的 padding 和 border 值是另外计算的。不幸的是,IE5.X 和 6 在怪异模式中使用自己的非标准模型。这些浏览器的 width 属性不是内容的宽度,而是内容、内边距和边框的宽度的总和。

六、浏览器默认样式

当对网页标签不设置属性时,浏览器对某些元素设置有默认样式。
常见的例如:ph1uldiv都是block显示。
所以建议在制作网页时对常用元素进行reset样式声明,减少默认样式有可能带来的问题。

七、 display属性

这个属性用于定义建立布局时元素生成的显示框类型。

描述
none 此元素不会被显示。
block 此元素将显示为块级元素,此元素前后会带有换行符。
inline 默认。此元素会被显示为内联元素,元素前后没有换行符。
inline-block 行内块元素。(CSS2.1 新增的值)
list-item 此元素会作为列表显示。
run-in 此元素会根据上下文作为块级元素或内联元素显示。
compact CSS 中有值 compact,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。
marker CSS 中有值 marker,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。
table 此元素会作为块级表格来显示(类似 <table>),表格前后带有换行符。
inline-table 此元素会作为内联表格来显示(类似 <table>),表格前后没有换行符。
table-row-group 此元素会作为一个或多个行的分组来显示(类似 <tbody>)。
table-header-group 此元素会作为一个或多个行的分组来显示(类似 <thead>)。
table-footer-group 此元素会作为一个或多个行的分组来显示(类似 <tfoot>)。
table-row 此元素会作为一个表格行显示(类似 <tr>)。
table-column-group 此元素会作为一个或多个列的分组来显示(类似 <colgroup>)。
table-column 此元素会作为一个单元格列显示(类似 <col>)
table-cell 此元素会作为一个表格单元格显示(类似 <td> 和 <th>)
table-caption 此元素会作为一个表格标题显示(类似 <caption>)
inherit 规定应该从父元素继承 display 属性的值。

八、 块级元素和行内元素

块元素:div h1 h2 h3 h4 h5 h6 p hr form ul dl ol pre table li dd dt tr td th
行内元素:em strong span a br img button input label select textarea (包含inline-block元素)

特点:

  1. 块级元素可以包含文本,块级、行内元素,而行内元素只能包含文本和行内元素
  2. 块级元素单独占据一整行,行内元素占据的位置只有自身文本宽度的空间
  3. 块级元素可以设置宽高,行内元素设置宽高无效
  4. 块级元素的padding,margin值设置有效,行内元素padding,margin上下的值设置无效,但左右有效(虽然表面上看起来变了,但是没有影响到其他元素,换言之,其他元素认为它的大小没变,因此其他元素不会因为他看起来大了,就改变自己的位置)

九、 box-sizing属性

box-sizing 属性允许您以特定的方式定义匹配某个区域的特定元素。
取值:
content-box(默认值)
padding和border不被包含在定义的width和height之内。对象的实际宽度等于设置的width值和border、padding之和,即 ( Element width = width + border + padding )

content-box

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

border-box

此属性表现为怪异模式下的盒模型。

十、inline-block

前面提到display属性可取值为inline-block,表示元素以行内块级元素方式展现。
当元素设置display:inline-block时会发现一个问题,即元素之间会出现缝隙,例下

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <span>aaa</span>
  <span>bbb</span>
  <span>ccc</span>  
</body>
</html>
span {
  display: inline-block;
  background-color: red;
  width: 200px;
  height: 50px;
  text-align: center;
  line-height: 50px;
}
image.png

解决方式

  1. 元素间留白间距出现的原因就是标签段之间的空格,因此,去掉HTML中的空格,自然间距就没有了。
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <span>aaa</span><span>
  bbb</span><span>
  ccc</span>  
</body>
</html>
  1. 使用font-size:0 (推荐)
    针对父元素设置font-size为0,子元素重新声明正确font-size 。这个方法,基本上可以解决大部分浏览器下inline-block元素之间的间距。
body {
  font-size: 0px;
}

span {
  display: inline-block;
  background-color: red;
  width: 200px;
  height: 50px;
  text-align: center;
  line-height: 50px;
  font-size: 16px;
}
  1. 使用letter-spacing/word-spacing
    一个是字符间距(letter-spacing)一个是单词间距(word-spacing),大同小异。有一定兼容性问题,有兴趣的可以自己测试。
body {
  letter-spacing: -0.31em;
}

span {
  display: inline-block;
  background-color: red;
  width: 200px;
  height: 50px;
  text-align: center;
  line-height: 50px;
  letter-spacing: 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,727评论 1 92
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,730评论 0 2
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,303评论 0 11
  • 1.CSS基本概念 1.1 CSS的定义 CSS(Cascading Style Sheets)层叠样式表,主要用...
    寥寥十一阅读 1,805评论 0 6
  • 1.块级元素和行内元素 块级(block-level)元素;行内(内联、inline-level)元素。 块元素的...
    饥人谷_小侯阅读 1,985评论 1 4