CSS-2

结构伪类选择器

作用:根据元素的结构关系查找元素

本例中以 p 标签

查找第一个 p 标签元素

p:first-child{
	background-color:red;
}

查找最后一个 p 标签元素

p:last-child{
	background-color:green;
}

查找第 666 个 p 标签元素

p:nth-child(666){
	background-color:blue;
}

查找 “偶数” 个 p 标签元素

/* n从0开始 */
p:nth-child(2n){
	background-color:blue;
}

查找 “奇数” 个 p 标签元素

/* n从0开始 */
p:nth-child(2n+1){
	background-color:blue;
}

查找 " ? 倍数" 的所有 p 标签元素

/* 找到5的倍数的 p 标签,n从0开始 */
p:nth-child(5n){
	background-color:blue;
}

查找 "第 ? 个以后"的 p 标签元素

/* 找到第5个元素之后的 p 标签 */
p:nth-child(5+n){
	background-color:blue;
}

查找 "第 ? 个之前"的 p 标签元素

/* 找到第5个元素之前的 p 标签 */
p:nth-child(5-n){
	background-color:blue;
}

伪元素选择器

  • 注意:必须设置 “content” 属性,用来设置伪元素的内容,如果没有内容,则引号留空即可
  • 伪元素默认是 “行内” 显示模式
  • 权重和标签选择器相同
    div {
        width: 300px;
        height: 300px;
        background-color: pink;
    }

    div::before{
        content:"老鼠";
        w100
    }

    div::after{
        content:"大米";
    }

    
最终显示结果为:"粉红色"的框里面,写着"老师爱大米"

盒子模型

重要组成部分

  • 内容区域:width & height
  • 内边距:padding(出现在内容与盒子边缘之间)
  • 边框线:border
  • 外边距:margin(出现在盒子外面)
div{
    width: 200px;
    height: 200px;
    background-color: pink;

    /* 内容与盒子边缘之间 */
    padding: 20px;
    
    /* 盒子边框 */
    border: 1px solid #000;

    /* 出现在盒子外面,拉开两个盒子之间的间距 */
    margin: 50px;
}

边框线

实线
border: 1px solid #000;
虚线
border: 2px dashed #000;
点线
border: 3px dotted #000;
单方向框线
border-top: 	1px solid #000;  	/* 上边框线 */
border-right: 	1px solid #000;  	/* 上边框线 */
border-bottom: 	1px solid #000;  	/* 上边框线 */
border-left: 	1px solid #000;  	/* 上边框线 */

内边距

单方向
padding-top:	20px;
padding-right:	20px;
padding-bottom:	20px;
padding-left:	20px;
多值写法
padding: 10px 20px 30px 40px;	/* 上  右  下  左*/
padding: 10px 40px 80px;		/* 上   左右  下 */
padding: 10px 80px;				/*  上下  左右  */

记忆方法:从"上"开始顺时针转一圈,如果当前方向没有数值,取值跟对面一样(对面的意思是:下对上,左对右)

尺寸计算

  • 默认情况下:盒子尺寸 = 内容尺寸 + 内边距尺寸 + border尺寸
  • 因此,在这种情况下,加 padding 和 border 会撑大盒子
div{
    width: 200px;
    height: 200px;
    background-color: pink;
    
    padding: 30px;
    border: 3px solid #000;
    
    /* 内减模式:不需要手动做减法,加 padding 和 border 也不会撑大盒子了 */
    box-sizing: border-box;
}

外边距

一、外边距的"单方向"控制,以及多值写法,都是和 padding 一样的
二、外边距不会撑大盒子

举例:
a.外边距单方向控制:
    margin-top: 20px;
    margin-right: 20px;
    margin-bottom: 20px;
    margin-left: 20px;
    
b.多值写法:
    margin: 10px 20px 30px 40px;	/* 上  右  下  左*/
    margin: 10px 40px 80px;			/* 上   左右  下 */
    margin: 10px 80px;				/*  上下  左右  */
记忆方法:从"上"开始顺时针转一圈,如果当前方向没有数值,取值跟对面一样(对面的意思是:下对上,左对右)

版心居中

/* 外边距的应用举例:版心居中 */

