add file
This commit is contained in:
qianguyihao 2017-07-29 11:14:53 +08:00
parent ddfab9759e
commit 67f2f5985d
4 changed files with 745 additions and 73 deletions

View File

@ -52,6 +52,10 @@ css的最新版本是css3我们学习的是css2.1。 因为css3和css2.1不
比如说有一个样式需要在一百个页面上显示如果是html来实现那要写一百遍现在有了css只要写一遍。现在html只提供数据和一些控件完全交给css提供各种各样的样式。
### CSS的重点知识点
盒子模型、浮动、定位
### CSS 整体感知
@ -94,7 +98,7 @@ css的最新版本是css3我们学习的是css2.1。 因为css3和css2.1不
解释如下:
20170710_1604.png
![](http://img.smyhvae.com/20170710_1605.png)
我们写css的地方是style标签就是“样式”的意思写在head里面。后面的课程中我们将知道css也可以写在单独的文件里面现在我们先写在style标签里面。

View File

@ -1,13 +1,16 @@
02-CSS的继承性和层叠性
> 本文最初发表于[博客园](http://www.cnblogs.com/smyhvae/p/7253929.html),并在[GitHub](https://github.com/smyhvae/Web)上持续更新。以下是正文。
## CSS的继承性
我们来看下面这样的代码:
我们来看下面这样的代码,来引入继承性:
![](http://img.smyhvae.com/20170724_2359.png)
20170724_2359.png
上方代码中我们给div标签增加红色属性却发现div里的每一个子标签`<p>`也增加了红色属性。于是我们得到这样的结论:
@ -17,13 +20,15 @@
但是呢,如果再给上方的代码加一条属性:
20170725_2122.jpg
![](http://img.smyhvae.com/20170725_2122.jpg)
上图中我们给div加了一个border但是发现只有div具备了border属性而p标签却没有border属性。
以下属性具有继承性color、 text-开头的、line-开头的、font-开头的。
**关于文字样式的,都能够继承;所有关于盒子的、定位的、布局的属性都不能继承。**
上图中我们给div加了一个border但是发现只有div具备了border属性而p标签却没有border属性。于是我们可以得出结论
- 关于文字样式的都具有继承性。这些属性包括color、 text-开头的、line-开头的、font-开头的。
- 所有关于盒子的、定位的、布局的属性都不能继承。
以后当我们谈到css有哪些特性的时候我们要首先想到继承性。而且要知道哪些属性具有继承性、哪些属性没有继承性。
@ -44,8 +49,8 @@ CSS像艺术家一样优雅像工程师一样严谨。
我们来看一个例子,就知道什么叫层叠性了。
![](http://img.smyhvae.com/20170725_2132.png)
20170725_2132.png
上图中三种选择器同时给P标签增加颜色的属性但是文字最终显示的是蓝色这个时候就出现了层叠性的情况。
@ -63,7 +68,9 @@ CSS像艺术家一样优雅像工程师一样严谨。
#### 举例1计算权重
20170725_2138.png
![](http://img.smyhvae.com/20170725_2138.png)
如上图所示,统计各个选择器的数量,优先级高的胜出。文字的颜色为红色。
@ -71,26 +78,31 @@ PS不进位实际上能进位奇淫知识点255个标签等于1
#### 举例2权重相同时
20170725_2250.png
![](http://img.smyhvae.com/20170725_2250.png)
上图可以看到,第一个样式和第二个样式的权重相同。但第二个样式的书写顺序靠后,因此以第二个样式为准(就近原则)。
#### 举例3具有实战性的例子
20170726_2221.png
![](http://img.smyhvae.com/20170726_2221.png)
现在我要让一个列表实现上面的这种样式第一个li为红色剩下的li全部为蓝色。
如果写成下面这种代码是无法实现的:
20170726_2225.png
![](http://img.smyhvae.com/20170726_2225.png)
无法实现的原因很简单,计算一下三个选择器的权重就清楚了,显然第二个样式被第一个样式表覆盖了。
正确的做法是:(**非常重要**
20170726_2229.png
![](http://img.smyhvae.com/20170726_2229.png)
上图中,第二个样式比第一个样式的权重要大。因此在实战中可以实现这种效果:**所有人当中,让某一个人为红,让其他所有人为蓝。**
@ -110,22 +122,26 @@ PS不进位实际上能进位奇淫知识点255个标签等于1
为了验证上面这句话,我们来看看下面这样的例子:
![](http://img.smyhvae.com/20170727_0843.png)
20170727_0843.png
另外:**如果大家都是0那么有一个就近原则谁描述的近听谁的。**举例如下:
20170727_0845.png
![](http://img.smyhvae.com/20170727_0845.png)
### 权重问题大总结
通过列举上面几个例子,我们对权重问题做一个总结:
- 1先看有没有选中如果选中了那么以id数类数标签数来计权重。谁大听谁的。如果都一样就近原则。
- 2如果没有选中那么权重是0。如果大家都是0就近原则。
### 层叠性:权重问题大总结(重要)
层叠性。层叠性是一种能力就是处理冲突的能力。当不同选择器对一个标签的同一个样式有不同的值听谁的这就是冲突。css有着严格的处理冲突的机制。
通过列举上面几个例子,我们对权重问题做一个总结。
- 选择上了,数权重,(id的数量类的数量标签的数量)。如果权重一样,谁写在后面听谁的。
- 没有选择上,通过继承影响的,就近原则,谁描述的近听谁的。如果描述的一样近,比如选择器权重,如果权重再一样重,谁写在后面听谁的。
### 题目演示
@ -133,28 +149,246 @@ CSS的层叠性讲完了我们来做几个题目吧。
#### 题目1
20170727_0928.png
![](http://img.smyhvae.com/20170727_0851.png)
#### 题目2
20170727_0929.png
![](http://img.smyhvae.com/20170727_0853.png)
#### 题目3
20170727_0930.png
![](http://img.smyhvae.com/20170727_0855.png)
#### 题目4
20170727_0931.png
![](http://img.smyhvae.com/20170727_0857.png)
## CSS样式表的冲突解决
## 知识回顾
> 我们把以上内容和上一篇文章做一个简单的知识回顾。
### CSS属性
> css属性面试的时候会有笔试笔试没有智能感应的。
加粗,倾斜,下划线:
```
font-weight:bold;
font-style:italic;
text-decoration:underline;
```
背景颜色、前景色:
```
background-color:red;
color:red;
```
### class和id的区别
class用于css的id用于js的。
1class页面上可以重复。id页面上唯一不能重复。
2一个标签可以有多个class用空格隔开。但是id只能有id。
### 各种选择器(浏览器兼容性)
IE6层面兼容的选择器 标签选择器、id选择器、类选择器、后代、交集选择器、并集选择器、通配符。如下
```
p
#box
.spec
div p
div.spec
div,p
*
```
IE7能够兼容的儿子选择器、下一个兄弟选择器。如下
```
div>p
h3+p
```
IE8能够兼容的
```
ul li:first-child
ul li:last-child
```
### css两个性质
- 继承性:好的事儿。继承从上到下,哪些能?哪些不能?
- 层叠性:冲突,多个选择器描述了同一个属性,听谁的?
再看几个题目:
![](http://img.smyhvae.com/20170727_0900.png)
![](http://img.smyhvae.com/20170727_0901.png)
![](http://img.smyhvae.com/20170727_0902.png)
![](http://img.smyhvae.com/20170727_0903.png)
## 权重问题深入
### 同一个标签,携带了多个类名,有冲突:
这里需要补充两种冲突的情况:
- 1、对同一个标签如果用到了了多个相同的内嵌样式表它的优先级 **定义**的样式表中,谁最近,就用谁。
- 2、对于同一个标签如果引用了多个相同的外部样式表它的优先级html文件中引用样式表的位置越近就用谁。
例如:(就近原则)
![](http://img.smyhvae.com/20170727_2021.png)
上图中,**文字显示的颜色均为红色**。因为这和在标签中的挂类名的书序无关只和css的顺序有关。
### !important标记
来看个很简单的例子:
![](http://img.smyhvae.com/20170727_2029.png)
上图中显然id选择器的权重最大所以文字的颜色是红色。
如果我们想让文字的颜色显示为绿色,只需要给标签选择器的加一个`!important`标记,此时其权重为无穷大。如下:
![](http://img.smyhvae.com/20170727_2035.png)
important是英语里面的“重要的”的意思。我们可以通过如下语法
```
k:v !important;
```
来给一个属性提高权重。这个属性的权重就是**无穷大**。
注意,一定要注意语法的正确性。
正确的语法:
```
font-size:60px !important;
```
错误的语法:
```
font-size:60px; !important; 不能把!important写在外面
font-size:60px important; 不能忘记感叹号
```
`!important`标记需要强调如下3点
**1!important提升的是一个属性而不是一个选择器**
```css
p{
color:red !important; 只写了这一个!important所以只有字体颜色属性提升了权重
font-size: 100px ; 这条属性没有写!important所以没有提升权重
}
#para1{
color:blue;
font-size: 50px;
}
.spec{
color:green;
font-size: 20px;
}
```
所以综合来看字体颜色是red听important的字号是50px听id的
**2!important无法提升继承的权重该是0还是0**
比如HTML结构
```html
<div>
<p>哈哈哈哈哈哈哈哈</p>
</div>
```
有CSS样式
```css
div{
color:red !important;
}
p{
color:blue;
}
```
由于div是通过继承性来影响文字颜色的所以!important无法提升它的权重权重依然是0。
干不过p标签因为p标签是实实在在选中了所以字是蓝色的以p为准
**(3)!important不影响就近原则**
如果大家都是继承来的按理说应该按照“就近原则”那么important能否影响就近原则呢
答案是不影响。远的永远是远的。不能给远的写一个important干掉近的。
为了验证这个问题,我们可以搞两层具有继承性的标签,然后给外层标签加一个!important最终看看就近原则有没有被打破。举例如下
![](http://img.smyhvae.com/20170727_2046.png)
PS! important做站的时候不允许使用。因为会让css写的很乱。
现在,我们知道层叠性能比较很多东西:
选择器的写法权重,谁离的近,谁写在下面。
### CSS样式表的冲突的总结
- 1、对于相同的选择器其样式表排序行级 > 内嵌 > 外部(就近原则)
- 2、对于相同方式的样式表其选择器排序ID选择器 > 类选择器 > 标签选择器
@ -168,7 +402,7 @@ CSS的层叠性讲完了我们来做几个题目吧。
另外还有两个冲突的情况:
- 1、对同一个标签如果用到了了多个相同的内嵌样式表它的优先级 **定义**的样式表中,谁最近,就用谁。
- 1、对同一个标签如果用到了了多个相同的内嵌样式表它的优先级**定义**的样式表中,谁最近,就用谁。
- 2、对于同一个标签如果引用了多个相同的外部样式表它的优先级html文件中引用样式表的位置越近就用谁。
例如:
@ -177,53 +411,23 @@ CSS的层叠性讲完了我们来做几个题目吧。
### 权重计算的总结(非常重要)
![](http://img.smyhvae.com/20170727_2050.png)
上面这个图非常重要,我们针对这个图做一个文字描述:
- 选择上了,数权重,(id的数量类的数量标签的数量)。如果权重一样,谁写在后面听谁的。
- 没有选择上,通过继承影响的,就近原则,谁描述的近听谁的。如果描述的一样近,比如选择器权重,如果权重再一样重,谁写在后面听谁的。
我们来看下面这个例子:
img
这例子有点难。

447
02-CSS/03-盒子模型.md Normal file
View File

@ -0,0 +1,447 @@
## 盒子模型
### 盒子中的区域
一个盒子中主要的属性就5个width、height、padding、border、margin。如下
- width内容的宽度。CSS中 width 指的是内容的宽度,而不是盒子的宽度。
- height内容的高度。CSS中 height 指的是内容的高度,而不是盒子的高度。
- padding内边距。
- border边框。
- margin外边距。
盒子模型的示意图:
![](http://img.smyhvae.com/20170727_2128.png)
代码演示:
![](http://img.smyhvae.com/20170727_2326.png)
上面这个盒子width:200px; height:200px; 但是真实占有的宽高是302*302。 这是因为还要加上padding、border。注意**宽度和真实占有宽度,不是一个概念!**
### 认识width、height
一定要知道,在前端开发工程师眼中,世界中的一切都是不同的。
比如说,丈量稿纸,前端开发工程师只会丈量内容宽度:
![](http://img.smyhvae.com/20170727_2329.png)
下面这两个盒子真实占有宽高都是302*302
盒子1
```css
.box1{
width: 100px;
height: 100px;
padding: 100px;
border: 1px solid red;
}
```
盒子2
```css
.box2{
width: 250px;
height: 250px;
padding: 25px;
border: 1px solid red;
}
```
真实占有宽度 = 左border + 左padding + width + 右padding + 右border
上面这两个盒子的盒模型图如下:
![](http://img.smyhvae.com/20170728_0925.png)
**如果想保持一个盒子的真实占有宽度不变那么加width的时候就要减padding。加padding的时候就要减width**。因为盒子变胖了是灾难性的,这会把别的盒子挤下去。
PS小技巧在sublime text中为了快速输入`border:1px solid red;`这个属性,可以直接输入`bd`,然后选第二个后回车。
### 认识padding
#### padding区域也有颜色
padding就是内边距。padding的区域有背景颜色css2.1前提下并且背景颜色一定和内容区域的相同。也就是说background-color将填充**所有boder以内的区域。**
效果如下:
![](http://img.smyhvae.com/20170728_1005.png)
#### padding有四个方向
padding是4个方向的所以我们能够分别描述4个方向的padding。
方法有两种,第一种写小属性;第二种写综合属性,用空格隔开。
小属性的写法:
```
padding-top: 30px;
padding-right: 20px;
padding-bottom: 40px;
padding-left: 100px;
```
综合属性的写法:(上、右、下、左)(用空格隔开)
```
padding:30px 20px 40px 100px;
```
如果写了四个值,则顺序为:上、右、下、左。
如果只写了三个值,则顺序为:上、右、下。??和右一样。
如果只写了两个值,比如说:
```
padding: 30px 40px;
```
则顺序等价于30px 40px 30px 40px;
要懂得,**用小属性层叠大属性**。比如:
```
padding: 20px;
padding-left: 30px;
```
上面的padding对应盒子模型为
![](http://img.smyhvae.com/20170728_1039.png)
下面的写法:
```
padding-left: 30px;
padding: 20px;
```
第一行的小属性无效,因为被第二行的大属性层叠掉了。
下面的题,会做了,说明你明白了。
#### 一些题目
**题目1**说出下面盒子真实占有宽高,并画出盒模型图。
```css
div{
width: 200px;
height: 200px;
padding: 10px 20px 30px;
padding-right: 40px;
border: 1px solid #000;
}
```
答案:
![](http://img.smyhvae.com/20170728_1048.png)
**题目2**说出下面盒子真实占有宽高,并画出盒模型图。
```css
div{
width: 200px;
height: 200px;
padding-left: 10px;
padding-right: 20px;
padding:40px 50px 60px;
padding-bottom: 30px;
border: 1px solid #000;
}
```
答案:
`padding-left:10px` 和`padding-right:20px;` 没用因为后面的padding大属性层叠掉了他们。
盒子模型如下:
![](http://img.smyhvae.com/20170728_1100.png)
**题目3**现在给你一个盒子模型图,请写出代码,试着用最最简单的方法写。
![](http://img.smyhvae.com/20170728_1401.png)
答案:
```
width:123px;
height:123px;
padding:20px 40px;
border:1px solid red;
```
**题目4**现在给你一个盒子模型图,请写出代码,试着用最最简单的方法写。
![](http://img.smyhvae.com/20170728_1402.png)
答案:
```
width:123px;
height:123px;
padding:20px;
padding-right:40px;
border:1px solid red;
```
#### 一些元素默认带有padding
一些元素,默认带有`padding`比如ul标签。如下
![](http://img.smyhvae.com/20170728_1413.png)
上图显示不加任何样式的ul也是有40px的padding-left。
所以我们做站的时候为了便于控制总是喜欢清除这个默认的padding。
可以使用`*`进行清除:
```
*{
margin: 0;
padding: 0;
}
```
但是,`*`的效率不高,所以我们使用并集选择器,罗列所有的标签(不用背,有专业的清除默认样式的样式表,今后学习):
```
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{
margin:0;
padding:0;
}
```
### 认识border
border就是边框。边框有三个要素像素粗细、线型、颜色。
颜色如果不写,默认是黑色。另外两个属性不写,要命了,显示不出来边框。
#### border-style
border的所有的线型如下我们可以通过查看`CSS参考手册`得到)
![](http://img.smyhvae.com/20170728_1435.png)
比如`border:10px ridge red;`这个属性在chrome和firefox、IE中有细微差别因为可以显示出效果因此并不是兼容性问题只是有细微差别而已
![](http://img.smyhvae.com/20170728_1619.png)
如果公司里面的设计师是处女座的,追求极高的**页面还原度**那么不能使用css来制作边框。就要用到图片就要切图了。
所以比较稳定的border-style就几个solid、dashed、dotted。
#### border拆分
border是一个大综合属性。比如说
```
border:1px solid red;
```
就是把4个边框都设置为1px宽度、线型实线、red颜色。
border属性是能够被拆开的有两大种拆开的方式
- 1按三要素拆开border-width、border-style、border-color。一个border属性是由三个小属性综合而成的
- 2按方向拆开border-top、border-right、border-bottom、border-left。
现在我们明白了:**一个border属性是由三个小属性综合而成的**。如果某一个小属性后面是空格隔开的多个值,那么就是上右下左的顺序。举例如下:
```
border-width:10px 20px;
border-style:solid dashed dotted;
border-color:red green blue yellow;
```
效果如下:
![](http://img.smyhvae.com/20170728_1516.png)
1按三要素拆
```
border-width:10px; //边框宽度
border-style:solid; //线型
border-color:red; //颜色。
```
等价于:
```
border:10px solid red;
```
(2)按方向来拆:
```
border-top:10px solid red;
border-right:10px solid red;
border-bottom:10px solid red;
border-left:10px solid red;
```
等价于:
```
border:10px solid red;
```
3按三要素和方向来拆
> 就是把每个方向的每个要素拆开。3*4 = 12
```
border-top-width:10px;
border-top-style:solid;
border-top-color:red;
border-right-width:10px;
border-right-style:solid;
border-right-color:red;
border-bottom-width:10px;
border-bottom-style:solid;
border-bottom-color:red;
border-left-width:10px;
border-left-style:solid;
border-left-color:red;
```
等价于:
```
border:10px solid red;
```
工作中到底用什么?很简答:什么简单用什么。举例如下:
![](http://img.smyhvae.com/20170728_1606.png)
为了实现上方效果,写法如下:
```
border:10px solid red;
border-right-color:blue;
```
![](http://img.smyhvae.com/20170728_1608.png)
为了实现上方效果,写法如下:
```
border:10px solid red;
border-style:solid dashed;
```
border可以没有
```
border:none;
```
可以某一条边没有:
```
border-left: none;
```
也可以调整左边边框的宽度为0
```
border-left-width: 0;
```
#### 举例利用border属性画一个三角形小技巧
步骤如下:
1当我们设置盒子的width和height为0时此时效果如下
![](http://img.smyhvae.com/20170728_1640.png)
2然后将border的底部取消
![](http://img.smyhvae.com/20170728_1645.png)
3最后设置border的左边和右边为白色
![](http://img.smyhvae.com/20170728_1649.png)
这样,一个三角形就画好了。

View File

@ -1,2 +1,19 @@
# JS
从零开始学前端做一个web全栈工程师。
## HTML
- [01-html标签图文详解](./01-html/01-html标签图文详解)
- [01-html标签图文详解](./01-html/01-html标签图文详解)
## CSS
- [01-CSS样式表和选择器](./02-CSS/01-CSS样式表和选择器)
- [02-CSS的继承性和层叠性](./02-CSS/02-CSS的继承性和层叠性)
- [03-盒子模型](./02-CSS/03-盒子模型)