HTML总结

HTML,全称叫超文本标记语言  

1.HTML注释和字符实体

<!-- 注释的快捷键:ctrl+斜杠(带?号的) -->

描述       实体名称

空格        &nbsp;
<           &lt;
>           &gt;
&           &amp;

注意:(分号分号不能丢)

2.HTML常用标签

(1)HTML头部:

<head>
    <!-- meta元素可以使用属性charset来设置当前HTML文档使用的字符集 -->
    <meta charset="UTF-8">
    <!-- meta元素也可以使用刷新功能,实现几秒后刷新或者跳转功能 -->
    <!-- <meta http-equiv="refresh" content="5"> -->
    <meta http-equiv="refresh" content="5;url=http://www.runoob.com">

    <title>meta元素的学习</title> <!--该标签定义了不同文档的标题,是必不可少的。-->

    <style>
        /* style元素用来设置HTML的各种样式 */
    </style>

    <!-- 当样式的代码过多时,可以将样式代码放入一个独立的CSS文件中,使用link标签引入即可 -->
    <link rel="stylesheet" href="CSS文件的地址">

    <script src="js文件的地址">
        // script标记用于书写交互代码的,如果交互代码过多,可以放入一个独立的js文件中,
        // 也是使用script标签里的属性src引入过来即可
    </script>

    <!--<base>标签规定文档中所有相对 URL 的基准 URL(即父路径)。一个HTML文档中只能有一个 `<base>` 元素-->
    <base href="">

    <noscript>
        Your browser does not support JavaScript!
    </noscript>
</head>

(2)HTML基础标签

<body>
   <!---->
   <!--标题标签-->
   <h1>这是标题 1</h1>
   <h2>这是标题 2</h2>
   <h3>这是标题 3</h3>
   <h4>这是标题 4</h4>
   <h5>这是标题 5</h5>
   <h6>这是标题 6</h6>
   
   <!--段落标签-->
   <p>这是一个段落。</p>
   <p>这是一个段落。</p>
   <p>这是一个段落。</p>

   <!--换行标签--> 
   <br>
    
   <!--水平线标签-->
   <hr>

   <!--图片标签-->
   语法:<img src="" alt="" width="" height="">
   <!-- 图片标签:   img,   单标记.   不是块级元素,是内联元素(行内元素)。
    作用:在网页上插入一张图片。
    属性:
        src:   用于书写图片的具体位置,即路径(网络上的一张图片,也可以是本地磁盘上的一张图片)
               路径的写法: 有两种,相对路径和绝对路径
               相对路径:  相对的是当前文件所在的文件夹。 当前文件夹,当前文件夹的表示方式 ./
                    注意:./可以省略
                         ../     返回上一层文件夹
               绝对路径:  一般指的就是项目的根或者是磁盘的盘符开始写。
        alt:   给搜索引擎使用的。图片的替代文字
        width:  图片的宽
        height: 图片的高

        注意事项:如果只设置宽或高中的一个属性,图片会照比原图等比例的缩放-->
        <!-- 注意:
          如果使用了live server插件,那么绝对路径的根就不是磁盘盘符,而是当前VSCODE的工作空间
          如果没有使用,就是盘符开始写。 -->

    <!--超链接标签-->
    语法:<a href="">内容或图片</a>
    <!-- 超链接:a标记,双标记,超链接指的就是点击后跳往到另一个页面或者本页面的其他位置 
     属性:
        href:  与图片的src相似, 就是书写目的地的路径
        title:  鼠标悬停在超链接上时显示的内容
        target:  去往目的地时,是使用新标签页,还是本页面
                值1:_blank   新标签页打开
                值2:_self    本标签页打开   默认值-->
     <!-- 另外锚点链接的href的值,必须是#开头,  如果只有#表示跳转到当前页面的最顶端
                                 如果是#配合id值,则是跳转到id值所在位置
                                 因此目标位置,应该设置id值-->
    

     <!--按钮标签-->
     语法示范:<button type="button" onclick="alert('你好!')">点我提示你好(或者是图片)</button>
     <!-- 
    基本按钮标签:  button,   双标记。   内容体里可以放入文字或者图片
             建议: 添加type属性,指定属性值为button。-->



     <!--文本格式化标签-->
     一些常用的文本格式化标签:

     1. <strong>加重语气的的文本
     2. <b>加粗,bold的意思
     3. <em>斜体效果,强调作用
     4. <i>斜体效果itatic
     5. <pre>预格式化文本,即内容保留空格和换行符
     6. <small>更小的文本
     7. <code>用于存放计算机代码
     8. <bdo>改变文字显示的方向

     9. <blockquote> 引用标签
     10. <q> 双引号标签
     11. <del> 删除文本
     12. <ins>插入文本
     13. <sub>下标文本
     14. <sup>上标文本



     <!--无序列表-->
     语法:无序列表使用<ul>标签,列表项使用<li>标签
     <ul>
        <li>刘备</li>
        <li>关羽</li>
        <li>张飞</li>
     </ul>

     <!--有序列表-->
     语法:有序列表始于 <ol> 标签。每个列表项始于 <li> 标签。
     <ol>
        <li>刘备</li>
        <li>关羽</li>
        <li>张飞</li>
     </ol>

     <!--自定义列表-->
     语法:自定义列表以<dl>标签开始。每个自定义列表项以<dt>开始。每个自定义列表项的定义以 <dd> 
     开始。  
     <dl>
       <dt>长春</dt>
       <dd>-- 吉林省的省会城市</dd>
       <dt>哈尔滨</dt>
       <dd>-- 黑龙江省的省会城市</dd>
     </dl>
     <!--注意事项:列表项内部可以使用段落、换行符、图片、链接以及其他列表等等
                  还可进行嵌套-->
     
     
     <!--表格-->
      <table border="1px" cellspacing="0px" cellpadding="5px" width="50%" align="center">
        <!-- 表格:一般用于标记结构化的数据,有行,有列。每一列都有标题。
            过去也用表格做页面的整体布局,但是现在不用了,使用div代替。

            border: 边框的宽度,单位是像素
            
            cellspacing  :单元格之间的距离
            cellpadding:  内容区距离单元格边框的距离
            align:   表格整体的位置  center  left  right
            width:   表格整体的宽度  可以是具体像素,也可以是屏幕的百分比-->
        <caption></caption>
        <!-- <caption>为整个表格定义主题 -->
        <thead><!--表格头部部分(也称表格页眉)。-->
            <tr> <!-- 一般只有一行表头 -->
                <th></th> <!-- 定义每一列的标题,有加粗效果,与普通单元格区分开来,表头独有的。有几列就有几个th标签。 -->
            </tr>
        </thead>
        <tbody><!--表格主体部分 -->
            <tr><!-- 定义行 ,除了表头身体有几行就有几个tr标签-->
                <td></td><!-- 定义单元格数据,有几列就有几个td标签 -->
            </tr>
        </tbody>
        <tfoot><!-- 可用于在表格的底部定义摘要、统计信息等内容 -->
            <tr>
                <td></td>
            </tr>
        </tfoot>
    </table>
    <!--rowspan:  跨行属性,跨几行就写数字几,要根据情况删除多余的单元数据(竖着看)
        colspan:  跨列属性,跨几列就写数字几,要根据情况删除多余的单元数据(横着看)--> 

     <!--表单-->
     <form action="">
        <fieldset> <!-- fieldset:  表单的整个边框
            <legend>《!--边框上使用表单标题 --> </legend> 
            <label for="">(内容)</label> <!-- 用于设置文字标签,扩大点击域。  for属性用于关联某一个input,使用id值关联 -->
            <input type="text" id="" name="" value=""><br><!-- 输入框元素,可以根据type属性的不同值,来定义不同的输入类型,比如
            type属性:
               text:  文本框,   该值为默认值,可以不写。
               password:  密码框, 特点是使用*或者.来替换真实的密码
               radio:  单选框  name的值需要相同,才能算作一组,具有单选效果  checked 默认选中
               checkbox:复选框,name的值必须相同,才能算作一组。  checked 默认选中
               file:   文件上传。
               hidden:   隐藏域。  该类型可以用于隐藏一些不需要展示或者修改的信息
               submit:  提交类型 ,提交整个表单里输入的所有数据,提交到服务器
            id属性:  
               1. 为了关联label便签
               2. id具有唯一标识的特点,不能重复。 
            name属性:用于定义向服务器提交的数据KeyValue对中的Key的名字
            value属性:接受用户输入的内容(需要手动输入内容时不需要写出来) -->
            <select name="" id="">             
                <option value="" selected></option><!--有几个选项就有几个option标签 -->
            </select><!-- select:  下拉菜单元素
                name属性:  用于定义提交到服务器的name的具体值。
                option子元素: 用于定义下拉菜单的选项
                option元素里的属性:
                       value属性: 用于定义提交到服务器的选项的具体值。
                       selected属性: 默认选中-->
            <textarea name="" id="" rows="30" cols="50"></textarea> <!-- textarea:  文本域, 注意y与input的type="text"的区别
            可以设置行数与列数。-->
        </fieldset>
   </form>   

