VS code-HTML与CSS基础学习与运用Week03

本文进行CSS和HTML的进阶学习,介绍元素三种显示模式及转换,阐述CSS三大特性、盒子模型等知识,还提及结构伪类选择器、标准流、浮动等内容。此外,通过新浪导航设计、网页新闻列表案例展示运用实操,最后推荐前端学习博主。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接下来我们将进行CSS和HTML的进阶学习与运用

目录

进阶提升

  *元素三种显示模式

    ①块级元素:display:block

    ②行内元素:display:inline

    ③行内块元素:display:inline-block

  元素显示模式转换

  拓展内容一

      1.HTML嵌套规范注意点

      2.居中方法总结         

  

  CSS三大特性

    一、继承性

    二、层叠性

    三、优先性

盒子模型

    一、盒子模型的介绍

    二、内容的宽度和高度

    三、边框(border)

    四、内边距(padding)

    五、外边距(margin)

    六、外边距折叠现象:

        ①上下合并

        ②塌陷现象

    七、行内元素的margin和padding无效情况 

    结构伪类选择器

标准流

浮动

*拓展内容二:易错点

*拓展内容三:nth-of-type

伪元素

运用与实操

         一、新浪导航的设计

二、网页新闻列表案例

三、浮点的运用


进阶提升

  *元素三种显示模式

    ①块级元素:display:block

         显示特点:1.独占一行        注意,这里的独占一行指的是指定元素父元素的一行!!!

                           2.宽度默认是父元素的宽度,高度默认由内容撑开

                           3.可以设置宽高

          代表标签:div,p,h系列

    ②行内元素:display:inline

        显示特点:1.一行可以显示多个

                          2.宽度和高度默认由内容撑开

                          3.不可以设置宽度和高度

        代表标签:a,span,b,strong,em,del

    ③行内块元素:display:inline-block

        可以理解为行内元素和块级元素特点的集合

        显示特点:1.一行可以显示多个

                          2.可以设置宽高

        代表标签:input,textarea, button, select

                          img标签有行内块元素特点,但在Chrome调试工具中显示结果为inline


  元素显示模式转换

    目的:改变元素默认的显示特点,让元素布局符合要求

属性效果使用频率
*display:block转换为块级元素

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

  拓展内容一

      1.HTML嵌套规范注意点

            ①块级元素一般作为大容器,可以嵌套:文本、块级元素、行内元素、行内块元素......

               但是在p标签中不要嵌套div、p、h等块级元素,

            ②a标签内部可以嵌套除了a之外任意元素

            ③浏览器会自动更正错误代码

      2.居中方法总结         

  

  CSS三大特性

    一、继承性

        特性:子元素有默认继承父元素样式的特点(子承父业),可以在一定程度上减少代码

        可继承的常见属性:color,font系列,text-indent,text-align,line-height......

        *继承失效的特殊情况:

            前提:如果元素有浏览器默认样式,此时继承性依然存在,但优先显示默认样式。

                      1.a的color继承失败;

                      2.h的font-size继承失败;

                      3.div的高度不能继承,但宽度有类似于继承的效果。


    二、层叠性

            特性:1.给同一个标签设置不同的样式,此时样式会层叠叠加,会共同作用在标签上;

                       2.给同一个标签设置相同的样式,此时样式会层叠覆盖最后写的样式会生效

            注意点:当样式冲突时,只有当选择器优先级相同时,才能用层叠性判断结果。

    三、优先性

            特性:不同的选择器具有不同的优先级,优先级高的选择器样式会覆盖地选择器样式。

            *优先级公式:

                   继承<通配符选择器<标签选择器<类选择器<id选择器<行内选择器<!important

            注意点:1.!important写在属性值的后面,分号的前面;

                           2.!important不能提升继承的优先级;

                           3.实际开发中不建议使用!important。

            *权重叠合:

     最终显示为:

