改变 a 标签 CSS 属性的排列顺序:
(爱恨原则)link -> visited -> hover -> active
按照这样书写:
能够解决 a:link 样式被 a:visited 样式覆盖问题。
在 CSS 中,若是对于相同元素针对不一样条件的定义,适宜将最通常的条件放在最上面,依次向下,保证最下面的是最特殊的条件(能够理解为样式覆盖)。css
这样,浏览器显示元素的时候,才会从特殊到通常、逐级向上验证条件。html
举例说明:css3
我想让未访问连接颜色为蓝色,悬浮连接为绿色,已访问连接为红色:web
第一种状况:
我定义的顺序是a:visited-红色、a:hover-绿色、a:link:蓝色
,这时会发现:把鼠标放到未访问过的蓝色连接上时,它并不变成绿色,只有放在已访问的红色连接上,连接才会变绿。chrome
第二种状况:
我把 CSS 定义顺序调整为:a:link、a:visited、a:hover,这时,不管你鼠标通过的连接有没有被访问过,它都会变成绿色啦。windows
这是由于,一个鼠标通过的未访问连接
同时拥有a:link、a:hover
两种属性。浏览器
奇淫技巧--记住正确排序:(l v h a )==》LV好啊
(取的首字母)dom
从目前了解的状况,pc 和 h5 使用一套响应式的代码的场景比较少了,大可能是 pc,h5 各自维护一套代码。
1.使用CSS3媒体查询@media 查询ide
@media screen and (max-width:980px ) { body{ background-color: red; } }
2.flex布局布局
弹性盒布局模型是css3规范中提出的一种新的布局方式。
目的:提供一种更加高效的方式来对容器中的条目进行布局、对齐和分配空间
优点:这种布局模式已被主流浏览器所支持,能够在web应用开发中使用。
Flex(Flexible Box)布局 称为 "弹性布局",能够为网页的布局提供最大的灵活性,取代了往常的 浮动(float) 布局,而且任何一个容器均可以设置 Flex 布局。
注:设置 Flex 布局后,子元素的 Float 布局将失效
图1
图2
主轴
的方向换行
简写
形式水平
对齐垂直
对齐多根主轴
的对齐方式左端
右端
上端
下端
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ];
align-self: auto | stretch | flex-start | flex-end | center | baseline;
不会
改变页面布局
,可是不会触发
该元素已经绑定的事件
改变
页面布局
,能够理解成在页面中把该元素删掉
不会
改变页面布局
,能够理解被其它元素压在下面
了不会
改变页面布局
,而且,若是该元素已经绑定了一些事件,如 click 事件也能触发
,经常使用于设置图片透明度为 0 ,而后加个点击事件,点击上传文件区域以外
;缩放
无限小,元素将不可见,元素原来所在的位置将被保留;奇淫技巧:隐藏透明区域外,缩放压住高度0
rgba 和 opacity 透明有何不一样:
颜色或背景色
,对元素的内容没有影响
。css 中,有两种盒模型,经过 box-sizing 切换:
标准盒模型
,在设置宽度和高度时,只包含 content
,不包含 padding 和 border;IE 盒模型
,设置宽度和高度时,包含 content、padding 和 border
。内容宽度(content)
+ border + padding + margin内容宽度(content + border + padding)
+ margin样式系统从关键选择器开始,从右向左依次查找,若是出现未匹配的状况会放弃规则,不然会左移直至匹配完成。
所以在写样式时,应尽可能选择 ID 选择器或 class 选择器做为关键选择器,而且减小样式的层级,下降消耗
。
选择器类别 | 说明 | 权重 | 权值 |
---|---|---|---|
!important | 强制使用此样式 | 权重最高 | 权值最高 |
行内样式 | style = "" | (1.0.0.0) | 1000 |
id 选择器 | #id | (0.1.0.0) | 100 |
类选择器 | .id | (0.0.1.0) | 10 |
元素选择器 | div | (0.0.0.1) | 1 |
通配符 > 继承 > 浏览器默认
:first-child 匹配父元素中第一个子元素
E:first-child 它表示:只要 E 元素是它的父级的第一个子元素,就选中。它须要同时知足两个条件
,一个是第一个子元素
,另外一个是这个子元素恰好是E
。
如下 2 中解读都是错误的:
:nth-child(n) 匹配父元素中第 n 个子元素(n 能够是一个数字,一个关键字,或者一个公式)
从右向左依次查询
二者都是描述不在文本流中的东西。
单冒号
表示,当元素处于某种状态
时,为该元素添加样式
,如 a 标签的 hover;双冒号
表示,为了兼容老浏览器,有时候也会用单冒号表示,做用是建立
不在文本流中的元素
,并为其添加样式,如 ::before,在指定元素前添加元素。BFC 指的是格式化上下文
垂直
方向,边距会发生重叠
。独立
的容器,外面的元素不会影响里面的元素,反之亦然。浮动
的子元素也参与计算。自身
content box 定位,仍占据
原来位置空间
;第一个
position 不为 static
的祖先元素的 padding box 定位,元素不占据
原来位置空间
;浏览器窗口顶部
定位,不占据
原来位置空间通用方案:
行内元素
:父元素是块级元素,给父元素设置 text-align:center,父元素不是块级元素,先将父元素设置为块级元素,再给父元素设置 text-align:center图片
:给图片设置 clear:both; display:block; margin:auto
;详细方案:
方案一
:
margin:0 auto
;display:inline-block
;或 display:inline
,将其转换成行内块级元素/行内元素,给父元素设置 text-align:center
方案二
:使用定位属性
left: 50%; margin-left: 50px
(子元素的宽度的一半--宽度定),或者 transform: translateX(-50%)
(宽度不定)方案三
:使用 flexbox 布局实现(宽度定不定都行)
display: flex; justify-content: center
;行高=父元素的高
display:table-cell; vertical-align:middle
(行级、块级、图片都通杀)块级元素:
margin-top: 子元素高度的一半
(高度定),或者transform:translateY(-50%)
;(高度不定)display:flex; align-items:center
;(行级、块级、图片都通杀)已知高度和宽度的元素
left:0; right:0; top:0; bottom:0; margin:auto
top:50%;left:50%(左上角垂直居中),margin-top:-子元素高的一半,margin-left:-子元素宽的一半
未知高度和宽度的元素
top:50%;left:50%
(左上角垂直居中),transform:translate(-50%,-50%)
(根据自身定位实现偏移)display:flex; justify-content:center; align-items:center
;清除浮动的方法:
高度
(height);加
一个 div 空标签
,而且添加样式 clear: both
;父级标签
添加样式 overflow
为 hidden/both;zoom
;最好的方法:
clearfix:after{/*伪元素是行内元素 正常浏览器清除浮动方法*/ content: ""; display: block; height: 0; clear:both; visibility: hidden;
那么,clear:both;到底起了什么做用???
visibility: hidden; height: 0
; 只要 content 的值为空, 写不写都无所谓。浮动
左侧设置左浮动,右侧设置右浮动便可,中间会自动地自适应。绝对定位
左侧设置为绝对定位, left:0px。右侧设置为绝对定位, right:0px。中间设置为绝对定位,left 和 right 都为 300px,便可。中间的宽度会自适应。flexbox布局
将左中右所在的容器设置为 display: flex,设置两侧的宽度后,而后让中间的 flex = 1,便可。表格布局
设置整个容器的宽度为 100%,设置三个部分均为表格(display:table-cell),而后左边的单元格为 300px,右边的单元格为 300px,便可。中间的单元格会自适应。网格布局grid
设置容器为网格布局,宽度为 100%,设置网格为三列,并设置每列的宽度,便可。都是正值
的时候,取二者的最大值; 都是负值
的时候,取的是其中绝对值较大的,而后,从 0 位置,负向位移;有正有负
的时候,先取出负 margin 中绝对值中最大的,而后,和正 margin 值中最大的 margin 相加,即取和的绝对值.triangle { width: 0; height: 0; border-width: 100px; border-style: solid; border-color: tomato transparent transparent transparent; //3边透明,一边不透明 }
奇淫技巧--记住透明边框的数量:3点一线
(总共 4 条线,有 3 条变成点了,即变透明了,另一条边仍是线,即不透明)
p { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; //3行溢出
字体
系列属性:如 font,font-family,font-size,font-weight,font-style文本
系列属性:如 color,text-indent(文本缩进),text-align(文本水平对齐),line-height,word-spacing(字间隔)可见性
:visibility表格
布局属性:caption-side、border-collapse、border-spacing、empty-cells、table-layout列表
属性:list-style-type、list-style-image、list-style-position奇淫技巧:媒体查询盒模型,旋转圆角变(渐变)阴影
由于浏览器的兼容
问题,不一样浏览器对标签
的默认值
是不一样的,若是没有对浏览器的 CSS 初始化,会形成相同页面在不一样浏览器的显示存在差别。
奇淫技巧:合并简写缩短链,语义遵照盒模型
回流(重排),reflow:当 render tree 中的一部分(或所有)由于元素的规模尺寸
,布局
,隐藏
等改变时而须要从新构建;
重绘(repaint):当 render tree 中的一些元素须要更新属性,而这些属性只影响元素的外观
,风格
,而不会影响布局时
,称其为重绘,例如颜色改变等。
注意:每一个页面至少须要引起一次
重排+重绘,并且重排(回流)必定
会引起重绘
。
触发重排(回流)的条件:
奇淫技巧:回流理解为流动,流动天然会引发布局的变更;重绘能够理解为表层绘画,那么只是外观的改变。
首先是性能差别:
默认值理解
,浏览器依然对 border-width/border-color 进行了渲染
,即已经占用内存值
;多渲染了一个border-width:0
,也就是为何 border:none 的性能
要比 border:0高
;兼容性差别:
{border:none;}当 border 为“none”时彷佛对 IE6/7 无效,边框依然存在,当 border 为“0”时,全部浏览器都一致把边框隐藏。
块级
格式化上下文;内联
格式化上下文;网格布局
格式化上下文;自适应
格式化上下文通常状况下,页面加载时自上而下
的。
将 style 标签至于 body 以前,为的是先加载样式
。
如果写在 body 标签以后,因为浏览器以逐行方式
对 html 文档进行解析,当解析到写在文档尾部的样式表时,
会致使浏览器中止以前的渲染
,等待加载且解析样式表
完成以后会从新渲染
,在 windows 的 IE 下可能会出现 FOUC 现象(页面闪烁
)。
通常来讲,子元素的百分比单位都是以父元素为依据。
可是 margin 和 padding 例外。元素的 height
是相对于容器的高度
,可是元素的 margin 和 padding
是相对于容器的宽度
。
每一个 HTML 元素都具备clientHeight offsetHeight scrollHeight offsetTop scrollTop
这 5 个和元素高度、滚动、位置相关的属性,单凭单词很难搞清楚分别表明什么意思之间有什么区别。
经过阅读它们的文档总结出规律以下:
clientHeight和offsetHeight
属性和元素的滚动、位置没有关系它表明元素的高度
,其中:
padding
但不包括border、水平滚动条、margin
的元素的高度。对于 inline
的元素这个属性一直是 0
,单位 px,只读元素。padding、border、水平滚动条
,但不包括margin
的元素的高度。对于inline的元素这个属性一直是 0,单位 px,只读元素。接下来讨论出现有滚动条时的状况:
当本元素的子元素
比本元素高
且overflow=scroll
时,本元素会 scroll,这时:
本元素有部分被隐藏
了,scrollHeight包括当前不可见部分
的元素的高度
。scrollHeight>=clientHeight
恒成立。在有滚动条时讨论 scrollHeight 才有意义,在没有滚动条时 scrollHeight==clientHeight 恒成立。单位 px,只读元素。有滚动条时
,滚动条向下滚动
的距离也就是元素顶部被遮住部分
的高度。在没有滚动条
时scrollTop==0
恒成立。单位 px,可读可设置。。元素顶部
距离最近父元素顶部
的距离,和有没有滚动条没有关系。单位 px,只读元素。1. 利用 padding
<html> <head> <meta charset="utf-8" /> <title>新标签页</title> </head> <script></script> <body> <div class="content"> <div class="son">包裹内容</div> </div> </body> <style> .content { /* width: 100px; height: 100px; */ } .son { width: 10%; padding-bottom: 10%; /* padding百分比相对父元素宽度计算 */ height: 0; border: 1px solid red; } </style> </html>
效果以下:
效果图
2.padding-bottom+:after+absolute
<html> <head> <meta charset="utf-8" /> <title>新标签页</title> </head> <body> <div class="content"> <div class="son">包裹内容</div> </div> </body> <style> .content { width: 10%; background: #ccc; } .content:after { content: ''; display: block; padding-bottom: 100%; } .son { position: absolute; width: 100%; height: 100%; } </style> <script></script> </html>
效果以下:
属性 | 含义 |
---|---|
animation(动画) | 用于设置动画属性,他是一个简写的属性,包含6个属性 |
transition(过渡) | 用于设置元素的样式过分,和animation有着相似的效果,但细节上有很大的不一样 |
transform(变形) | 用于元素进行旋转、缩放、移动或倾斜,和设置样式的动画并无什么关系,就至关于color同样用来设置元素的“外表” |
translate(移动) | translate只是transform的一个属性值,即移动。 |