</body>

3.<div>元素

<!-- 
    div:  该元素,是块级元素,通常用于做页面的整体布局。 没有其他的特殊含义。
          该元素可以作为其他任何元素的容器。
 -->

4.<span>元素

<!--- HTML <span>元素是内联元素,可用作文本的容器,也就是用来包括
- <span>元素也没有特定的含义-->

5.浏览器的自动纠正功能

- 标签写在了根元素的外面
- p元素中嵌套了块元素
- 根元素中出现了除了head和body以外的子元素(浏览器都会自动纠正)

6.音频标签

<!-- 音频标签:
      audio:   用于加载音频文件,支持的格式mp3, wav, ogg
        属性:
            src:  用于书写音频文件的路径
            controls:   提供用户可以操作的控件,比如播放,暂停
            autoplay:  自动播放
            loop:  循环播放
            
-->
语法:<audio src="" controls autoplay loop></audio>


<!-- 考虑浏览器的兼容性。有些音频格式不支持。
         可以使用source子元素,让浏览器自上而下的寻找可以播放的音频文件,找到一个能播放的就不会再向下寻找。
    -->
    <audio controls>
        <source src="./resource/audio.mp3">
        <source src="./resource/audio.ogg">
    </audio>

7.视频标签

<!-- 
    视频标签video:  html5提供的新元素
    属性:
        src:  用于书写视频的路径
        controls:  提供用户控件
        autoplay:  自动播放
        loop:       循环播放
        width:   宽    
        height:  高

        注意: 宽与高,只设置了其中一个,会等比例的缩放。
 -->
语法:<video src="" controls loop autoplay loop width="" height=""></video>


<!-- 考虑浏览器兼容问题,有些格式不支持,那就可以使用source子元素,
        让浏览器自上而下寻找可用视频文件 -->
    <video controls width="400px">
        <source src="./resource/flower.mp4">
        <source src="./resource/flower.webm">
    </video>

8.iframe标签

<!-- iframe标签:用于将另外一个网页,嵌入当前网页中 

        属性:frameborder      表示是否显示边框,0表示不显示,1表示显示
        可以使用width和height属性调整窗口的宽与高