盒子模型

    一、盒子模型的介绍

        概念: 1.页面中的每一个标签都可以看做是一个“盒子”,通过盒子的视角更方便布局

                    2.浏览器在渲染(显示)网页时,会将网页中的元素看作是一个个的矩形区域,我们                         也形象地称之为“盒子”

        盒子模型:CSS中规定每个盒子分别由:内容区域(content)、内边距区域(padding)、                              边框区域(border)、外边距区域(margin)构成

 二、内容的宽度和高度

        作用:利用width和height属性默认设置是盒子内容区域的大小。

        常见取值:数字 + px;

        不会撑大盒子的特殊情况:===》仅限块级元素

               1.如果此时盒子设置宽度,此时宽度默认为盒子的宽度;

               2.此时给盒子设padding或border,显示无效。

        自动内减:(320px-->300px)

               1.手动内减:计算量过大;

               *2.自动内减:给盒子设置 box-sizing:border-box; 即可。

                                      浏览器会自动计算多余大小并减去。

    div {
            width: 300px;
            height: 300px;
            background-color: pink;
            border: 10px solid black;
            padding: 20px;
            
            box-sizing: border-box;

            /* 方法一:手动内减 */

            /* 要求:300*300
            现在:360*360
            多出:60 */

            /* 方法二:自动内减 */

            /* 只要设置一个属性,浏览器会自动计算多出了多少,
            自动在内容中减去 */
        }

    三、边框(border)

        作用:设置边框粗细、样式、颜色效果

作用属性名属性值
粗细border-width数字 + px
*样式border-style实:solid;虚:dashed;点:dotted(必写)
颜色border-color颜色取值

        连写:border:10px solid red;

                  快捷键:bd + tab

    四、内边距(padding)

        作用:设置边框与内容区域之间的距离

        属性名:padding

        常用取值:

一个值上右下左
两个值上下,左右
三个值上,左右,下
四个值上,右,下,左

 五、外边距(margin)

方向属性效果
水平方向margin-left让当前盒子左移
水平方向margin-right让右侧盒子右移
垂直方向margin-top让当前盒子下移
垂直方向margin-bottom让下方盒子下移

        外边距的常用取值与内边距相似!!!

        清除默认内外边距:浏览器会默认给部分标签设置默认的margin和padding,但一般在项目开                                          始前需要清除这些默认值,后续自己设置。

        body,p,ul,h系列,dl,dt,hr,input

* {
    margin:0;
    padding:0;
}

    六、外边距折叠现象:

        正常情况下左右margin互不影响!!!

        上下合并

            1.场景:垂直布局的块级元素,上下的margin会合并;

            2.结果:最终两者的距离为margin的最大值

            3.解决方案:尽量避免即可。比如只给其中的一个盒子设置margin

        ②塌陷现象

            1.场景:相互嵌套的块级元素,子元素的margin-top会作用在父元素上

            2.结果:导致父元素一起往下移动;

            3.解决方法:给父元素设置border-top或padding-top或写内容来分割父子元素的margin-top

                                 给父元素设置overflow:hidden;

                                 转换子元素为行内块

                                 设置浮动

    七、行内元素的margin和padding无效情况 

        当我们给行内元素设置padding和margin时,水平方向都有效,垂直方向都无效!!!

    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .father {
            width: 400px;
            height: 400px;
            background-color: pink;

            /* border-top: 1px solid #000;
            padding-top: 1px; */

            /* overflow: hidden; */

            float: left;
        }
        .son {
            /* display: inline-block; */
            width: 100px;
            height: 100px;
            background-color: blue;
            margin-top: 100px;
        }
    </style>
</head>
<body>
    <div class="father">
        <!-- 我是文本 -->
        <div class="son"></div>
    </div>
</body>


    结构伪类选择器

        1.作用:根据元素在HTML中的结构关系查找元素

        2.优势:减少对HTML中类的依赖,有利于保持代码整洁

        3.场景:常用于查找某父级选择器中的子元素

选择器说明
E:first-child {}匹配父元素中第一个并且为E元素的子元素
E:last-child {}匹配父元素中最后一个并且为E元素的子元素
E:nth-child(n) {}匹配父元素中第n个并且为E元素的子元素
E:nth-last-child(n) {}匹配父元素中倒数第n个并且为E元素的子元素