div{
    width: 75%;
    height: 200px;
    background-color: pink;
    /* ------------------------ */
    box-sizing: border-box;
    /* ------------------------ */
    padding: 20px;
    border: 1px solid #000;

    /* 网页"版心居中"效果:margin: 0 auto;  */
    /* "版心居中"效果的前提:有 width 属性 */
    margin: 0 auto;
}

圆角效果

圆角知识点
div {
    width: 200px;
    height: 200px;
    background-color: pink;
    
    /* -------圆角效果------- */
    border-radius: 20px;	/* 20px指的是圆的半径 */
}
border-radius: 20px;				/* 四个角都是一样 */
border-radius: 20px 30px;			/* 左上+右下       右上+左下 */
border-radius: 10px 20px 30px;		/* 左上   右上+左下   右下 */
border-radius: 10px 20px 30px 40px;  /* 左上   右上   右下   左下 */

记忆方法:从左上角顺时针开始赋值,没有取值的角与对角取值相同
正圆形状
应用场景:头像
实现原理:给正方形盒子设置圆角属性值为"50%"

    img {
        width: 200px;
        height: 200px;
        /*  */
        border-radius: 50%;
    }
胶囊形状
应用场景:按钮
实现原理:给长方形盒子设置圆角属性值为"盒子高度的一半"

    div {
        width: 200px;
        height: 80px;
        background-color: orange;
        /* ------------ */
        border-radius: 40px;
    }
阴影效果
属性名:box-shadow
属性值:X轴偏移量 Y轴偏移量 模糊半径 扩散半径 颜色 内外阴影
注意事项:
	1. X轴偏移量 Y轴偏移量 必须书写
	2. 默认是外阴影,内阴影需要添加 inset (不常用)

    div {
        width: 200px;
        height: 80px;
        background-color: orange;
        margin: 0 auto;
        /* ------------ */
        
        box-shadow: 2px 5px 10px 1px rgba(0, 0, 0, 0.5);  默认是外阴影!
        
        /* box-shadow: 2px 5px 10px 1px rgba(0, 0, 0, 0.5) inset; */  内阴影不常用!
    }

元素溢出

作用:控制溢出元素的内容的显示方式

div {
    width: 200px;
    height: 200px;
    background-color: pink;

    overflow: hidden;   /* 溢出的内容,隐藏起来 */
    overflow: scroll;   /* 溢出的内容,通过滚动条显示,如果不溢出,也显示滚动条 */
    overflow: auto;   /* 溢出的内容,通过滚动条显示,如果不溢出,就不显示滚动条 */
}

外边距的问题

吞并现象

场景:垂直排列的兄弟元素,上下 margin 会相加吗?
现象:上下两个 margin 不会相加,两个 margin 中的较大值生效
结论:因此,在写 margin 时候,如果遇到了"垂直排列的兄弟元素",设置其中一个 margin 即可

塌陷问题

场景:父子级的标签,子级添加"上外边距(margin-top)"会产生塌陷问题
现象:导致父级一起向下移动

解决方法:
	1. 直接取消子级的 margon-top,使用父级的 padding					(推荐)
	2. 不取消子级的 margon-top,但是父级必须设置 overflow: hidden;	    (推荐)
	3. 不取消子级的 margon-top,但是父级必须设置 border-top;

行内元素的问题

场景:行内元素添加 margin 和 padding,无法改变元素垂直位置
解决办法:给行内元素添加 line-height 可以改变垂直位置
span {
	margin: 50px;
	padding: 20px;
	
	/* 添加下面一行代码,直接解决问题 */
	line-height: 100px;
}

清除默认样式

/* 常用的"清除默认样式"的方法 */
* {
	margin: 0;
	padding: 0;
	box-sizing: border-box;  /* 此句子的作用是,防止盒子被撑大,可根据实际情况,选择加与不加*/
}

/* 去除列表的项目符号 */
li {
	list-style: none;
}

/* 清除 a 标签的下划线 */
a {
    text-decoration: none;
}

浮动

作用:让"块元素"水平排列
特点:顶端对齐,具备"行内块"显示模式的特点

属性名:float
属性值:
	1. left		左对齐
	2. right	右对齐

代码演示:
.one {
    width: 100px;
    height: 100px;
    background-color: brown;

    float: left;

}