-->
语法:<iframe src="" frameborder="0" width="" height="">不支持iframe标签</iframe>

9.CSS

CSS (Cascading Style Sheets,层叠样式表),是一种用来为结构化文档(如 HTML 文档或 XML 应用)添加样式(字体、间距和颜色等)的计算机语言,CSS 文件扩展名为 .css

CSS为HTML标记语言提供了一种样式描述,定义了其中元素的显示方式。CSS在Web设计领域是一个突破。利用它可以实现修改一个小的样式更新与之相关的所有页面元素。

10.样式分类

(1)内联样式

就是在标签的style属性里直接写样式。

<!-- 内联样式:  就是将样式写在元素的开始标签里的style属性中


    div:   
        宽度:  默认是撑满父元素的内容区宽度
        高度:  默认自己的内容区的文字撑起来的高度
        当然,可以自定义div的宽与高: width,height



    扩展:  插件  live server的使用, 一个简易的服务器插件,端口号默认是5500
            该插件可以使用浏览器打开HTML等文件,并且自动的实时刷新。
            
        
 -->
例子:<div style="border:5px dotted red ;width: 500px; height: 300px; ">我是div1234567</div>

(2)内部样式表

就是把样式写在head标签下的子元素style里,进行规整,给要写样式的每个元素取个名字。

<!-- 内部样式表:   是将样式写在head的子元素style里。
                    此时需要使用选择器来定位你要设置样式的元素
     语法:
         选择器{
            属性:值;
            ......
         }
-->

例子:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>内部样式表的写法</title>
    <style>
        #d1 {
            background-color: blueviolet;
            width: 500px;
            height: 400px;
        }

        #d2 {
            border: 2px double orange;
            width: 500px;
            height: 100px;
        }
    </style>
</head>

<body>
    <div id="d1">我是div1</div>
    <div id="d2">我是div2</div>
</body>
</html>

(3).外部样式

把样式统一写在一个.css文件里,在head标签下用它的子元素link标签引入。

<!-- 
    外部样式表: 将样式单独封装到一个文件中,文件的扩展名是.css.
                然后使用link标签,将样式文件引入到该HTML页面中
 -->
<link rel="stylesheet" href="./css/my.css"> <!-- rel指定文件类型,href指定所需的css文件的位置 -->

11.选择器

(1)标签选择器

注意:写样式时,直接写标签的名字{}。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>标签选择器</title>
    <style>
        /*  标签选择器:也称元素选择*/
        p {
            font-size: 20px;
            color: blue;
        }

        div {
            /* border-inline-xxx:   xxx可以是width,color,style.   设置左右边框的大小,颜色,线条
               border-block-xxx:   设置上下边框的大小,颜色,线条。 
               常用的线条:  
                        solid :  实线
                        dotted:  点虚线
                        double:  双线条         */
            border-inline-width: 10px;
            border-inline-color: red;
            border-inline-style: double;
            width: 300px;
            height: 200px;
        }
    </style>
</head>

<body>
    <p>段落1</p>
    <div>div1</div>
    <p>段落2</p>
    <div>div2</div>
</body>

</html>

(2)类选择器

用.开始,即

.取的元素的名字{}

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>类选择器的学习</title>
    <style>
        /* 类选择器是以小圆点开头的样式选择器,小圆点后面是具体的class名称 
        */
        .c1 {
            font-size: 20px;
            color: orange;
        }

        .c2 {
            font-size: 30px;
            color: blue;
        }

        .c3 {
            font-style: italic;
        }

        .c4 {
            font-family: Arial, Helvetica, sans-serif;//字体家族
            color: pink;
            font-size: 50px;
        }
    </style>
</head>

<body>
    <!-- 每个元素都有class属性。  不同的元素的class的值可以相同,表示同一类的元素 
         class的值可以有多个,使用空格隔开。
    -->
    <div class="c1">div1</div>
    <p class="c1 c3">段落1</p>
    <h1 class="c1">标题1</h1>
    <p class="c4">段落2</p>
</body>

</html>

(3)id选择器

注意:是#开头

即:#取的元素的名字{}

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>id选择器的学习</title>
    <style>
        /* id选择器: 必须使用#作为开始符号,紧跟着id的具体值 
            id:相当于身份证号,因此id的值是不可以重复的,具有唯一性。

            与class的区别:    
                1. 在属性上的区别:class的值可以重复。id的值不能重复
                2. 在选择器上的区别:class选择器以.开头,id选择器以#开头
        */
        #d1{
            font-size: 50px;
        }
        #d2 {
            border: 1px dotted red;
            width: 200px;
            height: 200px;
        }
    </style>
</head>

<body>
    <div id="d1">div1</div>
    <div id="d2">div2</div>
    <p id="d3">段落1</p>
</body>

</html>

(4)通配符选择器

*{}

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>通配符选择器的学习</title>
    <style>
        /* 通配符选择器,就是*选择器, 表示所有的元素都被选中,若有其他选择器,则其他选择器优先 */
        #d1 {
            width: 300px;
            height: 100px;
            background-color: aquamarine;
        }

        .c1 {
            color: blue;
        }

        * {
            font-size: 50px;
            color: aquamarine;//如果有其他选择器,会优先选择其他选择器
        }
    </style>
</head>

<body>
    <div id="d1" class="c1">div1</div>
    <p class="c1">段落1</p>
    <h1 class="c1">标题1</h1>
    <p>我是</p>
</body>

</html>

(5)复合选择器

交集选择器:每个选择器互相挨着