<style>
        /* 找到第一个子元素,并且为li标签 */
        li:first-child {
            background-color: blue;
        }
        /* 找到最后一个子元素,并且为li标签 */
        li:last-child {
            background-color: aqua;
        }
        /* 找到第3个子元素,并且为li标签 */
        li:nth-child(3) {
            background-color: pink;
        }
        /* 找到倒数第3个子元素,并且为li标签 */
        li:nth-last-child(3) {
            background-color: #ccc;
        }
    </style>
</head>
<body>
    <ul>
        <!-- <div>私生子</div> -->
        <!-- 若这个地方第一个为div标签,则会无法选中父元素的第一个标签。 -->
        <!-- 因为此时父元素的第一个标签不是li,而li的第一个为li,出现错误 -->
        <li>我是第1个li</li>
        <li>我是第2个li</li>
        <li>我是第3个li</li>
        <li>我是第4个li</li>
        <li>我是第5个li</li>
        <li>我是第6个li</li>
        <li>我是第7个li</li>
        <li>我是第8个li</li>
        <li>我是第9个li</li>
        <li>我是第10个li</li>
    </ul>
</body>

        注意:在下列代码中,我们在ul标签的第一个li子元素上方加入一个div子元素。若此时我们选                     择父元素的第一个li标签,如:li:first-child {},因为父元素的第一个标签不是li标签,故                     会出现没有选择的情况——因为选择器的选择需要双重选定,即既是第一个元素,有                       又要是li标签。其他部分同理。

<ul>
    <div></div>
    <li></li>
    <li></li>
    <li></li>
</ul>

    拓展:(n)的填写

        含n的乘式必须写在后面!!!

功能公式
偶数2n,even
奇数2n-1,2n+1,odd
找到前五个-n+5
找到从第五个开始往后的数n+5
 <style>
        /* 找到第偶数个li */
        li:nth-child(2n) {
            background-color: blue;
        }
        li:nth-child(even) {
            background-color: blue;
        }
        /* 找到第奇数个li */
        li:nth-child(2n-1) {
            background-color: pink;
        }
        li:nth-child(2n+1) {
            background-color: pink;
        }
        /* 找到前五个 */
        li:nth-child(-n+5) {
            background-color: orange;
        }
        /* 找到第五个往后*/
        li:nth-child(n+5) {
            background-color: red;
        }
        
    </style>
</head>
<body>
    <ul>
        <!-- <div>私生子</div> -->
        <!-- 若这个地方第一个为div标签,则会无法选中父元素的第一个标签。 -->
        <!-- 因为此时父元素的第一个标签不是li,而li的第一个为li,出现错误 -->
        <li>我是第1个li</li>
        <li>我是第2个li</li>
        <li>我是第3个li</li>
        <li>我是第4个li</li>
        <li>我是第5个li</li>
        <li>我是第6个li</li>
        <li>我是第7个li</li>
        <li>我是第8个li</li>
        <li>我是第9个li</li>
        <li>我是第10个li</li>
    </ul>

标准流

    定义:又称文档流,是浏览器在渲染显示网页内容默认采用的一套排版规则,规定了应以何                   种方式排列元素;

    常见排版规则:

        1.块级元素:从上往下,垂直布局,独占一行;

        2.行内元素(行内块元素):从左往右,水平布局,空间不够自动折行

浮动

    1.作用:让垂直布局的盒子变成水平布局;

    2.代码float

属性名效果
left左浮动
right右浮动
<style>
     img {
            width: 300px;
            float: left;
            margin-right: 20px;
        } 
<body>
    <img src="./v2-f168c85305a497a54cbdf62da8c49ff0_r.jpg" alt="星空图">
    如果不受外力的作用,所有物体在引力的作用下趋向于向中心聚集。最集中的结果是球体。
    虽然恒星表面是固体,但由于固体也可以变形,固体粒子可以移动,这使得它们有可能转变成球体。
    星星内部的能量的活动使星星变的形状不规则。然而,高山上的岩石受到恒星的引力,
    从高处滚落下来。河流把沉积物从高处带到低洼的海洋(河流也被恒星吸引),
    这些都是集中化的例子。它们都使星星由不规则变成球形。
