《CSS权威指南》基础复习+查漏补缺
前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了。然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司,事情不算多,于是拿起《CSS权威指南》进行"基础复习"+"查漏补缺",本篇文章主要是总结了些自己认为CSS中值的注意的几个知识点(本文知识点仅限本书范围内,若要讲CSS全部样式,那本兽还是选择慢慢懵逼去~)。
选择器
这里要说明的是类选择器的嵌套选择与多类选择器的差别,顺便捎上了一级子元素的选择
类选择器基本写法:
- .your-class{/*...*/}
类选择器的嵌套选择写法:
- .first-class .second-class{/*...*/}
多类选择器基本写法:
- .first-class.second-class{/*...*/}
一级子元素的选择写法:
- .first-class > .second-class{/*...*/}
从代码看它们之间的区别:
- <style>
- .first-style.second-style{ color: blueviolet}
- .first-style .third-style{ font-style: italic}
- .first-style > .fourth-style{ font-weight: bold}
- </style>
- <div class="first-style second-style">HELLO</div>
- <div class="first-style third-style">hello</div>
- <div class="first-style"><div class="second-style">HELLO</div></div>
- <div class="first-style"><div class="third-style">hello</div></div>
- <div class="first-style"><div><div class="third-style">Hello World</div></div></div>
- <div class="first-style"><div class="fourth-style">Hello World</div></div>
- <div class="first-style"><div><div class="fourth-style">Hello World</div></div></div>
得出结论:
· 类选择器的嵌套选择,选择的是first-style类下的所有包含second-style类的子元素(不论几级子元素)
· 一级子元素的选择,选择的是first-style下的一级子元素中包含second-style类的元素,再往里层嵌套的元素不算
· 多类选择器的选择,选择同时包含first-style和second-style类的元素
样式优先级
样式的优先级由选择器本身的组件确定,我们将优先值表述为4个部分,如:0.0.0.0
注意:前一部分的优先级大于后一部分的优先级,请无视他们的值之间的大小。如:0.0.1.0 大于 0.0.0.12,规则以此类推。
选择器的具体优先级如下:
· 对于选择器中给定的各个ID属性值,加 0.1.0.0;
· 对于选择器中给定的各个类属性值、属性选择或伪类,加 0.0.1.0;
· 对于选择器中给定的各个元素和伪元素,加 0.0.0.1;
· 结合符和通配符选择对优先级没有任何贡献。
用代码说明优先级:
- div{ color: black} /* 0.0.0.1 */
- div p{ color:black} /* 0.0.0.2 */
- .my-div{ color:black} /* 0.0.1.0 */
- div.my-div{ color: black} /* 0.0.1.1 */
- .my-div .my-p{ color: black} /* 0.0.2.0 */
- .my-div p.my-p{ color: black} /* 0.0.2.1 */
- div.my-div p.my-p{ color: black} /* 0.0.2.2 */
- /*
- ... 以此类推
- */
- #div-id{ color: black} /*0.1.0.0 */
- /*
- ... 继续类推
- */
那么有人会注意到,在0.0.0.0的4个部分中,第一个始终没使用到。它是怎么用的呢?
一般来说,第一个0是为内联样式声明保留的,它比其他声明的特殊性都高。
如:
- <div style="/*...*/"></div> <!-- 1.0.0.0 -->
本节还存在"!important"问题
"!important"放在样式声明之后,即分号之前。并且它没有特殊的优先级值。那么它的优先如何处理呢?看以下代码:
- <style>
- .impt{color: black !important}
- </style>
- <div class="impt" style="color:red">hello world</div>
得出结论:
"!important"声明的重要性超出了所有其他声明。
CSS正常流及元素
正常流
这里指西方语言文本从左向右、从上向下显示,也是我们熟悉的传统HTML文档的文本布局。要让一个元素不在正常流中,唯一的方法就是使之成为浮动/定位元素。
非替换元素
如果元素内容包含在文档中,则称之为非替换元素。如:<p></p>
替换元素
指用作为其他内容占位符的一个元素。如:<img />、<input />
块级元素
在正常流中,会在其框之前或之后生成"换行",通过声明"display:block"可以让元素生成块级框。
行内元素
这些元素不会在之前或之后生成"行分隔符",它们是块级元素的后代,通过"display:inline"可以让元素生成一个行内框。
margin 外边距
1.外边距垂直合并
垂直相邻的外边距会进行合并。两个外边距中较小的一个会被较大的一个合并(你也可以理解为"重叠")。
具体效果看例子:
- <style>
- .first-div{ margin-bottom:50px;}
- .second-div{ margin-top:20px;}
- </style>
- <div class="first-div">this is div-1</div>
- <div class="second-div">this is div-2</div>
2.margin样式顺序
- .your-class{ margin:<top> <right> <bottom> <left> }
顺序可以这样记:从12点钟开始,顺时针一圈。
缩写规则:
· 如果缺少左外边距的值,则使用右外边距的值
· 如果缺少下外边距的值,则使用上外边距的值
· 如果缺少右外边距的值,则使用上外边距的值
缩写代码:
- .first-margin{ margin: 50px;} /* 50px 50px 50px 50px */
- .second-margin{ margin: 50px 20px ;} /* 50px 20px 50px 20px */
- .third-margin{ margin: 50px 30px 10px;} /* 50px 30px 10px 30px */
3.margin应用于行内元素的效果
当margin应用于行内元素,则对水平面有影响,对垂直面无任何影响。
效果代码:
- <style>
- .mar-strong{ margin:20px 0}
- </style>
- <div>
- <strong class="mar-strong">hello world</strong>
既然这里提到margin与行内元素之间的关系,我们也顺便看下padding与行内元素的关系吧。
当padding应用于行内元素,则对水平面有影响,对垂直面无影响(在没有设置background的情况下)。
看例子:
- <style>
- .mar-strong{ padding:20px 0px; background: red}
- </style>
- <p>
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- <strong class="mar-strong">hello world</strong>
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- </p>
以上例子可以去掉padding或者background看看布局上有什么影响来验证。请慎重处理这三者之间的关系哦。
background-attachment
这里稍微提下这个属性。
background: scroll || fixed || inherit
初始值:scroll
看效果代码:
- <style>
- .div-bg{ width: 100%; height: 3000px;}
- .bg-attachment{ background-image: url(img/1.jpg); background-attachment: fixed; background-repeat: no-repeat; background-position: center}
- </style>
- <div class="div-bg bg-attachment"></div>
从上面例子可以看到,当滚动页面的时候,背景图始终居中跟随滚动。
浮动与清除
元素浮动
· CSS允许所有元素浮动
· 浮动元素周围外边距不会合并
- <style>
- .div-float{float: left;margin: 50px}
- </style>
- <div class="div-float">HELLO WORLD</div>
- <div class="div-float">hello world</div>
· 浮动元素会生成一个块级框,不论这个元素本身是什么。
- <style>
- .span{ margin: 50px}
- .span-float{ float: left;}
- </style>
- <span class="span span-float">HELLO WORLD</span>
- <span class="span span-float">hello world</span>
清除浮动
清除浮动可由clear属性完成。
clear: left || right || both || none || inherit
初始值: none
这里我们主要说明下left、right和both。分别是清除左边浮动元素(左边不让你浮动)、清除右边浮动元素(右边不让你浮动)和清除左右两边的浮动(两边都不让存在浮动元素)。
- <style>
- .div-mar{ width: 100px;padding: 50px}
- .div-red{ background: red}
- .div-yellow{ background: yellow}
- .div-float-left{ float: left}
- .div-float-right{ float: right}
- .div-clear-both{ clear: both}
- .div-clear-left{ clear: left}
- .div-clear-right{ clear: right}
- </style>
- <div class="div-mar div-red div-float-left">HELLO WORLD</div>
- <div class="div-mar div-yellow div-float-left div-clear-right">Hello World</div>
可以对以上[class*="div-red"]元素进行左右浮动,再用[class*="div-yellow"]元素进行清除浮动。
元素定位
元素的定位可以通过使用position属性。
positon: static || relative || absolute || fixed || inherit
初始值: static
static(静态/正常定位)
正常生成元素框。
relative(相对定位)
元素偏移某个距离,元素仍保持其未定位之前的形状。
absolute(绝对定位)
元素从文档流完全删除,并相对其包含块定位。
fixed(固定定位)
元素框的表现类似于absolute,不过其包含块是视窗本身。
元素relative/absolute/fixed定位的同时,会为其后代元素建立一个包含块。
什么是包含块?
在HTML中,根元素就是html元素。
· "根元素"的包含块由用户代理建立
· 对于一个非根元素,如果其position值为relative或static,则包含块由最近的块级框、表单元格或行内块祖先框的内容边界构成
· 对于一个非根元素,如果其position值为absolute,包含块设置为最近的position值不是static的祖先元素
"visibility:hidden"与"display:none"的区别
当我们设置一个元素visibility为hidden的时候,元素处于不可见状态,但元素仍然会影响到文档的布局(元素仍存在,只是看不见)。
当我们设置一个元素display为none的时候,元素不显示,并从文档流中删除(元素不存在,可用于渲染优化)。
"content" 生成内容
使用content属性插入内容或属性值。
- <style>
- .div-content:before{ content: "[ "attr(value)" ] "}
- .div-content:after{content:" hello world"}
- </style>
- <div class="div-content" value="H">ello World</div>
附上在写的时候突然想到的一个问题
在不同元素内的子元素使用z-index的时候受不受父(祖先)元素之间关系的影响?
- <style>
- .div-out{width: 400px; height: 200px; background: black;border-bottom: 1px solid white; position: relative;}
- .div-index-1{ width: 200px; height: 100px; background: red; position: absolute; bottom: -50px; z-index: 1}
- .div-index-2{ width: 200px; height: 100px; background: yellow; position: absolute; top: -50px; left: 20px; z-index: 1}
- </style>
- <div class="div-out">
- <div class="div-index-1"></div>
- </div>
- <div class="div-out">
- <div class="div-index-2"></div>
- </div>
得出结论:不受影响。
新手文章,有问题可交流讨论,不喜勿喷~~~ 觉得本文还行的就小手点个赞给个鼓励吧~
《CSS权威指南》基础复习+查漏补缺的更多相关文章
- CSS权威指南 - 基础视觉格式化 3
行内替换元素 替换元素比如图片的高度比line-height大,并不会影响整个文字段落的line-height,会让有图片那一行框的高度可以容纳这个图片. 这个图片依然有一个line-height,和 ...
- CSS权威指南 - 基础视觉格式化 2
行内元素 em a 非替换元素 img 替换元素 两者在内联内容处理方式不一样. inline有时候被翻译成内联,比如inline content,有时候被翻译成行内 inline box. 行布局 ...
- JavaScript学习(一)——基础知识查漏补缺
标签script 我们知道,html要使用js就要使用<script>标签. 两种方式: 一是直接在<script>这里</script>写入代码. 二是在别的文件 ...
- Flutter查漏补缺1
Flutter 基础知识查漏补缺 Hot reload原理 热重载分为这几个步骤 扫描项目改动:检查是否有新增,删除或者改动,直到找到上次编译后发生改变的dart代码 增量编译:找到改变的dart代码 ...
- CSS基础面试题,快来查漏补缺
本文大部分问题来源:50道CSS基础面试题(附答案),外加一些面经. 我对问题进行了分类整理,并给了自己的回答.大部分知识点都有专题链接(来源于本博客相关文章),用于自己前端CSS部分的查漏补缺.虽作 ...
- 【CSS】CSS3从入门到深入(复习查漏向
CSS3从入门到深入(复习查漏向 pre_section CSS:层叠样式表,决定网页表现 网页为多层结构,CSS为每一层设置样式,最后显示最上一层 CSS语句 = 选择器 + 声明块 形式 内联样式 ...
- js基础查漏补缺(更新)
js基础查漏补缺: 1. NaN != NaN: 复制数组可以用slice: 数组的sort.reverse等方法都会改变自身: Map是一组键值对的结构,Set是key的集合: Array.Map. ...
- Java基础查漏补缺(2)
Java基础查漏补缺(2) apache和spring都提供了BeanUtils的深度拷贝工具包 +=具有隐形的强制转换 object类的equals()方法容易抛出空指针异常 String a=nu ...
- Java基础查漏补缺(1)
Java基础查漏补缺 String str2 = "hello"; String str3 = "hello"; System.out.println(str3 ...
随机推荐
- CSS white-space 属性
实例 规定段落中的文本不进行换行: p { white-space: nowrap } nowrap:文本不会换行,文本会在在同一行上继续,直到遇到 <br> 标签为止.
- Html文档流和文档对象模型DOM理解
前言 在理解浮动和定位时,触碰到文档流概念.为了更好理解浮动和定位,学习了文档流和DOM(文档对象模型). 正文 DOM(文档对象模型)简单理解就是编写的html页面所有内容构成的树形结构.例如: 根 ...
- 用于灰度变换的一些实用的M函数
关于MATLAB中如何对错误处理进行编程,先介绍一些东西: 函数nargin可以检测输入到M函数的参数的数目: 函数nargout可以检测M函数的输出: 函数nargchk能够在M函数体中检测传递的参 ...
- [No00006C]文件名复制,归档小助手【自己写的小工具,希望能帮助大家】
特别补充一句:软件可以一次性复制多个文件的文件名. Windows 中的复制文件名实在是有些不方便 ,需要点右键 "重命名"之后再点右键选择"复制"才可复制文件 ...
- iOS 2D绘图 (Quartz2D)之路径(点,直线,虚线,曲线,圆弧,椭圆,矩形)
博客原地址:http://blog.csdn.net/hello_hwc?viewmode=list 让我们继续跟着大神的脚步前进吧.这一次 我们学习一些Quartz 2D 最基本的一些用法. 前言: ...
- 深入理解Java之泛型
原文出处: absfree 1. Why ——引入泛型机制的原因 假如我们想要实现一个String数组,并且要求它可以动态改变大小,这时我们都会想到用ArrayList来聚合String对象.然而,过 ...
- BZOJ2748[HAOI2012]音量调节
Description 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量.在演出开始之前,他已经做好了一个列表,里面写着在每首歌开始之前他想要改 ...
- 图像旋转 OpenCV实现
经常对一幅图像进行旋转操作,OpenCV中提供了很方便易用的仿射变换函数warpAffine, 通过getRotationMatrix2D可以得到放射变换矩阵(矩阵大小2x3) #include &l ...
- jquery替换所有逗号
代码: var aa= $("input[name=aa]").val().replace(/\,/g,""); 原文:http://blog.csdn.net ...
- Spring Security(08)——intercept-url配置
http://elim.iteye.com/blog/2161056 Spring Security(08)--intercept-url配置 博客分类: spring Security Spring ...