并集选择器:每个选择器之间用逗号隔开

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>复合选择器的学习</title>
    <style>
        /* 交集选择器:
            选择器1选择器2选择器3{.....}
            上述多个选择器中共同选中的标签进行设置样式 
            注意:选择器之间没有任何东西隔开,紧挨着的,
                  交集选择器中如果有标签选择器,标签选择器必须放在前面  
        */
        .c1#p1 {
            color: blue;
        }

        p.c1 {
            font-size: 50px;
        }


        /* 并集选择器:  多个选择器的名字使用逗号隔开。  */

        #s1,
        .c4,
        #d3 {
            color: red;
        }
    </style>
</head>

<body>
    <h1>交集选择器的测试</h1>
    <div class="c1">div1</div>
    <div class="c1">div</div>
    <p class="c1" id="p1">段落1</p>
    <p class="c2">段落2</p>
    <hr>
    <h1>并集选择器的测试</h1>

    <span id="s1">用户名已经存在</span> <br>
    <span class="c3">密码不正确</span>
    <p class="c4">段落3</p>
    <div id="d3">div3</div>

</body>

</html>

(6)关系选择器

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>关系选择器的学习</title>
    <style>
        /* 
        父子选择器: 通过父亲选中儿子。 
            语法:父>子 {}

        后代选择器: 通过祖先选中后代 
            语法:祖先 后代{}
        兄+弟选择器: 通过兄长选中紧邻的弟弟
            语法:兄+弟{} 
        兄~弟选择器: 通过兄长选中符合条件的所有弟弟
            语法:兄~弟{}
        */
        /* 1.父子选择器的演示  */
        div>span {
            font-size: 40px;
            color: blue;
        }

        /* 2.后代选择器的演示 */
        /* div span{
            color: orange;
        } */
        div p span {
            color: orange;
        }

        /* 3.兄+弟选择器的演示 */
        p+div {
            background-color: aqua;
        }

        span+span {
            font-style: italic;
        }

        /* 4.兄~弟选择器的演示 */
        div~span {
            color: pink;
        }
    </style>
</head>

<body>
    <div>
        我是div
        <p>
            我是div中的p
            <span>我是p中的span</span>
        </p>
        <div>我是div中的div</div>
        <span>我是div中的span1</span>
        <span>我是div中的span2</span>
    </div>
    <span>我是div之外的span1</span>
    <span>我是div之外的span2</span>
</body>

</html>

 1.父子选择器的演示

 2.后代选择器的演示

3.兄+弟选择器的演示

4.兄~弟选择器的演示

(7)属性选择器

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>属性选择器的学习</title>
    <style>
        /* 属性选择器有五种:
            [属性名]:    选中具有指定属性名的元素
            [属性名=属性值]:    选中指定属性名等于某属性值的元素
            [属性名^=指定值]:   选中指定属性名的属性值是以指定值开头的元素
            [属性名$=指定值]:   选中指定属性名的属性值是以指定值结尾的元素    
            [属性名*=指定值]:   选中指定属性名的属性值包含指定值的元素      
        */
        [title] {
            color: blue;
        }

        [title=a] {
            color: orangered;
        }

        [title^=a] {
            color: pink;
        }

        [title$=c] {
            color: blueviolet;
        }

        [title*=b] {
            color: teal;
        }
    </style>
</head>

<body>
    <h1 title="a">《出塞》</h1>
    <h2 title="ab">唐·王昌龄</h2>
    <p title="abc">秦时明月汉时关,</p>
    <p title="abab">万里长征人未还。</p>
    <p title="c">但使龙城飞将在,</p>
    <p>不教胡马度阴山。</p>
</body>

</html>

1.[属性名]

2.[属性名=属性值]

3. [属性名^=指定值]

4. [属性名$=指定值]

5.[属性名*=指定值]

最常见的是p::selection       对段落中被鼠标选中的文字设置样式(记住)

 (8)伪类选择器

  •          元素选择伪类选择器

常用的伪类选择器:

<body>
    <div>
        <p>段落1 </p>
        <p>段落2</p>
        <p>段落3</p>
        <p>段落4</p>
        <div>
            <p>端落落</p>
        </div>
    </div>
    <div>
        <p>段落5</p>
        <p>段落6</p>
    </div>
    <div>
        <p>段落7</p>
    </div>
</body>

       :first-child    第一个子元素被选中 

/* 选择div的孩子中的第一个 */
         div :first-child {   //冒号前面尽量用空格
            color: orange;
        } 

       :last-child     分支中的最后一个子元素被选中

 /* 选择div的孩子中的最后一个 */
         div :last-child {
            color: red;
        }

       :nth-child(n)   第n个子元素被选中。  n的值可以从1到正无穷

                        2n表示偶数位的元素被选中,也可以使用单词even

                        2n+1表示奇数位的元素被选中,也可以使用单词odd

/* 选择div的孩子中的偶数位    2n或者even*/
         div :nth-child(even) {
            color: blue;
        } 

        /* 选择div的孩子中的奇数位    2n+1或者odd */
        div :nth-child(2n+1) {
            font-size: 40px;
        } 

 1.第偶数个子元素被选中

  2.第奇数个子元素被选中

     注意: 使用伪类选择器时,注意空格的问题。优先使用带空格的形式。

      :first-of-type:  同类型中的第一个元素

 /* 选中每个层级中的p段落的第一个元素。( 注意,是不同层级的第一个) */
        p:first-of-type {
            color: red;
        } 

      :last-of-type:  同类型中的最后一个元素

/* 选中每个层级中的p段落的最后一个元素 ( 注意,是不同层级的最后一个)*/
        p:last-of-type {
            color: orange;
        } 

      :nth-of-type(n)  同类型中的第n个元素   可以使用2n/even表示偶数位,使用2n+1/odd表示奇数位