</body>

    3.特点:-->>无法通过text-align / margin: auto; 让其水平居中

        ①浮动的元素会脱离标准流,在标准流中不占位置

        ②浮动的元素(级别更高)会覆盖标准流中的元素;

        ③下一个浮动找上一个浮动,浮动之间为并列关系,不会覆盖;

        ④浮动元素会受上一个元素边界的影响

        ⑤浮动元素有特殊的显示效果:一行可显示多个可以设置宽高

    <style>
        div {
            width: 300px;
            height: 300px;
        }
        div:first-child {
            background-color: pink;
            float: left;
        }
        div:last-child {
            background-color: orange;
            float: right;
        }

    </style>
<body>
    
    <div>我是左护法</div>
    <div>我是右护法</div>
</body>

*拓展内容二:易错点

    翻译以下代码:

<ul>
    <li>
        <a herf=""></a>
        <a herf=""></a>
        <a herf=""></a>
    </li>
</ul>

     li:first-child a {} ===》找到li的第一个中的子元素的a标签

    ② li a:first-child {} ===》找到li中a标签的第一个子元素


*拓展内容三:nth-of-type

    选择器:E:nth-of-type(n) {}

                  仅在父元素的同类型(E)子元素范围内,匹配第n个

    区别:①nth-child {} 直接在所有孩子中找第几个子元素;

               ②nth-of-tyoe(n) {} 先找对应的类型,再从中找第几个。

伪元素

    1.定义:一般页面中的非主体内容可以使用伪元素

    2.区别:①元素:HTML的标签;

                  ②伪元素:由CSS模拟出的标签效果。

伪元素作用
::before在父元素内容的最前面添加一个伪元素
::after在父元素内容的最后添加一个伪元素

    注意点:1.必须设置content属性伪元素才能生效!!

                   2.伪元素默认是行内元素 


运用与实操

    一、新浪导航的设计

    我们若想要得到上述图片的导航,首先应从结构分析开始。

     我们可以看到,该导航为一个大的块元素,即block,其中嵌套着四个相同的小的块元素。同时,因为是导航,所以小的块元素的标签应该为a标签。并且在大的块元素的上方有边框。这样我们就把这个导航的结构分析清楚了。


    接下来就是开始编码。通常情况下,我们编写代码遵循从上到下,从左到右,从外到内的格式,以防出错。

    首先,在一个项目开始之前,我们一般会先将浏览器默认设置的margin和padding去掉。接着,我们开始搭建一个大的块元素,并根据图示给他设置相应的颜色、宽高。

<head>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        div {
            width: 800px;
            height: 40px;
            border-bottom:1px solid #edeef0;
            background-color: wheat;
            border-top: 3px solid orange;

        }
    </style>
</head>
<body>
    <div class="box">
        <a href="">新浪导航</a><a href="">新浪导航新浪导航新浪导航</a><a href="">新浪导航</a><a href="">新浪导航</a>
    </div>
</body>

    接着我们给里面的a标签转换成块级元素以设置属性。就变成了我们想要的新浪导航了。

     .box a {
            width: 80px;
            height: 40px;
            /* background-color: pink; */
            display: inline-block;
            /* 水平居中 */
            text-align: center;
            /* 去掉下划线 */
            text-decoration: none;
            color: #4c4c4c;
            /* 垂直居中 */
            line-height: 40px;
            font-size: 12px;
            
        }
        .box a:hover {
            background-color:aquamarine;
            color: blueviolet;
        }

         但是我们可以拓展一下,如果我们想要的四个小块级元素内容并不相同,例如其中一个内容为“新浪导航新浪导航新浪导航”,结果会是怎样?

         为什么会出现这样的结果?其实很简单。不难发现,我们在代码中规定了小块级元素的宽度,所以超出它的宽度会自动向下填充。所以我们只需要去掉它的设定宽度,然后设定一个padding值即可。

 padding: 0px 20px;
 /* width: 80px; */


