CSS学习

CSS学习

伪类选择器

以:开头的选择器称为伪类选择器

链接伪类选择器

用于处理a标签链接的选择器

  • a:link 指未被访问时的a标签

  • a:visited 指被访问过的a标签

  • a:hover 指鼠标经过时的a标签

  • a:active 指鼠标点击时的a标签

            a:link {
                color: #000;
                text-decoration: none;
            }
    
            a:visited {
                color: orange;
            }
    
            a:hover {
                color: skyblue;
                
                text-decoration: underline;
            }
    
            a:active {
                color: green;
            }
    

注意:整体顺序需要按照LVHA的顺序书写,a标签具有默认的样式,在给a标签设置样式时,需要单独设置

focus伪类选择器

用于选取获得焦点的表单元素input,即input:focus,例如:

/*鼠标聚焦时背景变为红色*/
input:focus {
	background-color: red;
}

元素显示模式

元素显示模式意思就是元素(标签)以什么方式显示主要分为块元素行内元素两种

块元素

常见的有<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>等,块元素有以下特点

  • 自己独占一行
  • 高度、宽度、内外边距都能控制
  • 宽度默认是容器(父级宽度)的100%
  • 是一个容器及合资,里面可以放行内或者块元素

注意:文字类元素不能使用块元素,

标签主要存放文字,p里面不能放块元素,特别不能放div,同理<h1>~<h6>也是。

行内元素

常见的有<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<span>等,行内元素具有以下特点:

  • 相邻行内元素在一行上,一行可以显示多个
  • 高宽设置都是无效的
  • 默认宽度是本身内容的宽度
  • 行内元素只能容纳文本或者其他行内元素

注意:链接里不能再放链接,特殊情况<a>里可以放块元素,到那时最好给a转换一下块级模式

行内块元素

行内元素有几个特殊的标签:<img>、<input>、<td>,他们同时具有块元素和行内元素的特点:

  • 和相邻的行内元素(行内块)在一行上,但是他们之间会有空白缝隙,一行可以显示多个
  • 默认宽度就是本身内容的宽度
  • 高度、行高、内外边距都可以控制

元素显示默认的转换

特殊情况下,需要进行元素模式转换,即需要将行内元素转化成块元素,就可以设置宽高了,常见的就是a标签,有时我们需要增加a标签的触发范围,就需要为a链接设置宽高,转换为块级元素语法为:

a {
    /*行内元素转换为块级元素*/
    display: block;
    width: 100px;
    height: 100px;
}

块级元素也可以指定为行内元素:

div {
    display: inline;
}

转换为行内块元素

span {
	display: inline-block;

}

背景

背景颜色

body {
	background-color: red;
}

背景图片

