原文->最近刚弄的我的博客:
http://hellopan.top/2017/10/15/css-knowledge-points/css
由于篇幅问题,把CSS和HTML的内容分开了…html
- link:链接日常的状态
- visited:链接被访问过以后
- hover:鼠标放到链接上的时候
- active:链接被按下的时候
定义顺序:“爱恨原则”(LoVe/HAte),即四种伪类的首字母:LVHA。
1.鼠标通过的“未访问连接”同时拥有a:link、a:hover两种属性,后面的属性会覆盖前面的属性定义;
2.鼠标通过的“已访问连接”同时拥有a:visited、a:hover两种属性,后面的属性会覆盖前面的属性定义;
Zoom属性是IE浏览器的专有属性, 它能够设置或检索对象的缩放比例。
产生BFC
清楚浮动产生的影响,与overflow:hidden;
做用相似,使元素产生包裹性 。css3
- 有两种, IE 盒子模型、W3C 盒子模型;
- 盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border);
- 区 别: IE的content部分把 border 和 padding计算了进去;
- id选择器( # myid)
- 类选择器(.myclassname)
- 标签选择器(div, h1, p)
- 相邻选择器(h1 + p)
- 子选择器(ul > li)
- 后代选择器(li a)
- 通配符选择器( * )
- 属性选择器(a[rel = “external”])
- 伪类选择器(a:hover, li:nth-child)
- 可继承的样式: font-size font-family color, UL LI DL DD DT;
- 不可继承的样式:border padding margin width height ;
- 按CSS代码中出现的顺序决定,后者CSS样式居上;(近水楼台 先得月)
- !important声明specificity值优先级最高
- 同权重: 内联样式表(标签内部)> 嵌入样式表(当前文件中)> 外部样式表(外部文件中)。
- 权重: id(100) > class(10) > tag(1)
div{ width:200px; margin:0 auto; }
/* 第一种 */
div{ position: relative; /* 相对定位或绝对定位都可 */ width:500px; height:300px; top: 50%; left: 50%; margin: -150px 0 0 -250px; /* 外边距为自身宽高的一半 */ background-color: pink; /* 方便看效果 */ }
/* 第二种 */
div{ position: absolute; /* 相对定位或绝对定位都可 */ width:500px; height:300px; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: pink; /* 方便看效果 */ }
/* 第三种 */
.container { display: flex; align-items: center; /* 垂直居中 */ justify-content: center; /* 水平居中 */ }
.container div { width: 100px; height: 100px; background-color: pink; /* 方便看效果 */ }
/* 第四种 */
div { position: absolute; width: 300px; height: 300px; margin: auto; top: 0; left: 0; bottom: 0; right: 0; background-color: pink; /* 方便看效果 */ }
- absolute
生成绝对定位的元素,相对于值不为 static的第一个父元素进行定位。- fixed (老IE不支持)
生成绝对定位的元素,相对于浏览器窗口进行定位。- relative
生成相对定位的元素,相对于其正常位置进行定位。- static
默认值。没有定位,元素出如今正常的流中(忽略 top, bottom, left, right z-index 声明)。- inherit
规定从父元素继承 position 属性的值。
- 1em等于当前的字体尺寸,数值的改变意味着字体大小的调整。em 有继承这个特性,也就是说,外部父元素定义了字体的em大小,内部子元素会继承这一属性的样式。
- rem = root em 。顾名思义,root即根部的,顶部的。也就是根部的em,这个根部指的是HTML根元素。因此rem的大小是针对HTML根元素的大小作字体的相对大小的调整。
:before是css中的一种伪元素,可用于在某个元素以前插入某些内容。
:after是css中的一种伪元素,可用于在某个元素以后插入某些内容。web
- 单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素。(伪元素由双冒号和伪元素名称组成)
- 双冒号是在当前规范中引入的,用于区分伪类和伪元素。不过浏览器须要同时支持旧的已经存在的伪元素写法,
好比:first-line、:first-letter、:before、:after等,
而新的在CSS3中引入的伪元素则不容许再支持旧的单冒号的写法。
如下的代码将会在页面中展示的是”HelloWorld”。算法
<style> p:before{ content: "H" /*:before和:after必带技能,重要性为满5颗星*/ } p:after{ content: "d" /*:before和:after必带技能,重要性为满5颗星*/ } </style>
<p>ello Worl</p>
咱们经过浏览器的”审查元素”看到的内容是:浏览器
<p>
::before
"ello Worl"
::after
</p>
日常该怎么使用 eg:做为内容的半透明背景层ide
<style> body{ background: url(img/1.jpg) no-repeat left top /*这里加了个图片背景,用以区分背景的半透明及内容的彻底不透明*/ } .test-div{ position: relative; /*平常相对定位(重要,下面内容也会介绍)*/ width:300px; height: 120px; padding: 20px 10px; font-weight: bold; } .test-div:before{ position: absolute; /*平常绝对定位(重要,下面内容也会略带介绍)*/ content: ""; /*:before和:after必带技能,重要性为满5颗星*/ top:0; left: 0; width: 100%; /*和内容同样的宽度*/ height: 100%; /*和内容同样的高度*/ background: rgba(255,255,255,.5); /*给定背景白色,透明度50%*/ z-index:-1 /*平常元素堆叠顺序(重要,下面内容也会略带介绍)*/ } </style>
<div class="test-div">
<table>
<tr>
<td>Name</td>
<td><input placeholder="your name" /></td>
</tr>
<tr>
<td>Password</td>
<td><input placeholder="your password" /></td>
</tr>
<tr>
<td></td>
<td><input type="button" value="login" /></td>
</tr>
</table>
</div>
@font-face { font-family: iconfont; src: url(//at.alicdn.com/t/font_1465189805_4518812.eot); }
background-image:-webkit-gradient(linear,0% 0%,100% 0%,from(#2A8BBE),to(#FE280E));
一个完整的Flexbox指南
Flex布局主要思想是让容器有能力让其子项目可以改变其宽度、高度(甚至顺序),以最佳方式填充可用空间(主要是为了适应全部类型的显示设备和屏幕大小)。Flex容器会使子项目(伸缩项目)扩展来填满可用空间,或缩小他们以防止溢出容器。著做权归做者全部。
商业转载请联系做者得到受权,非商业转载请注明出处。
原文: http://www.w3cplus.com/css3/a-guide-to-flexbox.html © w3cplus.comsvg
首先把列的padding-bottom设为一个足够大的值,再把列的margin-bottom设一个与前面的padding-bottom的正值相抵消的负值,父容器设置超出隐藏,这样子父容器的高度就仍是它里面的列没有设定padding-bottom时的高度,当它里面的任一列高度增长了,则父容器的高度被撑到它里面最高那列的高度,其余比这列矮的列则会用它们的padding-bottom来补偿这部分高度差。由于背景是能够用在padding占用的空间里的,并且边框也是跟随padding变化的,因此就成功的完成了一个障眼法。布局
<style> body{ padding:0; margin:0; color:#f00;} .container{ margin:0 auto; width:600px; border:3px solid #00C; overflow:hidden; /*这个超出隐藏的声明在IE6里不写也是能够的*/ } .left{ float:left; width:150px; background:#B0B0B0; padding-bottom:2000px; margin-bottom:-2000px; } .right{ float:left; width:450px; background:#6CC; padding-bottom:2000px; margin-bottom:-2000px; } </style>
<div class="container">
<div class="left">我是left</div>
<div class="right">我是right<br><br><br>如今个人高度比left高,但left用它的padding-bottom补偿了这部分高度</div>
<div style="clear:both"></div>
</div>
- margin加倍
设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。解决方案是在这个div里面加上 display:inline;
例如:
<#div id=”iamfloat”>
相应的css为
#IamFloat{
float:left; margin:5px;/*IE下理解为10px*/
display:inline;/*IE下再理解为5px*/
}- min-width和min-height
IE 不认得min-这个定义,若是只用min-width和min-height的话,IE下面根本等于没有设置宽度和高度。
要解决这个问题,能够这样:
#box{
width: 80px; height: 35px;
}
html>body #box{
width: auto; height: auto;
min-width: 80px; min-height: 35px;
}- 没法定义1px左右高度的容器
IE6下这个问题是由于默认的行高形成的,解决的方法也有不少,
例如:
overflow:hidden | zoom:0.08 | line-height:1px
- 渐进识别ie的方式,从整体中逐渐排除局部。
首先,巧妙的使用“\9”这一标记,将IE游览器从全部状况中分离出来。
接着,再次使用“+”将IE8和IE七、IE6分离开来,这样IE8已经独立识别。
.bb{
background-color:red;/*全部识别*/
background-color:#00deff\9; /*IE六、七、8识别*/
+background-color:#a200ff;/*IE六、7识别*/
_background-color:#1e0bd1;/*IE6识别*/
}- IE下,可使用获取常规属性的方法来获取自定义属性,
也可使用getAttribute()获取自定义属性;
Firefox下,只能使用getAttribute()获取自定义属性。
解决方法:统一经过getAttribute()获取自定义属性。- Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,
可经过加入 CSS 属性 -webkit-text-size-adjust: none; 解决。visibility:collapse;
仅在Firefox下起做用,IE会显示元素,Chrome会将元素隐藏,可是占据空间.
- 由于浏览器的兼容问题,不一样浏览器对有些标签的默认值是不一样的,若是没对CSS初始化每每会出现浏览器之间的页面显示差别。
- 固然,初始化样式会对SEO有必定的影响,但鱼和熊掌不可兼得,但力求影响最小的状况下初始化
淘宝的样式初始化代码:字体
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
h1, h2, h3, h4, h5, h6{ font-size:100%; }
address, cite, dfn, em, var { font-style:normal; }
code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
small{ font-size:12px; }
ul, ol { list-style:none; }
a { text-decoration:none; }
a:hover { text-decoration:underline; }
sup { vertical-align:text-top; }
sub{ vertical-align:text-bottom; }
legend { color:#000; }
fieldset, img { border:0; }
button, input, select, textarea { font-size:100%; }
table { border-collapse:collapse; border-spacing:0; }
{ width: 160px; overflow: hidden; text-overflow:ellipsis; white-space: nowrap; }
- white-space: nowrap 保证文本内容不会自动换行,若是多余的内容会在水平方向撑破单元格。
- overflow: hidden 隐藏超出单元格的部分。
- text-overflow: ellipsis 将被隐藏的那部分用省略号代替。
- visible 默认值。元素是可见的。
- hidden 元素是不可见的。
- collapse 当在表格元素中使用时,此值可删除一行或一列,可是它不会影响表格的布局。被行或列占据的空间会留给其余内容使用。若是此值被用在其余的元素上,会呈现为 “hidden”。
- inherit 规定应该从父元素继承 visibility 属性的值。
visibility:collapse;
仅在Firefox下起做用,IE会显示元素,Chrome会将元素隐藏,可是占据空间.
块级格式化上下文:block formatting context
一个页面是由不少个 Box 组成的,元素的类型和 display 属性,决定了这个 Box 的类型。
不一样类型的 Box,会参与不一样的 Formatting Context(决定如何渲染文档的容器),所以Box内的元素会以不一样的方式渲染,也就是说BFC内部的元素和外部的元素不会互相影响。
BFC生成
约束规则
浮动与BFC
多栏布局与BFC
——BFC部分来自原文☞我对BFC的理解