/* 选中每个层级中的p段落的奇数位元素    (注意,是不同层级的奇数位) */
        p:nth-of-type(2n+1) {
            color: blue;
        } 
偶数位同理

      注意: 上述三个伪类选择器冒号前面,不要带空格。

  • 否定伪类选择器 

:not(其他选择器):   注意,括号里不能传入复合选择器。

<body>
    <div>
        <p>段落1</p>
        <p>段落2</p>
        <p>段落3</p>
        <p>段落4</p>
    </div>
</body>

  作用: 将其他选择器选中的元素排除。

<style>
        /* 将所有的p里的文字都红,除了第一个和最后一个 
          
           注意:  如果带child关键字的伪类选择器,与其他的伪类选择器共同使用,冒号前面的空格不需要写。
        */
         p:not(p:first-child):not(p:last-child) { // p的后面不能带空格,带空格不生效
            color: red;
        } 
        /*p:not(p:first-of-type):not(p:last-of-type) {
            color: red;
        }*/
    </style>

  • a链接的伪类选择器

:link    超链接独有的选择器, 表示未访问前的状态

       :visited  超链接独有的选择器, 表示访问过的状态

       :hover    所有元素都可以使用的选择器,表示鼠标进入该元素时的状态(常见)

       :active   所有元素都可以使用的选择器,表示鼠标左键点中该元素时的状态

<style>
        /* 1.超链接访问前的颜色设置 */
        a:link {
            color: orangered;   //没有访问时时橘色的
        }

        /* 2.超链接访问后的颜色设置,注意:网址必须真实存在,访问后才算真正的访问过 */
        a:visited {
            color: green;  //访问成功后是绿色的
        }

        /* 3.鼠标进入后的状态设置 */
        p:hover {
            background-color: aqua;  
        }
        /* 4.鼠标左键点击的状态设置 */
        p:active {
            font-size: 40px;
            color: violet;
        }
    </style>

1. 

(9)伪元素选择器 

伪元素:就是虚假的元素,并不存在,只是CSS为了对段落标记进行设置,提供的内置的选择器

<body>
    <p>hello</p>
    <p>world,我们要相信明天会更好。</p>
</body>

            p::first-letter    对段落的首字符设置样式

 p::first-letter {
            font-size: 30px;
            color: blue;
        }

            p::first-line      对段落的首行设置样式

/* p的紧邻着的弟弟p的首行 */
p+p::first-line {
            background-color: pink;
        }

            p::selection       对段落中被鼠标选中的文字设置样式

p::selection {
            color: red;
            background-color: teal;
        }

需要鼠标选中

            p::before          对段落中的第一个字符的前面设置样式, 可以理解为向段落的第一个字符之前插入内容

p::before {
            content: "你好";
            color: red;
        }

            p::after           对段落中的最后一个字符的后面设置样式,可以理解为向段落的最后一个字符之后插入内容

   p::after {
            content: "$";
            background-color: chartreuse;
        }

before和after必须配合contend一起使用(before,after所写的内容无法选中且永远在最前和最后)

(10)选择器的权重

内联样式 >id选择器>类和伪类选择器>元素选择器>默认状态

(11)样式继承

CSS针对于样式继承的设计,是为了减少开发过程中的代码量,使子元素具有父元素的一些样式

     父元素设计好的样式,子元素不需要再重复设置。

     比如字体风格,大小,颜色等。   但是某些样式继承不了,比如背景,布局相关的样式。

(12)em单位

像素:
- 屏幕(显示器)实际上是由一个一个的小点点构成的
- 不同屏幕的像素大小是不同的,像素越小的屏幕显示的效果越清晰
- 所以同样的200px在不同的设备下显示效果不一样像素

百分比

- 也可以将属性值设置为相对于其父元素属性的百分比
- 设置百分比可以使子元素跟随父元素的改变而改变
- 是一个相对单位。
- em是相对于当前元素内的字体大小来计算的
- 1em = 1font-size
- em会根据字体大小的改变而改变
- 如果当前文本的字体尺寸没有设置,则相对于浏览器的默认字体尺寸。即1em=16px

rem

- rem是相对于根元素的字体大小来计算
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>单位的讲解</title>
    <style>
       
        html {
            font-size: 20px;
        }

        .outer {
            width: 800px;
            height: 400px;
            background-color: orange;
            /* 设置字体大小为16px */
            /* font-size: 32px; */
            /* 你好  原来设计的是32像素, 现在使用rem单位,因此相对的是根元素的20px来说的
            
                所以,2rem=40px      那么长春相对的就是80px
            */
            font-size: 2rem;
        }

        .inner {
            width: 50%;
            height: 50%;
            background-color: rgb(0, 38, 255);
            /* 设置字体大小为32px */
            font-size: 32px;
        }

        div div:last-child {
            /* 由于默认是32px,因为样式的继承。   2em=2个32px  因此是64px */
            font-size: 2em;
            /* 因为本元素里的字体大小是2em,真实像素是64px.   
            当设计边框的宽度时,使用了1em,相对的是本元素的字体大小,因此1em=64px */
            /* border: 1em solid red; */
            /* 颜色的单位   rgb*/
            border: 1em solid rgba(25, 173, 149, .5);
        }
    </style>
</head>

<body>
    高圆圆
    <div class="outer"> 你好
        <div class="inner">中国</div>
        <div>长春</div>
    </div>
</body>

</html>

12.盒子模型

(1)盒子模型 ,各个部分以及它的属性设置。

常用的属性:

对于内容区(content):width,height,background-color

对于内边距(padding):给padding添加一个值,即上下左右都一样。

对于边框(border):    border:(宽度)(样式)  (颜色);

             常用边框样式:- dotted:  点虚线
                                        - solid:  实线
                                        - double  双线条
                                        - dashed  虚线