二、网页新闻列表案例

     当我们要创建一个这样背景为纯白的项目时,我们可以给他设定一个比较鲜艳的背景颜色,最后项目完成时再将这个背景颜色去掉,方便我们辨认块和编写代码

    与案例一相同,我们从分析结构开始。

    由该图我们可以发现,这是一个大的块级元素包裹着一个无序列表,并且每个li标签里都带着一个可跳转的a标签。

    接下来开始编码。

<head>
    <title>Document</title>
    <style>
        /* 去除默认的边距*/
        * {
            margin: 0;
            padding: 0;
        }
        .box {
            width: 500px;
            height: 400px;
            /* background-color: pink; */
            border: 1px solid #cccccc;
            padding: 41px 30px;
            box-sizing: border-box;
        }
        .box h1 {
            height: 41px;
            /* background-color: pink; */
            border-bottom: 1px solid #ccc;
            /* 自动内减 */
            box-sizing: border-box;
            font-size: 30px;
        }
        
    </style>
</head>
<body>
    <div class="box">
        <h1>最新文章/New Articles</h1>
        <ul>
            <li><a href=""></a>北京招聘网页设计,平面设计</li>
            <li><a href=""></a>体验JavaScript的魅力</li>
            <li><a href=""></a>jQuery时代来临</li>
            <li><a href=""></a>网页设计师的梦想</li>
            <li><a href=""></a>jQuery中的链式编程是什么</li>
        </ul>
    </div>
</body>
</html>

     这样大概框架就构建好了。

    与我们想要的结果看,该图多了小圆点,少了边框线。由之前的学习可知,圆点可以用text-decorate:none去掉;那我们该如何处理边框线呢?不妨将里面的小块级元素设置宽高,并让文本水平、垂直居中,然后设定下边框。这样就得到了结果。

        {
            line-height: 1;
        }
        .box ul {
            list-style: none;
        }
        .box ul li {
            height: 50px;
            border-bottom: 1px dashed #ccc;
            padding-left: 30px;
            line-height: 50px;
        }
        .box li a {
            text-decoration: none;
            font-size: 18px;
            color: #666;
        }

三、浮点的运用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .header {
            height: 40px;
            background-color: #333;
        }
        .nav {
            width: 1226px;
            height: 100px;
            margin: 0 auto;
            background-color: pink;
        }
        .banner {
            width: 1226px;
            height: 460px;
            background-color: yellow;
            margin: 0 auto;
            
        }
        .left {
            float: left;
            height: 460px;
            width: 234px;
            background-color: orange;
        }
        .right {
            float: right;
            width: 992px;
            height: 460px;
            background-color: skyblue;
        }
    </style>
</head>
<body>
    <!-- 网页的头部 -->
    <div class="header"></div>
    <!-- 网页的导航 -->
    <div class="nav"></div>
    <!-- 网页的轮播图 -->
    <div class="banner">
        <div class="left"></div>
        <div class="right"></div>
    </div>
</body>
</html>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .box {
            width: 1226px;
            height: 614px;
            background-color: pink;
            margin: 100px auto;
            
        }
        .left {
            float: left;
            width: 234px;
            height: 614px;
            background-color: #80008080;
        }
        .right {
            float: right;
            width: 978px;
            height: 614px;
           background-color: yellow;
        }
        .item {
            width: 234px;
            height: 300px;
            float: left;
            margin-right: 14px;
            margin-bottom: 14px;
            background-color: skyblue;
        }
        /* 找到第四个和第八个元素 */
        .item:nth-child(4n) {
            margin-right: 0;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="left"></div>
        <div class="right">
            <div class="item"></div>
            <div class="item"></div>
            <div class="item"></div>
            <div class="item"></div>
            <div class="item"></div>
            <div class="item"></div>
            <div class="item"></div>
            <div class="item"></div>
        </div>
    </div>
</body>
</html>

     最后给大家推荐一个学习前端的博主。前端黑马教学icon-default.png?t=N7T8https://www.bilibili.com/video/BV1cf4y1j7hL/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值