CSS
1.1 CSS 编写的位置
使用CSS来修改元素的样式
- 第一种方式:内联样式/行内样式
- 第二种方式:内部样式表
- 第三种方式:外部样式表(最佳实践)
1.1.1 内联样式
代码语言:javascript复制在标签内部通过style属性来设置元素的样式 问题: 使用内联样式,样式只能对一个标签生效, 如果希望影响到多个元素必须在每一个元素中都复制一遍 并且当样式发生变化时,我们必须要个一个的修改, 非常的不方 便 注意:开发时绝对不要使用内联样式
<p style="color: red; font-size: 60px;">少小离家老大回,乡音无改鬓毛衰</p>
1.1.2 内部样式表
代码语言:javascript复制将样式编写到head中的style标签里,然后通过css的选择器来选中元素并为其设置各种样式,可以同时为多个标签设置样式,并且修改时只需要修改一处即可,内部样式表更加方便对样式进行复用 问题: 我们的内部样式表只能对一个网页起作用, 它里边的样式不能跨页面进行复用
<!-- 位置 {} 为CSS选择器 -->
<styLe>
p{
coLor: aqua;
font-size: 20px ;
}
</styLe>
1.1.3 外部样式表
代码语言:javascript复制可以将CSS样式编写到一个外部的CSS文件中,然后通过link标签来引入外部的CSS文件,外部样式表需要通过link标签进行引入,意味着只要想使用这些样式的网页都可以对其进行引用,使样式可以在不同页面之间进行复用,将样式编写到外部的CSS文件中,可以使用到浏览器的缓存机制,从而加快网页的加载速度,提高用户的体验。
<!--test.css-->
p{
coLor: aqua;
font-size: 20px ;
}
代码语言:javascript复制<head>
<link rel="styLesheet" href="test. css">
</head>
1.2 常用的选择器
1.2.1 简单选择器
1.2.1.1 元素选择器
代码语言:javascript复制元素选择器 作用:根据标签名来选中指定的元素 语法:标签名{}
<!--HTML;-->
<p > test </p>
<!--CSS:-->
p{color:blue;}
1.2.1.2 id选择器
代码语言:javascript复制id选择器 作用:根据元素的id属性值选中一个元素 语法:#id{}
<!--HTML;-->
<p id="box"> test </p>
<!--CSS:-->
#box{color:blue;}
1.2.1.3 class选择器(主要使用)
代码语言:javascript复制类选择器 作用:根据元素的class属性值选中一组元素 语法:.class属性值
<!--HTML;-->
<p class="one"> test </p>
<!--CSS:-->
.one{
color:blue;
}
1.2.1.4 通配选择器
代码语言:javascript复制通配选择器 作用:选中页面中的所有元素 语法:*
<!--CSS:-->
*{
color:blue;
}
1.2.1.5 属性选择器(使用较多)
代码语言:javascript复制[属性名]:选择含有指定属性的元素 [属性名=属性值]:选择含有指定属性和属性值的元素 [属性名^=属性值]:选择属性值以指定值开头的元素 [属性名$=属性值]:选择属性值以指定值结尾的元素 [属性名*=属性值]:选择属性值中含有某值的元素的元素
<!--CSS:-->
div[id="box"]{
color:blue;
}
1.2.2 复合选择器
1.2.2.1 交集选择器
代码语言:javascript复制交集选择器 作用:选中同时复合多个条件的元素 语法:选择器1选择器2选择器3选择器n{} 注意点:交选择器中如果有元素选择器,必须使用元素选择器开头。
<!--HTML;-->
<p class="one"> test </p>
<!--CSS:-->
div.one{
font -size: 30px;
}
1.2.2.2 并集(分组)选择器
代码语言:javascript复制选择器分组(并集选择器) 作用:同时选择多个选择器对应的元素 语法:选择器1 ,选择器2 ,选择器3,选择器n{}
<!--HTML;-->
<p class="one"> test01 </p>
<p class="two"> test02 </p>
<!--CSS:-->
div,.one,.two{
font -size: 30px;
}
1.2.3 关系选择器
父元素:直接包含子元素的元素叫做父元素 子元素:直接被父元素包含的元素是子元素 祖先元素:直接或间接包含后代元素的元素叫做祖先元素,一个元素的父元素也是它的祖先元素。 后代元素:直接或间接被祖先元素包含的元素叫做后代元素,子元素也是后 代元素。 兄弟元素:拥有相同父元素的元素是兄弟元素
1.2.3.1 子类选择器
代码语言:javascript复制子元素选择器 作用:选中指定父元素的指定子元 语法:父元素>子元素
<!--HTML;-->
<div class="box">
<span class="test"> test02 </div>
</div>
<!--CSS:-->
div.box > span{
color: orange;
}
1.2.3.2 后代选择器
代码语言:javascript复制后代元素选择器: 作用:选中指定元素内的指定后代元素 语法:祖先 后代
<!--HTML;-->
<div class="box01">
<span class="test"> test01 </div>
</div>
<div class="box02">
<span class="test"> test02 </div>
</div>
<!--CSS:-->
div span{
color: orange;
}
1.2.3.3 兄弟元素选择器
代码语言:javascript复制选择当前元素的下一个兄弟:当前 下一个 (如果二者之间隔得有元素 则无效)
h1 p {
color: orange;
}
代码语言:javascript复制选择下面所有兄弟
h1 ~ p {
color: orange;
}
1.2.4 伪类选择器
伪类: 一种不存在的类,特殊的类。用来描述一个元素所处的特殊状态。 例如: 第一个子元素 (由于前面可能会加新的子元素,所以第一个子元素是不定的不存在的);鼠标光标移入的元素。
伪类一般情况下都是使用:(冒号)开头 例如: :first-child 第一个子元素 :last-child 最后一个子元素 :nth-child()选中第n个子元素 特殊值: n 第n个 n的范围 0到正无穷 2n 或 even 表示选中偶数位的元素 2n 1 或 odd 表示选中奇数位的元素 以上这些伪类都是根据所有的子元素进行排序 :first-of-type :last-of-type :nth-of-type( ) 这几个伪类的功能和上述的类似,不同点是他们是在同类型元素中进行排序 :not()否定伪类 将符合条件的元素从选择器中去除
超链接的伪类: :link 超链接独有 作用:用来表示没有被点击过的链接 :visited 超链接独有 作用:表示访问过的链接,由于隐私的原因,所以visited这个伪类 只能修改链接的颜色。 :hover 可以绑定其他元素 如div ul nav啥的 作用:用来表示鼠标移入的状态 :active 作用:用来表示鼠标点击
1.2.4 伪类选择器
伪元素:表示页面中一些特殊的并不真实的存在的元素。 伪元素使用::开头 例如: ::first-letter 表示第:一个字母 ::first-line 表示第一行 ::selection表示选中的内容 ::before 元素的开始 ::after元素的最后 before和after 必须结合content属性来使用
1.2.5 选择器的权重(优先级)
权重计算规则 第一等:代表内联样式,如: style=””,权值为1000。 第二等:代表ID选择器,如:#content,权值为0100。 第三等:代表类,伪类和属性选择器,如.content,权值为0010。 第四等:代表元素选择器和伪元素选择器,如div p,权值为0001。 通配符、子选择器、相邻选择器等的。如*、>、 ,权值为0000。 继承的样式没有权值。 比较规则: 1,0,0,0 > 0,99,99,99,也就是说从左往右逐个等级比较,前一等级相等才往后比。 1, 0 , 0, 0 0, 99 , 99 , 99
1.3 单位
1.3.1 字体单位:
像素、百分比、em、rem、
长度单位: 像素: 屏幕(显示器)实际上是由一个一个的小点点构成的,不同屏幕的像素大小是不同的,像素越小的屏幕显示的效果越清晰,所以同样的200px在不同的设备下显示效果不一样。 百分比: 也可以将属性值设置为相对于其父元素属性的百分比,设置百分比可以使子元素跟随父元素的改变而改变 em: em是相对于元素的字体大小来计算的 1em = 1font-size em会根据字体大小的改变而改变 rem rem是相对于根元素的字体大小来计算。
1.3.2 颜色单位
在CSS中可以直接使用颜色名来设置各种颜色,比如: red、 orange、 yellow、 blue、 green,但是在css中直接使用颜色名是非常的不方便。 RGB值: RGB通过三种颜色的不同浓度来调配出不同的颜色 R red, G green ,B blue 每一种颜色的范围在0-255(0%-100%)之间 语法: RGB(红色,绿色,蓝色) RGBA : 就是在rgb的基础上增加了一个a表示不透明度 需要四个值,前三个和rgb-样,第四个表示不透明度 1表示完全不透明0表示完全透明 . 5半透明 十六进制的RGB值: 语法: #红色绿色蓝色 颜色浓度通过00-ff 如果颜色两位两位重复可以进行简写 #aabbcc --> #abc
1.4 盒子模型
盒模型、盒子模型、框模型(box model) CSS将页面中的所有元素都设置为了一个矩形的盒子,将元素设置为矩形的盒子后,对页面的布局就变成将不同的盒子摆放到不同的位置每一个盒子都由以下几个部分组成: 内容区(content) 内边距( padding) 边框(border) 外边距(margin)
- 内容区
内容区(content) : 元素中的所有的子元素和文本内容都在内容区中排列,内容区的大小由width和height两个 属性来设置。 width:设置内容区的宽度 height:设置内容区的高度
- 边框
边框(border): 边框属于盒子边缘,边框里边属于盒子内部,出了边框都是盒子的外部,边框的大小会影响到整个盒子的大小,要设置边框,需要至少设置三个样式: 边框的宽度:border-width 边框的颜色:border-color 边框的样式:border-style border-width: 默认值,一般都是3个像素 border-width可以用来指定四个方向的边框的宽度值的情况 四个值:上右下左 三个值:上左右下 两个值:上下左右 一个值:上下左右 除了border-width还有组border-xxx-width,xxx可以是top right bottom left用来单独指定某一个边的宽度。 border-color: 用来指定边框的颜色,同样可以分别指定四个边的边框,规则和border -width一样,border-color也可以省略不写,如果省略了则自动使用color的颜色值 border-style: 默认值是none表示没有边框 border-style指定边框的样式 solid表示实线 dotted点状虚线 dashed虚线 double双线 简写:border简写属性,通过该属性可以同时设置边框所有的相关样式,并且没有顺序要求。 除了border以外还有四个border-xxx border-top border-right border- bot tom border-left
- 内边距
内边距(padding) 内容区和边框之间的距离是内边距 一共有四个方向的内边距: padding-top padding-right padding - bottom padding- left 内边距的设置会影响到盒子的大小,背景颜色会延伸到内边距上,盒子的可见框的大小,由内容区内边距和边框共同决定,所以在计算盒子大小时,需要将这三个区域加到一起计算。 简写:padding内边距的简写属性,可以同时指定四个方向的内边距,规则和border-width一样。
- 外边距
外边距(margin) 外边距不会影响盒子可见框的大小,但是外边距会影响盒子的位置 一共有四个方向的外边距 margin-top:上外边距,设置一个正值,元素会向下移动 margin-right:默认情况下设置margin-right不会产生任何效果 margin- bottom:下外边距,设置一个正值,其下边的元素会向下移动 margin-left:左外边距,设置-一个正值, 元素会向右移动 margin也可以设置负值,如果是负值则元素会向相反的方向移动,元素在页面中是按照自左向右的顺序排列的,所以默认情况下如果我们设置的左和上外边距则会移动元素自身,而设置下和右外边距会移动其他元素。 简写:margin可以同时设置四个方向的外边距,用法和padding一样,margin会影响到盒子实际占用空间。 垂直外边距的重叠(折叠): 相邻的垂直方向外边距会发生重叠现象。 兄弟元素: 兄弟元素间的相邻垂直外边距会取两者之间的较大值(两者都是正值) 特殊情况: 如果相邻的外边距一正一负,则取两者的和。 如果相邻的外边距都是负值,则取两者中绝对值较大的。 兄弟元素之间的外边距的重叠,对于开发是有利的,所以我们不需要进行处理。 父子元素: 父子元素间相邻外边距,子元素的会传递给父元素(上外边距) 父子外边距的折叠会影响到页面的布局,必须要进行处理
- 元素的水平方向布局
一个元素在其父元素中必须满足: 从左到右 即左外边距 左边框 左内边距 内容区长度 右内边距 右边框 右外边距 = 父元素内容区长度 若不相等,则为过度约束,浏览器会自动调改 使其相等。在没有auto的情况下回调整外右边距,但有auto的话会优先调改设置为auto的元素。 元素的水平方向的布局: 元素在其父元素中水平方向的位置由以下几个属性共同决定 margin-left border-left padding- left width padding-right border-right margin-right 以上等式必须满足,如果相加结果使等式不成立,则称为过渡约束,则等式会自动调整,调整的情况: ->如果这七个值中没有为auto的情况,则浏览器会自动调整margin-right值以使等式满足,这七个值中有三个值和设置为auto:width、margin-left、maring-right ->如果某个值为auto,则会自动调整为auto的那个值以使等式成立 如果将一个宽度和一个外边距设置为auto,则宽度会调整到最大,设置为auto的外边距会自动为0。 如果将三个值都设置为auto,则外边距都是0,宽度最大。 如果将两个外边距设置为auto,宽度固定值,则会将外边距设置为相同的值。 所以我们经常利用这个特点来使一个元素 在其父元素中水平居中
- 元素的垂直方向布局
子元素是在父元素的内容区中排列的, 如果子元素的大小超过了父元素,则子元素会从父元素中溢出 使用overflow(可以-x或-y) 属性来设置父元素如何处理溢出的子元素 可选值: visible:默认值子元素会从父元素中溢出,在父元素外部的位置显示 hidden:溢出内容将会被裁剪不会显示 scroll:生成两个滚动条,通过滚动条来查看完整的内容 auto:根据需要生成滚动条
- 行内元素的盒模型
行内元素不支持设置宽度和高度 行内元素可以设置padding,但是垂直方向padding不会影响页面的布局 行内元素可以设置border,垂直方向的border不会影响页面的布局 行内元素可以设置margin,垂直方向的margin不会影响布局 display: 用来设置元素显示的类型 可选值: inline:将元素设置为行内元素 block:将元素设置为块元素 inline-block:将元素设置为行内块元素,行内块,既可以设置宽度和高度又不会独占一行 table:将元素设置为一个表格 none:元素不在页面中显示 visibflity: 用来设置元素的显示状态 可选值: visible:默认值,元素在页面中正常显示 hidden:元素在页面中隐藏不显示,但是依然占据页面的位置
- 默认样式
默认样式: 通常情况,浏览器都会为元素设置些默认样式 ,默认样式的存在会影响到页面的布局,通常情况下编写网页时必须要去除浏览器的默认样式(PC端)因为这是许多人都有的需求,所以可以引用别人写好的css文档然后再引用到自己的代码中利用。