对于外边距(margin): 即  margin:0    auto;

(2)水平和垂直方向布局

在水平方向上,元素设置的左右边框的宽,左右内边距的宽,左右外边距的宽和它内容去的宽要和父元素的内容区的宽相等。

在垂直方向上,如果有溢出(就是子元素的高比父元素的高要大),可以在父元素里使用overflow属性,来设置以下值。

                overflow:

                     visible:  可见,默认值

                     hidden:   隐藏(溢出部分)

                     scroll:   添加滚动条(有上下和左右的滚动条)

                     auto:     根据是否溢出选择性的自动添加滚动条(溢出自动添加)

(3)外边距的折叠

兄弟元素的折叠可按情况自行自行设定。

父子元素间相邻外边距,子元素的会传递给父元素(上外边距)
- 父子外边距的折叠会影响到页面的布局,必须要进行处理  (只需要父元素添加border属性)

父元素没有设置边时(父元素的父元素设置了边框),子元素添加上面的外边距时,父元素会随着子元素变动。

1.给父元素添加上border后,父元素就上去了。即问题解决。

代码参考:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        #outer {
            border: 1px solid red;
            width: 800px;
            height: 500px;
            margin: 0 auto;
        }

        #d1 {
            border: 1px solid red;
            width: 300px;
            height: 300px;
            background-color: aqua;
        }

        #d2 {
            border: 5px solid blue;
            width: 200px;
            height: 200px;
        }

        #d2 {
            margin-top: 50px;
        }
    </style>
</head>

<body>
    <div id="outer">
        <div id="d1">
            <div id="d2">
                1
            </div>
        </div>
    </div>
</body>

</html>

2. 还有一种解决办法:

就是给父元素加一个伪元素,即在上述代码中加入如下代码

  /*table值,会将外边距隔开*/
        #d1::before {
            content: "";
            display: table;
        } 

3.还有一种方式:就是在父元素的class属性上添加clearfix

注意: clearfix是css中内置的class的值, 不能随便起名,必须用这个词。

.clearfix{
            content: "";
            display: table;
            clear: both;
        }

(4)行内元素盒模型

行内元素不支持设置宽度和高度, 宽和高是被内容数据撑起来的。

但是可以设置左右的padding,border,margin

如果想要行内元素的宽,高或者垂直方向上的样式生效,可以使用display属性将行内元素的样式转为块元素的样式进行显示设置。

display属性的可选值如下:

  • none 隐藏, 不再占用原有的空间。

  • block 变成块元素的样式显示。(注意,并不是内联元素变成了块元素)

  • inline 变成行内元素的样式显示

  • inline-block 变成行内的块元素,同时具有了内联和块元素的样式特点

(5)默认样式

body里的元素并不是紧贴左侧和顶部,因为body的margin有个默认值8px。再比如,p元素的上下外边距默认是1em等。

可以借助第三方的css样表,进行重置样式。比如

  • reset.css: 该文件的作用,是取消几乎所有元素的默认样式

  • normalize.css: 该文件的作用,是设置一些通常的尺寸。

13.元素的浮动

(1)文档流层

所有的元素,默认都是布局在文档流层的。

文档流层里的元素
    - 块元素
        1. 块元素是垂直排列,自上而下。单占一行
        2. 块元素的宽,默认状态下是要撑满父元素的,也就是由父元素决定
        3. 块元素的高,默认状态下是内容区的数据所占大小
    - 行内元素
        1. 行内元素的宽和高是由内部的文字或元素决定的。
        2. 行内元素的排列,从左到右,当在一行装不下时,会自动换行,继续从左到右(与书写顺序一致)

   (2)浮动的简介

通过浮动可以使一个元素向其父元素的左侧或右侧飘起来
    使用 float 属性来设置于元素的浮动
        可选值:
        none 默认值 ,元素不浮动
        left 元素向左浮动
        right 元素向右浮动

注意:1.元素设置浮动以后,会完全从文档流中脱离,不再占用文档流的位置,所以元素下边的还在文档流中的元素会自动向上移动

          2.浮动元素默认不会从父元素中移出

          3.浮动元素向左或向右移动时,不会超过它前边的其他浮动元素

          4.如果浮动元素的上边是一个没有浮动的块元素,则浮动元素无法上移(即哥哥元素没有设置浮动,那么弟弟设置浮动也不会向上移动)

          简单总结:
浮动目前来讲它的主要作用就是让页面中的元素可以水平排列,通过浮动可以制作一些水平方向的布局   5.浮动元素不会超过它上边的浮动的兄弟元素,最多最多就是和它一样高

(3)浮动的其他特点

1. 浮动元素不会盖住文字,文字会自动环绕在浮动元素的周围,所以我们可以利用浮动来设置文字环绕图片的效果

                比如:  哥哥元素设置浮动
                             弟弟元素里的文字会自动环绕哥哥,而不会被哥哥元素覆盖

2.也可以说:脱离文档流以后,不需要再区分块和行内了

14.网格的简单布局

(1)高度塌陷问题

高度塌陷的问题:
              当父元素没有指定高度,而是由子元素撑起来的。当我们有这种需求时,如果子元素设置了浮动,那么就会出现父元素高度塌陷的问题。

子元素设置了浮动后

解决办法: 使用父元素的伪元素来设置相关属性,然后解决高度塌陷的问题。  
                       该方式是最优的解决方式。

  /* 使用第四种方式,解决高度坍塌问题 */
        #outer::after {
            /* 在父元素的内容区的最后插入一个空字符串,因为有文字,应该会在环绕浮动的子元素周围 */
            content: "";
            /* 将不存在的这个伪元素设置成具有块元素的样式 */
            display: block;
            /* 清除伪元素两侧的浮动效果 */
            clear: both;
        }

