CSS样式 选择器

163 阅读8分钟

CSS样式 选择器

一、CSS概述

1.概念

CSS层叠样式表 cascading Style Sheets,它是一种样式表语言,用来渲染html或者xml文档的样式文件

2.规则和语法

(1)语法

image.png

(2)规则

选择器是负责找到元素,可以使用多种选择器来完成,但没选择该元素,css不会报错,只会不渲染样式

样式声明可以是多个,没有声明个数限制,每一个声明后都加一个分号

css的空格,css书写中有些空格是没用的,为了好看方便编写,有些空格是一定要写的,都在属性值上出现的空格是必要的,选择器中的后代空格必须要

css顺序读取,从下向上依次渲染,遇到重复的样式,会覆盖

3.css样式的使用方法

(1)内联样式

把css样式写在标签中的style属性中,多样式用分号隔开

<div style="color:red;background-colcor:blue;">文字</div>\
优点:

针对性较强,优先级高,当前标签更直接

缺点:

影响阅读,显得代码较乱

不利于修改,复用性差

使用js修改的元素css样式都是内联样式

(2)内部样式

内部样式写在head标签中的style标签里

<head>
    <meta charset="UTF-8" />
    <title>管理员登录</title>
    <style>内部样式写在这里!!
    选择器{样式声明;}
   </style>
 </head>
优点:

没有多余css文件向服务器发送请求

只会影响当前html文件的大小

缺点:

只能渲染当前页面元素,复用性也不强(其他html文件无法使用)

一般用于学习和测试,为了减少请求,样式较为单一的使用在某个页面时可以使用内部

优先级低于内联样式

(3)外部样式

单独创建一个css文件后缀名为xxx.css,在head标签中使用link标签引用到当前页面

<head>
    <meta charset="UTF-8" />
    <title>管理员登录</title>
    <link rel="stylesheet" href="css文件路径">
 </head>
  • rel属性:引入文件和当前html文件的关系,css样式就是stylesheet
  • href属性:可以是绝对路径也可以是路径,css文件具体在哪
  • link标签可以写多个
优缺点:

复用性高 便于维护 向服务器增加了请求次数\

优先级低于内联样式

二、选择器

选择器的作用就是在html中找到元素并且准备渲染他,利用的是元素的名字

1.基础选择器

(1)通用选择器(通配符)

所有元素都会被它选中 *

image.png

优缺点:

所有元素都应用同样的样式,书写效率高了一些,但性能低了,因为所有元素都要渲染一遍

<style>
        * {color: red;}
    </style>

(2)元素选择器(标签选择器)

通过html中的标签名找到元素,并且渲染样式

image.png 优缺点: 好记,好写,直观

所有该标签名的标签全部改变,无法精准定位元素,给与相同标签名不同样式做不到

<style>
        div {color: red;}
        span {color: blue;}
    </style>

 标签选择器的权重值:1

(3)id选择器

通过元素的id属性,当选择器,使用#id名作为选择器,该选择器具有唯一性,可以精准定位到一个元素

image.png 优缺点: 很精准的定位到一个元素

权重值高,话语权高,不容易被其他选择器覆盖

复用性差

一般情况下,不适用id选择器渲染元素样式

<style>
    #l25 {color: green;}
    </style>

id选择器的权重值:1

(4)class类选择器

具备相同的class属性值的元素,可以通过类属性给与相同样式,这样复用性较强

image.png 哪个元素需要该属性就可以使用相同的类属性值,方便

如果与其他类有不同样式时可以再加一个类进行新样式的渲染

同一个元素可以增加多个类属性值,分别分类渲染

可以提前写一个类名,需要的元素拿来可以使用

注意:点不要忘记写,点和类名之间不能有空格

类选择器权重值10

(5)群组选择器

多个"选择器",使用共同样式,可以将选择器用逗号相连,使用相同样式

从优化的角度,群组比较好

image.png

2.关系型选择器

(1)后代选择器

在一个祖先中,选中其内部的后代元素。可以由多种选择器一起搭配使用


 <style>
        .item {
            width: 238px;
        }

        /* 后代选择器 */
        .item img {
            width: 238px;
            /* 可以写100% */
        }

        .item p {
            font-size: 14px;
            color: gray;
        }

        /* 发现
        1.块级元素div没写高,但有高,内部元素协助撑起了父元素
        2.img标签加载时是自己本身大小
        3.块级元素宽度是父元素的100%
         */
    </style>

<!-- 后代 -->
    <div class="item">
        <div>
            <img src="./img/123.webp" alt="">

        </div>
        <div>
            <h5>万疆 舞蹈北大校园版</h5>
            <p>
                <span>鹅蛋蛋后妈</span>
                <span>7-5</span>
            </p>
        </div>
    </div>

2021-12-08_112955.png

(2)子代选择器

子代选择器和后代选择器基本相同,但是子代更加精准,效率更高

子代选择器,父级>子级{} 对于选择器是什么没有要求,能选到即可

<style>
/* 子代选择器 */
         .item>.bg {
           background-color: greenyellow;
         }

         .item>div>div {
            color: red;
         }
</style>

image.png

(3)兄弟选择器

兄弟元素只包含后面兄弟,不含前面的兄弟 性能比较低,因为越后面的元素渲染次数越多

同级选择器~同级兄弟的选择器
/* 兄弟 */
         ol>li~li{
            color: aqua;
         }

(4)相邻兄弟选择器

相邻兄弟选择器与兄弟选择器用法相同,都是后面的兄弟可以被选中。