body {
	background-image: url(http://aaa/bbb/ccc);
}

背景平铺

body {
    background-image: url(http://aaa/bbb/ccc);
    /*不重复*/
    background-repeat: no-reapeat;
}

背景位置

  • 方位名词

    采用top、left、center、right、bottom

    body {
    	background-image: url(http://aaa/bbb/ccc);
        /*不重复*/
        background-repeat: no-reapeat;
        /*左上位置*/
        background-position: left top;
    }
    
  • 精确单位

    采用具体的像素,第一个值表示x轴,第二个值表示y轴

    body {
    	background-image: url(http://aaa/bbb/ccc);
        /*不重复*/
        background-repeat: no-reapeat;
        /*左上位置*/
        background-position: 20px 50px;
    }
    
  • 混合单位

    将方位名词和像素值混合使用

    body {
    	background-image: url(http://aaa/bbb/ccc);
        /*不重复*/
        background-repeat: no-reapeat;
        /*距离上侧50px,左右居中显示*/
        background-position: center 50px;
    }
    

背景固定

将背景固定在屏幕一个地方,不随屏幕滚动而滚动

body {
	background-image: url(http://aaa/bbb/ccc);
    /*不重复*/
    background-repeat: no-reapeat;
    /*距离上侧50px,左右居中显示*/
    background-position: center 50px;
    /*固定显示,如不声明则默认滚动*/
    background-attachment: fixed
}

图片复合写法

background: 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置

body {
background: black url(http://aaa/bbb/ccc) no-repeat fixed center top;
}

背景色半透明

body {
    /*最后一个值是透明度*/
    background: rgba(0, 0, 0, 0.3);
}

CSS选择器的优先级

选择器 权重
继承或者* 0,0,0,0
标签选择器 0,0,0,1
类/伪类选择器 0,0,1,0
ID选择器 0,1,0,0
行内式 style = "" 1,0,0,0
!important 无穷大

CSS选择器优先级叠加问题

当我们使用复合选择器时,CSS的优先级会进行叠加,比如:

/*最终优先级为0,0,0,3*/
div ul li {

}
/*最终优先级为0,0,1,2*/
.nav ul li {
    
}
/*最终优先级为0,0,1,1*/
a:hover {
    
}
/*最终优先级为0,0,1,1*/
.nav a {
    
}
/*最终优先级为 0,1,0,1*/
#people a{
    
}

注意:权重的叠加不会进位,即低优先级的选择器再怎么叠加也永远不会大于高优先级的,继承的权重是0

CSS盒子模型

盒子内容包括:边框、外边距、内边距、实际内容

image-20210616231529289

边框border

div {
    /*宽度 样式 颜色 三个参数没有顺序*/
    /*样式:solid:实线边框 dashed:虚线边框 dotted: 点线边框 第三个参数是 */
	border: 1px solid red;
    /*上边框*/
    border-top: 1px;
    /*下边框*/
    border-bottom: 1px;
    /*左边框*/
    border-left: 1px;
    /*右边框*/
    border-right: 1px;
    /*合并相邻的边框*/
    border-collapse: collapse;
}

注意:给盒子加border会增大盒子的大小

外边距margin

div {
    /*四边外边距都是1px*/
    margin: 1px;
    /*上下1px 左右2px*/
    margin: 1px 2px;
     /*上1px 左右2px 下3px*/
    margin: 1px 2px 3px;
    /*上 右 下 左 顺序*/
    margin: 1px 2px 3px 4px;
}

外边距让盒子水平居中显示

margin可以让盒子水平居中显示,但是必须为盒子设置宽度

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .header {
            width: 500px;
            height: 100px;
            background-color: #ff8500;
            /*水平居中对齐,左右设置为auto*/
            margin: 0 auto;
        }
    </style>
</head>
<body>
<div class="header"></div>
</body>
</html>

外边距合并问题

  1. 当上下两个兄弟块元素相遇时,如果上面的有margin-bottom 下面的有margin-top则会出现外边距合并的问题,取较大者。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .damao, .ermao {
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .damao {
            margin-bottom: 100px;
        }

        .ermao {
            /*取200px*/
            margin-top: 200px;
        }
    </style>
</head>
<body>
<div class="damao">大毛</div>
<div class="ermao">二毛</div>
<div></div>
</body>
</html>

​ 解决思路:所以尽量只给一个盒子添加margin值。

  1. 嵌套块元素外边距塌陷,父子块元素,都指定margin-top时,父元素会塌陷,塌陷的结果以最大的margin值为准

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .p {
                margin-top: 100px;
                width: 400px;
                height: 400px;
                background-color: purple;
            }
    
            .c {
                /*塌陷了*/
                margin-top: 200px;
                width: 200px;
                height: 200px;
                background-color: pink;
            }
        </style>
    </head>
    <body>
    
    <div class="p">
        <div class="c"></div>
    </div>
    </body>
    </html>
    

    解决思路:

    1. 为父元素定义上边框
    2. 为父元素定义上内边距
    3. 为父元素添加overflow:hidden(常用)

内边距padding

padding是盒子边框与内容之间的间距

div {
    /*四边内边距都是1px*/
    padding: 1px;
     /*上下1px 左右2px*/
    padding: 1px 2px;
    /*上1px 左右2px 下3px*/
    padding: 1px 2px 3px;
    /*上 右 下 左 顺序*/
    padding: 1px 2px 3px 4px;
}

注意:padding会影响盒子的大小,会撑大盒子,在做导航栏是经常利用padding撑开盒子的操作来解决导航栏文字长度不固定的问题,如果不给盒子指定宽度则不会撑大盒子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

        * {
            margin: 0;
            padding: 0;
        }

        div {
            height: 200px;
            width: 400px;
            background-color: #ff8500;
        }

        p {
            height: 100px;
            background-color: #4c4c4c;
		   /*p没有指定宽度则和父亲一样宽,这种情况给p设置padding也不会撑大盒子*/
            padding: 0 20px;
        }
    </style>
</head>
<body>


<div>
    <p>这种情况不会撑大盒子</p>
</div>
</body>
</html>

浮动

清除浮动的四种方法

  1. 额外标签法也称为隔墙法,是 W3C 推荐的做法。

    额外标签法会在浮动元素末尾添加一个空的标签。例如

    ,或者其他标签 (如
    等。

  2. 父级添加 overflow 属性

    .parent {
    	overflow: hidden;
    }
    
  3. 父级添加after伪元素

    .clearfix:after { 
     content: ""; 
     display: block; 
     height: 0; 
     clear: both; 
     visibility: hidden; 
    } 
    .clearfix { /* IE6、7 专有 */ 
     *zoom: 1;
    } 
    
  4. 父级添加双伪元素

    .clearfix:before,.clearfix:after {
     content:"";
     display:table; 
    }
    .clearfix:after {
     clear:both;
    }
    .clearfix {
     *zoom:1;
    } 
    

定位

posted @ 2021-07-18 14:33  ThomasYue  阅读(65)  评论(0编辑  收藏  举报