问题解决: 

       还有一种解决办法,就是在父元素的class属性上添加clearfix

注意: clearfix是css中内置的class的值, 不能随便起名,必须用这个词。


        .clearfix{
            content: "";
            display: table;
            clear: both;
        }

(2) clearfix

clearfix 这个样式可以同时解决高度塌陷和外边距重叠的问题,当你在遇到这些问题时,直接使用clearfix这个类即可

在父元素的class属性上,添加clearfix.
在style中设置
.clearfix{
    content:"";
    display: table;
    clear: both;
}


注意: clearfix是css中内置的class的值, 不能随便起名,必须用这个词。

15.元素定位

(1)定位的简介

 定位(position)
                    - 定位是一种更加高级的布局手段
                    - 通过定位可以将元素摆放到页面的任意位置
                    - 使用position属性来设置定位
                        可选值:
                            static 默认值,元素是静止的没有开启定位
                            relative 开启元素的相对定位
                            absolute 开启元素的绝对定位
                            fixed 开启元素的固定定位
                            sticky 开启元素的粘滞定位

 (2)相对定位

- 相对定位:
                        - 当元素的position属性值设置为relative时则开启了元素的相对定位
                        - 相对定位的特点:
                            1.元素开启相对定位以后,如果不设置偏移量元素不会发生任何的变化
                            2.相对定位是参照于元素在文档流中的位置进行定位的
                            3.相对定位会提升元素的层级
                            4.相对定位不会使元素脱离文档流
                            5.相对定位不会改变元素的性质块还是块,行内还是行内

偏移量:                 - top值越大,定位元素越向下移动
                                - bottom值越大,定位元素越向上移动 (两者通常只选其一)
                                 -left 定位元素和定位位置的左侧距离
                                 - right定位元素和定位位置的右侧距离(两者通常只选其一)


                         
 (3)绝对定位

绝对定位: 当属性position的值为absolute时,就开启的绝对定位

                    1. 如果设置了绝对定位,不改变偏移量,则该元素不会移动

                    2. 设置了绝对定位的元素会脱离文档流,如果下面的兄弟没有设置浮动或者定位则向上移动

                    3. 设置了绝对定位的元素的位置是相对于所在的包含块

                    4. 设置了绝对定位的元素的性质会发生改变。 行内元素变成块元素, 此时所有的元素宽和高默认都是内容撑开的。

                    5. 设置了绝对定位的元素提高了层级。

            包含块:

                    如果设置了绝对定位,那么该元素是相对于距离他最近的设置了相对定位的祖先块元素。

                    如果所有的祖先块元素都没有设置定位,那么就是相对html这个根元素来说的。

                    建议:包含块尽量设置相对定位,因为相对定位不会脱离文档流。

                    简而言之:最近的设置了相对定位的祖先块称之为包含块。

                    HTML:是所有元素的初始包含块。

    (4)固定定位

固定定位:

                当position的值设置为fixed时,就是开启了该元素的固定定位

                固定定位的特点:

                    1. 固定定位也是一种绝对定位,特点和普通的绝对定位差不多

                    2. 固定定位的位置是相对于当前浏览器的视口(viewport)来说的

                       因此,固定定位的元素不会随着滚动条去滚动。

                    比较适合广告位的设置。  

(5)粘滞定位

粘滞定位:

                 当position的值为sticky时,则开启的元素的粘滞定位

                 粘滞定位的特点:

                      1. 粘滞定位的特点和相对定位的特点差不多。

                      2. 粘滞定位的不同之处,在于当到达某一个固定位置时,粘住不动。

                              注意:1.当和它紧紧相邻的弟弟元素的width的值过大时,粘滞定位就不生效了

                                          2.当它相邻的弟弟元素开启了浮动,那么它的粘滞定位效果失效

                      3. 注意:粘滞定位的位置不能超出父元素的范围,否则粘滞效果消失。

             设置偏移量: 偏移量是相对视口的设置,当元素到达指定位置时,就黏住不动了 

(6)元素的层级:z-index属性

对于开启了定位元素,可以通过z-index属性来指定元素的层级

             兄弟元素:

                          z-index的值越大,层级越高

1.如果开启了定位后,相邻的兄弟元素发生了重叠,那么层级大的会覆盖住层级小的,如果层级相同的话,则是弟弟元素优先显示。

2.如果哥哥元素没有开启定位,弟弟元素开启了定位,那么哥哥元素的层级再大也不会覆盖住弟弟元素。

    总之层级是对于开启了定位元素来说的

               父子元素:

                          父元素的z-index的值再大,也不会覆盖子元素(也不会高过子元素的层级)

没有添加任何定位: 

 为2、3开启定位:1没有开启定位,1的层级再大都不会发生变化

 为1开启定位,并且把1的层级调大,比2的大,显示如下效果。

 16.动画

 (1)过度: transition属性

动画的过度是鼠标进入后改变大小 

 /* 设置过渡 */
        div:hover {
            width: 400px;
            height: 400px;
            /* transition-property: width, height;
            transition-duration: 3s;
            transition-timing-function: linear;
            transition-delay: 2s; */
            /*  */
            transition: width, height, linear, 3s 2s;
        }