相邻兄弟必须是紧紧挨着该元素的兄弟,中间不能有其它元素相隔

兄元素+相邻弟元素{}
/* 相邻兄弟 */
         ol>li+li{
            color: aqua;
         }

3.伪类选择器

css的伪类是添加到选择器中的关键字,指的是被选中元素的特殊状态

:active激活的

指的是鼠标“点按住”当前元素范围,元素可以触发状态,改变的样式

.d1:active {color: red;}

:hover悬停的

指的是鼠标“移入到”当前元素范围,元素可以触发状态,改变的样式

hover的优先级高于active

.d2:hover{background-color: blue;}

a标签有"自带"的伪类

a:link 超链接未激活前的

a:visited 超链接激活以后

这就是为什么a标签不能看到继承颜色的样式,因为伪类是a自身的优先级比继承要高

伪类是有顺序的(特指a标签的伪类顺序)

:link>:visited>:hover>:active

4.伪元素选择器

image.png

::before在元素前面

::after在元素后面

都不是实际的元素

content: ""; 属性必须写,但值没有需要可以不写

<style>
        .d1::before{
            content: "¥";
            color: red;
        }
        .d1 {
            color: blue;
        }
    </style>
</head>

<body>
<div class="d1">8000.99</div>
</body>

image.png

例子

<style>
        .d2::before {
            content: "欢迎你,";
        }

        .d2::after {
            content: "光临!";
        }
    </style>
</head>

<body>

<div class="d2">甜甜野</div>

</body>

image.png

5.CSS优先级

读取顺序
相同选择器,渲染相同属性,但值不同,会按照读取顺序,后声明的样式优先,但不同属性不会受到影响
<style>
        .d1 {
            color: red;
            background-color: yellow;
        }
        .d1 {
            color: blue;
        }
    </style>
</head>

<body>
<div class="d1">甜甜野</div>
</body>

image.png

指定大于继承
在css样式中有一些属性是具有继承性的。如:字体颜色、字体大小、字体样式等
如果指定了元素样式,那么继承的元素样式会覆盖
<style>
        .d2 {
            color: red;
        }

        .d2 span {
            color: green;
        }
    </style>
</head>

<body>
<div class="d2">
    <p>bking</p>
    <span>多多</span>
    <a href="#">到贤</a>
</div>
</body>

image.png

权重值
id权重100>class权重10>标签权重1
权重值累加之后再比较

image.png

image.png

例子

<style>
        .d2>.viko {
           color: fuchsia;
        }

        .d2 a {
            color: black;
        }
    </style>
</head>

<body>
<div class="d2">
    <a href="#" class="viko">到贤</a>
</div>
</body>

image.png

直接获取最高权限
!important 最高权限
 .d2 a {
            color: black 
            !important;
        }
    </style>
</head>

<body>
    <div class="d1">甜甜野</div>
    <div class="d2">
        <p>bking</p>
        <span>多多</span>
        <a href="#" class="viko">到贤</a>
    </div>
</body>

image.png

内联样式(1000)大于内部和外部样式
有内联样式,就不会出现权重值了

三、尺寸和边框

1.宽度高度

元素的尺寸就是其宽度和高度

width:宽度

height:高度

取值:值数字+单位(px、pt、%、rem、em)

px像素:绝对单位

%:相对于父级元素的尺寸

(1)按元素属性分类

块级元素
宽度高度设置任何的取值均可
不设置宽度也有默认宽度,是父元素宽度的100%
不设置高度,依靠内容(文字、元素)撑开自身高度
<style>
        .d2 {
            background-color: yellow;
        }
    </style>
</head>

<body>
<div class="d2">Lorem ipsum dolor sit.</div>
<div class="d3"></div>

image.png

内联元素
宽度高度设置都不会有效果,靠内容文字撑开
内联中的行内块
内联中的特殊元素行内块,一般都有自己的默认宽高
例如:img默认宽高就是自己图片的本身大小(一般设置图片的宽度即可)
button和input都有自己的默认宽高,一般需要重改
行内块的宽度高度均可以设置

(2)最大和最小宽度

max-width 最大宽度

max-height 最大高度

min-width 最小宽度

min-height 最小高度

优先级都高于普通设置的宽度高度

附加知识点 1.单位

单位:

px 像素

in 英寸 1in=2.54cm

pt 磅值 1pt=1/72in 多用于设置字体大小

cm厘米

mm毫米

项目中,为了页面可以在pc pad phone 都正常显示

我们一般会使用相对单位

em 以父元素的数值当做基本单位

rem 以html的数值当做基本单位

2.色值

色值应用非常广泛,如:背景色,字体色、边框色、阴影色、渐变色...

(1)英文颜色

在编辑器中提供了一些,如:red、blue、green...

*元素的默认颜色transparent 透明色 *

(2)十六进制色值

#rr gg bb

范围:0-9 a-f

取值:rr红色范围,gg绿色范围,bb蓝色范围

如:#15b452  纯红#ff0000

缩写:三位 #f00 前提每两个色值范围必须都一样

大小写均可

3.溢出处理

当内容较大,元素区域较小的时候,就会发生溢出效果 默认是纵向溢出 overflow

取值:visible 默认值 溢出部分可见的

hidden 溢出部分隐藏

scroll 不管是否溢出,x和y轴方向都添加滚动条

auto 溢出加滚动条 不溢出没有

overflow-x 设置水平轴滚动条

overflow-y 设置垂直轴滚动条

如何设置成横向溢出

内部容器,设置宽度,大于外部容器的宽度