CSS|青训营

78 阅读10分钟

格式:选择器+{属性名:属性值;}

css求值过程

1、先将代码解析为DOM树和样式规则。,

2、filtering:筛选出与各个元素匹配的样式,

3、cascading:按照优先级规则选出优先级最高的属性值(层叠值)。

4、defaulting:层叠值为空时使用默认值或初始值

5、resolving:将相对值或者关键字进行转换得到计算值(浏览器拿到就可以立即计算出的值,浏览器不进行实际布局就能计算出的值)

6、formatting:将计算值进一步转换(使用值,实际布局时使用的值)

7、constraining:小数像素转换为整数

8、渲染实际值。

选择器--选择标签

基础选择器

直接用标签名作为选择器:标签选择器--按找标签名选择(使用较多)

可以快速将所有同类标签选中

.类名:类选择器--选择有相同class的标签(使用非常多)

多类名:一个标签指定多个类名class,之间用空格隔开(class=“name1 name2”),使其同时调用多个样式

#id:id选择器--选择有相同id的标签(常与js搭配使用)

注意id具有唯一性!!!

*:通配符选择器--选择所有标签(特殊情况使用)

复合选择器

父级 子级:后代选择器(包含选择器)

如ol li{}只会选择ol中的所有li标签(注意父级与子级之间有空格,而且可以套娃,这里可以用任意基础选择器组合

父级>子级:子选择器

只会选择相邻的下一级的标签

选择器1,选择器2······:并集选择器

选择多组标签,同时为他们定义相同样式

用冒号表示:伪类选择器

链接伪类

a:link--选择所有为=未被访问的链接

a:visited--选择所有已被访问的链接

a:hover--选择鼠标位于其上的链接(常用)

a:active--选择活动链接(鼠标按下未弹起的链接)

注意以上四种顺序不能改变(即l-v-h-a的顺序

:focus伪类选择器

input:focus--选择获取光标的元素(一般用于表单)

css的引入方式

行内样式表(行内式):直接在单个标签内改样式,格式为style="属性名:属性值;"

内部样式表(嵌入式):将css代码放在style标签内

外部样式表(链接式):样式单独写在css文件中,通过link标签引入html文件

元素的显示模式

块元素:独占一行

常见的有h、p、div、ul、ol、li等。

特点:独占一行,宽高以及内外边距可以控制,默认宽度为父级元素的宽度,里面可以放行内或块元素。

注意文字类元素内不能使用块级元素,如p和h标签内不能放div。

行内元素(内联元素):一行多个

典型的如span、a。

特点:一行可以有多个,直接设置宽高是无效的,默认宽度为本身内容的宽度,里面只能放文本或其他行内元素。

注意:链接a内不能再放链接,但可以放块级元素

行内块元素:具有行内和块的特点

如img、input、td。

特点:和相邻行内块元素在同一行,但之间会有空隙,默认宽度为本身内容的宽度,同时可以设置宽高以及内外边距。

显示模式的转换

display:block--将元素转换为块级元素

display:inline--将元素转换为行内元素

display:inline-block--将元素转换为行内块元素

CSS三大特性

层叠性:后设置的会覆盖先设置的样式(只会覆盖相同的属性)

继承性:子标签会继承父级标签的某些属性(比如文本的颜色和大小)

注意行高的继承性:

body{

font: 12px/1.5 Microsoft YaHei;

}

**表示行高为字体大小的1.5倍,即121.5。这种方法可以自动调节行高

显示继承:inherit

优先级:

!important(权重无穷大)>行内样式(权重1,0,0,0)>id选择器(权重0,1,0,0)>[伪]类选择器(权重0,0,1,0)>元素选择器(权重0,0,0,1)>继承或*(权重0,0,0,0)

对于复合选择器会有权重叠加问题,叠加时不会进位,从左至右依次比较即可。

盒子模型

border边框

border-width:边框粗细,单位为px

borer-style:边框样式(solid为实线,dashed为虚线,dotted为点线)

border-color:边框颜色

边框简写:border:1px solid red;(没有顺序)

也可以分开写各边

如:border-top:上边框

border-collapse:collapse合并相邻边框

注意盒子实际大小=指定的width+边框粗细

content内容

padding内边距

padding-left:设置左边距

······

padding:apx-->表示四个方向都是a

padding:apx bpx-->表示上下为a,左右为b

padding:apx bpx cpx-->上为a,左右为b,下为c

padding:apx bpx cpx dpx-->上a,右b,下c,左d

注意内边距也会撑大盒子,因此设计宽高时应该考虑padding

不指定宽度就不会撑开

margin外边距

通过外边距让块级盒子水平居中:左右外边距设置为auto

==>让行内或行内块元素水平居中可以通过对父级元素设置text-align:center

解决合并外边距时的塌陷问题

1、为父元素定义上边框

2、为父元素指定内边距

3、为父元素添加overflow:hidden

清除内外边距

** {

padding:0

margin:0

}

网页布局

标准流(普通流/文档流):按照规定的默认方式排列

flex布局(弹性布局)

操作方便,应用广泛。

原理:给父盒子设置flex属性,来控制子盒子的位置和排列方式。

特性:

任何一个容器都可以指定为flex布局。当父盒子设为flex布局后,子元素的float、clear、vertical-align属性将失效。

常见父项属性:

flex-direction:设置主轴方向

子元素按照主轴排列。

默认主轴方向为x轴,水平向右;

默认侧轴方向为y轴,垂直向下;

属性值:

row:默认值,从左到右;

row-reverse:从右到左;

column:从上到下;

column-reverse:从下到上。

justify-content:设置主轴上的子元素排列方式

注意:使用这个属性之前一定要确定好主轴

属性值:

flex-start:默认值,从头部开始;

flex-end:从尾部开始;

center:在主轴居中对齐;

space-around:平分剩余空间;

space-between:先两边贴边,再平分剩余空间。

space-evenly:flex 元素之间和 flex 元素和容器的空间总是相等的。

flex-wrap:设置子元素是否换行

nowrap:默认不换行,放不下盒子会自动缩小

wrap:换行

align-items:设置侧轴上的子元素排列方式(单行)

默认侧轴为垂直向下时:

flex-start:从上到下;

flex-end:从下到上;

center:挤在一起居中;

stretch:拉伸(默认值),但子盒子给了高度不会生效。

align-content:设置侧轴上的子元素排列方式(多行)

注意单行时没有效果

属性值:

flex-start:默认值,从头部开始;

flex-end:从尾部开始;

center:在侧轴居中显示;

space-around:平分剩余空间;

space-between:先两边贴边,再平分剩余空间。

stretch:设置子项元素高度平分父元素高度。

flex-flow:复合属性,相当于同时设置了flex-direction和flex-wrap
flex-flow:row wrap;

常见子项属性:

flex-grown

flex-grown属性定义子项目分配剩余空间,用flex表示占多少份数。也可以写为百分比(相对于父级盒子)

.item {
    flex-grown:<number>;/*default 0*/
}

注意flex属性也是按剩余空间的份数进行分配,但与flex-grown计算方式不同。这篇文章给出了例子以及计算步骤的不同:

flex弹性盒子flex-grow 和flex的区别_flex和flex-grow_lorem233的博客-CSDN博客

align-self

控制子项自己在侧轴上的排列方式。默认为auto,表示继承父元素的align-items属性,若没有父元素,则等同于stretch。

order

定义项目的排列顺序。数值越小,排列越靠前,默认为0。

grid布局

容器属性

给容器指定为grid布局,将其指定为网格容器。

grid-template-columns属性设置列宽,grid-template-rows属性设置行高

fr:表示网格容器中可用空间的一份。

justify-content属性是整个内容区域在容器里面的水平位置(左中右),align-content属性是整个内容区域的垂直位置(上中下)。

justify-items属性设置单元格内容的水平位置(左中右),align-items属性设置单元格的垂直位置(上中下)。

项目属性

grid-column-start 属性:左边框所在的垂直网格线

grid-column-end 属性:右边框所在的垂直网格线

grid-row-start 属性:上边框所在的水平网格线

grid-row-end 属性:下边框所在的水平网格线

justify-self 属性设置单元格内容的水平位置(左中右),跟 justify-items属性的用法完全一致,但只作用于单个项目

align-self 属性设置单元格内容的垂直位置(上中下),跟align-items属性的用法完全一致,也是只作用于单个项目

浮动

一般用于多个盒子横向排列得情况

float属性用于创建浮动框,将其移动到一边,直到遇到包含块边缘或其他浮动框边缘

语法:选择器 {float:属性值}(none表示不浮动,left表示元素向左浮动,right表示元素向右浮动)

特性:

1、设置浮动后脱离标准流的控制移动到指定位置,浮动的盒子不再保留原先的位置

可以理解为飘浮在标准流的上面(但不会对前面的标准流产生影响),因此可能会两个盒子出现重合。为了避免这个问题,可以将包含块内的元素都浮动

2、浮动的元素会顶端对齐的方式一行显示,并且会自动换行

3、浮动元素具有行内块元素的特性(比如可以设置宽高)

浮动元素通常和标准流父级搭配使用(父级排列上下位置,内部子元素通过浮动设置左右位置)

清除浮动:解决子盒子浮动不占位置导致父盒子高度为0的问题

清除浮动后,父级会根据浮动的子盒子自动检测高度

语法:选择器{clear:属性值}(left表示不允许左侧有浮动元素,right不允许右侧浮动,both表示同时清除两侧浮动的影响)

清除浮动的方法:

1、额外标签法,例如给浮动元素的末尾添加一个块级元素或者其他标签。

2、给父级元素添加overflow属性(设置为hidden、auto、scroll)。

3、给父元素添加伪元素

4、给父元素添加双伪元素

定位

定位=定位模式+边偏移

position:定位模式

static:静态定位,按照标准流特性布局。

relative:相对定位,相对于原来的位置定位,移动后原位置仍然保留。

absolute:绝对定位,相对于最近的有定位的一级祖先元素来定位(没有祖先或者祖先没有定位则相对于浏览器定位),原位置不再保留。

❗❗❗子绝父相:子元素用绝对定位,父元素用相对定位。常用于轮播图。

fixed:固定定位,以浏览器可视窗口为参照,不占有原来的位置。

sticky:粘性定位,可以看作相对定位与固定定位的结合,以可视窗口为参照但占有原先位置,注意必须至少指定一个边偏移距离

元素的显示与隐藏

display:none:隐藏对象,隐藏后不占有原来的位置

display:block:显示对象(也是转换为块级元素)

visibility:hidden:元素隐藏,隐藏后保留原来的位置

visibility:visible:元素可视

overflow:visible:显示溢出内容

overflow:hidden:隐藏溢出内容

overflow:scroll:显示滚动条

overflow:auto:只有溢出内容时显示滚动条