动画的过渡:

            transition-property:  指定要过渡的属性名称,多个属性使用逗号隔开

            transition-duration:  整个过渡过程所需要的时间,单位s/ms

            transition-timing-function:  过渡函数,即如何运动,可选值

                        ease :  先加速再减速

                        linear:  匀速

                        ease-in: 加速

                        ease-out: 减速

                        ease-in-out: 先加速再减速

            可以使用transition 属性来设置多个属性的值,减少代码量,提高可读性

            语法:transition: 属性,属性,运动方式, 持续时间  延迟时间; 

 该设置是当鼠标进入后宽变成400px,高也变成400px,迅速过度,持续3s ,延迟2s。

 /* 设置过渡 */
        div:hover {
            width: 400px;
            height: 400px;
            /* transition-property: width, height;
            transition-duration: 3s;
            transition-timing-function: linear;
            transition-delay: 2s; */
            /*  */
            transition: width, height, linear, 3s 2s;
        }

 (2)动画:animation属性

 由于动画设置的是偏移量的改变,因此需要开启该元素的相对定位

 设置动画效果,必须先要设置一个关键帧,关键帧设置了动画执行每一个步骤
    @keyframes test{
            /* from表示动画的开始位置 也可以使用 0% */
            from{
                margin-left: 0;
                background-color: orange;
            } 

            /* to动画的结束位置 也可以使用100%*/
            to{
                background-color: red;
                margin-left: 700px;
            }
        }

只用一个属性书写时的语法:

animation: name duration timing-function delay iteration-count direction fill-mode;

对要进行动画的元素惊醒设置
 #inner {
            width: 100px;
            height: 100px;
            background-color: orange;
            /* 由于动画设置的是偏移量的改变,因此需要开启该元素的相对定位 */
            position: relative;
            /* 设置动画的各个属性 */
            animation-name: run;
            /*  用于指定要使用的关键字的名字*/
            animation-duration: 3s;
            /*   动画执行的整个过程需要的时间*/
            animation-timing-function: ease-in;
            /* 动画如何运行*/
            animation-delay: 2s;
            /* 动画的延迟时间*/
            animation-iteration-count: 2;
            /*  动画从初始位置到结束为止执行的次数*/
            animation-direction: normal;
            /* 动画的执行方向  normal正向运动(from到to)  reverser反向运动(to到from)
              alternate来回运动(执行多次)(from到to,to到from)   
              alternate-reverse反向来回运动(执行多次)(to到from,from到to)*/
            animation-fill-mode: forwards;
            /* 动画的填充(结束后停止的位置)  forwards(停在结束位置),backwards(停在开始位置)
            ,both none(结合了forwards 和 backwards)*/

            /* 使用一个属性animation,来设置上述多个属性的值 */
            /* 关键帧 运动需要的时间  运动速度曲线  延迟  次数  运行方向  运动的结束位置 */
            /* animation: run 10s linear 2s infinite normal forwards; */
            animation: name duration timing-function delay iteration-count direction fill-mode;
        }
/* 设置关键帧     0%相当于from    100%相当于to   百分比可以是任意0~100之间任意的整数*/
        @keyframes run {

            /* from表示动画的开始位置 也可以使用 0% */
            from {
                margin-left: 0;
                background-color: rgb(0, 145, 255);
            }

            /* to动画的结束位置 也可以使用100%*/
            to {
                background-color: red;
                margin-left: 700px;
            }
          /*用百分比来规定运动的方向*/
            /* 0% {
                left: 0px;
                top: 0px;
            }

            25% {
                left: 700px;
                top: 0px;
            }

            50% {
                left: 700px;
                top: 400px;
            }

            75% {
                left: 0px;
                top: 400px;
            }

            100% {
                left: 0px;
                top: 0px;
            } */
        }

(3)动画的变形

 是鼠标进入后平移或者旋转,缩放(整体的缩放,与过度不同是,缩放是改变人脸到屏幕的距离,过度是鼠标进入后改变了设置的相应属性)

动画的变形:即3D转换,  属性是transform

            对应的属性值有三类:

            第一类:  平移

                translateX(像素): 即沿着X轴平移,正值向右平移,负值向左平移

                translateY(像素): 即沿着Y轴平移,正值向下平移,负值向上平移

                translateZ(像素): 即沿着Z轴平移,正值突脸,负值远离脸,需要开启视距(脸与屏幕的距离)

            第二类:   旋转

                rotateX(度数):  以X轴为轴心,进行旋转

                rotateY(度数):  以Y轴为轴心,进行旋转

                rotateZ(度数):  以Z轴为轴心,进行旋转

            第三类:  缩放  

                scaleX(倍数):   水平方向(即X轴方向)缩放

                scaleY(倍数):   垂直方向缩放

                scaleZ(倍数):   Z轴方向缩放

                scale(倍数)  相当于scaleX和scaleY的合并。

 设置的是鼠标进入后的效果:


        #d1:hover {
            transition: 2s;
            /* 沿着X轴平移,如果不设置过渡,则是瞬间完成,想要看效果,可以设置过渡时间,即执行这个过程需要的时间   */
            /* transform: translateX(100px) translateY(200px); */
            /* 沿着Z轴平移,需要使用  perspective(像素)   函数,先开启视距 ,否则没有效果*/
            /* transform: perspective(500px) translateZ(200px); */
            /* transform: translateX(100px) translateY(200px) perspective(500px) translateZ(200px); */

            /* 测试旋转 */
            /* transform: rotateX(90deg); */
            /* transform: rotateY(180deg); */
            /* transform: rotateZ(90deg); */
            /* transform: rotateX(-90deg) rotateY(0.5turn) rotateZ(180deg); */

            /* 测试缩放 */
            /* transform: scaleX(2); */
            /* transform: scaleY(2); */
            /* 上下都拉长,在设置Y轴方向的缩放可以看的更清晰 */
            transform: scaleX(2) scaleY(0.5) scaleZ(2);
            /* transform: scale(2); */
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值