.two {
    width: 200px;
    height: 200px;
    background-color: orange;

    float: left;
}

清除浮动带来的影响

浮动带来的影响:
	父级里面的子级元素设置为浮动,如果此时父级元素没有高度,子级无法撑开父级元素的高度,可能会导致页面布局错乱!

方法一:额外标签法(了解)

  • 在父级元素内容的最后添加一个块级元素,设置CSS属性"clear: both"
.clearfix {
    clear: both;
 }
 
"clearfix">

方法二:单伪元素法(方法二与方法一的原理是相同的)

  • 在父级标签中,添加 class=“clearfix” 即可
.clearfix::after {
	content: "";
	display: block;
	clear: both;
}

方法三:双伪元素法【推荐】

  • 在父级标签中,添加 class=“clearfix” 即可
.clearfix::before,
.clearfix::after {
	content: "";
	display: table;
}

.clearfix::after {
	clear: both;
}

补充说明:

  1. before 是用来解决"外边距塌陷问题"
  2. after 是用来清除浮动带来的影响

方法四:overflow

  • 父级元素添加 CSS 属性 “overflow: hidden”

Flex 布局

认识 Flex 布局

Flex 布局也叫弹性布局,是浏览器提倡的布局模型,非常适合结构化布局,提供了强大的空间分布和对齐能力。 Flex 模型不会产生浮动布局中脱标的现,布局网页更简单、更灵活。

设置方式:给父级元素设置 display: flex,子元素可以自动挤压或拉伸
组成部分

  • 弹性容器(设置 display: flex 的父级元素)
  • 弹性盒子(弹性容器里面的子级盒子)
  • 主轴:默认在水平方向
  • 侧轴/交叉轴:默认在垂直方向

主轴对齐方式

属性名:justify-content

属性值 效果
flex-start 默认值,弹性盒子从起点开始依次排列
flex-end 弹性盒子从终点开始依次排列
center 弹性盒子沿主轴居中排列
space-between 弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子之间
space-around 弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子两侧
space-evenly 弹性盒子沿主轴均匀排列,弹性盒子与容器之间间距相等

侧轴对齐方式

属性名:

  • align-items:当前弹性容器内所有弹性盒子的侧轴对齐方式(给弹性容器设置)

  • aligh-self:单独控制某个弹性盒子的侧轴对齐方式(给弹性容器设置)

属性值 效果
stretch 弹性盒子沿着侧轴线被拉伸至铺满容器(弹性盒子没有设置侧轴方向尺寸则默认拉伸)
center 弹性盒子沿侧轴居中排列
flex-start 弹性盒子从起点开始依次排列
flex-end 弹性盒子从终点开始依次排列
.box {
	display: flex;
	align-items: center;  /* 所有的盒子沿着侧轴居中 */
}

.box div:nth-child(2) {
	align-self: center;  /* 某个盒子沿着侧轴居中 */
}

修改主轴方向

  • 将主轴的方向,由原来的水平修改为垂直;侧轴自动变换到水平方向
.box {
    display: flex;
    /* ------------ */
    flex-direction: column;  /* 修改主轴方向 */
}

img {
    width: 150px;
    height: 32px;
}

"box"> "./images/img0" alt=""> 媒体

弹性伸缩比

作用:控制弹性盒子的主轴方向的尺寸

属性名:flex
属性值:整数数字,表示占用父级剩余尺寸的份数

flex: 1;  /* 表示占用父级剩余空间的一份 */

弹性盒子换行

弹性盒子可以自动挤压或压缩,默认情况下,所有弹性盒子都在一行显示

属性名:flex-wrap
属性值:
	wrap:		换行
	nowrap:		不换行(默认)

行对齐方式

属性名:align-content

属性值 效果
flex-start 默认值,弹性盒子从起点开始依次排列
flex-end 弹性盒子从终点开始依次排列
center 弹性盒子沿主轴居中排列
space-between 弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子之间
space-around 弹性盒子沿主轴均匀排列,空白间距均分在弹性盒子两侧
space-evenly 弹性盒子沿主轴均匀排列,弹性盒子与容器之间间距相等

你可能感兴趣的:(前端-CSS,css,前端)