CSS3

2024-06-16 01:06:31 前端知识 前端哥 896 622 我要收藏

一、CSS3选择器

1. 属性选择器

属性选择器是 CSS 中的一种选择器,用于选择具有特定属性或属性值的 HTML 元素。

2. 伪类选择器

伪类选择器是 CSS 中的一种强大工具,用于选择元素的特定状态或位置,而不需要增加额外的类或 ID。它们通常用于处理用户交互或文档结构的变化。

:hover(鼠标悬停)、:focus(获得焦点)、:active(被激活)、:nth-child(n)(选择第 n 个子元素)、:first-child(第一个子元素)、:last-child(最后一个子元素)、:not(selector)(不匹配指定选择器的元素)、:checked(被选中的复选框)和 :disabled(禁用的输入元素)

3. 兄弟选择器

在 HTML 中,兄弟标签(或兄弟元素)指的是同一个父元素下的不同元素。这些元素可以是同一类型或不同类型,并且它们共享相同的父元素。使用兄弟选择器,可以在 CSS 中选择这些元素并应用样式。

4. 相邻选择器

二、CSS3属性

1. 盒子模型

CSS3 的盒子模型是理解网页布局和设计的基础概念。它描述了每个元素在网页中占据的空间,包括其内容、内边距、边框和外边距。
内容:实际显示的内容,如文本和图像。可以通过 width 和 height 属性设置。
内边距:内容与边框之间的空间。使用 padding 属性设置,可以分别定义四个方向的内边距(padding-top、padding-right、padding-bottom、padding-left)。
边框:包围内边距和内容的边框。使用 border 属性设置边框的宽度、样式和颜色。
外边距:元素与其他元素之间的空间。使用 margin 属性设置,可以分别定义四个方向的外边距(margin-top、margin-right、margin-bottom、margin-left)。
总宽度 = width + padding + border + margin

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS3 盒子模型</title>
    <style>
        .box {
            width: 200px; /* 内容宽度 */
            padding: 20px; /* 内边距 */
            border: 5px solid black; /* 边框 */
            margin: 10px; /* 外边距 */
            box-sizing: border-box; /* 使用替代盒子模型 */
        }
    </style>
</head>
<body>
    <div class="box">这是一个盒子模型示例。</div>
</body>
</html>

2. 背景图

在 CSS 中,背景图片用于为元素添加视觉效果,可以增强网页的美观性和吸引力。以下是使用背景图片的基本方法和常用属性。

3. 边框背景图

在 CSS 中,可以为元素的边框添加背景图像,这样可以创建丰富的视觉效果。尽管没有直接的 CSS 属性专门用于边框背景图,但可以通过一些技巧来实现类似效果。

4. 文本和盒子阴影

在 CSS 中,阴影效果可以通过 box-shadow 和 text-shadow 属性来实现。这些属性可以为元素和文本添加深度感,从而增强视觉效果。
box-shadow: h-offset v-offset blur-radius spread-radius color inset;
h-offset: 水平偏移量,阴影相对于元素向右的距离(负值表示向左)。
v-offset: 垂直偏移量,阴影相对于元素向下的距离(负值表示向上)。
blur-radius: 模糊半径,值越大,阴影越模糊。
spread-radius: 扩展半径,值为正时阴影扩大,值为负时阴影缩小。
color: 阴影的颜色。
inset: 可选,定义阴影是外部阴影还是内部阴影。


text-shadow: h-offset v-offset blur-radius color;
h-offset: 水平偏移量,阴影相对于文本向右的距离(负值表示向左)。
v-offset: 垂直偏移量,阴影相对于文本向下的距离(负值表示向上)。
blur-radius: 模糊半径,值越大,阴影越模糊。
color: 阴影的颜色。

5. 渐变

在 CSS 中,渐变是一种平滑过渡的颜色效果,可以用于背景、边框等元素。主要有两种类型的渐变:线性渐变和放射渐变。

6. 2d/3d转变

在 CSS 中,2D 和 3D 转变可以用来创建平滑的动画效果,使元素在不同状态之间过渡。以下是如何实现 2D 和 3D 转变的基本概念和示例。

7. 过渡

在 CSS 中,过渡是一个强大的功能,它允许你在元素的状态变化时创建平滑的动画效果。通过定义何时、如何以及延迟应用样式变化,可以增强用户体验。

过渡属性(property):指定要应用过渡效果的 CSS 属性。
持续时间(duration):指定过渡效果持续的时间。
速度曲线(iming-function):定义过渡的速度变化,决定过渡效果的流畅度。
延迟时间(delay):指定在开始过渡之前的等待时间。

transition: property duration timing-function delay;

8. 动画

在 CSS 中,动画用于创建更加复杂的视觉效果,使元素在状态变化时能够进行平滑的过渡。与过渡相比,动画提供了更大的灵活性,可以通过关键帧控制多个样式的变化。

@keyframes: 定义动画的关键帧,描述动画的样式变化。
百分比: 0% 表示动画开始,100% 表示动画结束,中间可以有多个关键帧。
animation-name: 指定动画的名称,引用 @keyframes 的名称。
animation-duration: 定义动画的持续时间(如 2s)。
animation-timing-function: 定义动画的速度曲线,如 linear、ease、ease-in、ease-out 等。
animation-delay: 定义动画开始前的延迟时间(如 0.5s)。
animation-iteration-count: 定义动画播放的次数(如 infinite 表示无限次)。
animation-direction: 定义动画的播放方向,如 normal、reverse、alternate 等。
animation-fill-mode: 定义动画结束后元素的样式状态,如 forwards、backwards、both 等。

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>基本模板</title>
    <style>
        .box{
            width: 100px;
            height: 100px;
            background-color: red;
            /* margin: 100px; */
        }
        /* 动画 */
        /* @-o-keyframes{} 欧胖 */
        /* @-moz-document 名称{} 火狐 */
        /* 定义动画 */
        /* @keyframes animat {
            from{
                margin-left: 0;
            }
            to{
                margin-left: 500px;
            }
        } */
         
        @keyframes animat {
            0%{
                margin-left: 0;
                transform: scale(.5);
            }
            50%{
                margin-left: 500px;
                transform: scale(1);
            }
            100%{
                margin-left: 0px;
                transform: scale(0.5);
            }
        }

        .box-1{
            /* 名称 */
            animation-name: animat;
            /* 持续时间 */
            animation-duration: 2s;
            /* 匀速 */
            animation-timing-function: linear;
            /* 执行次数 */
            animation-iteration-count: infinite;
            /* 结束位置 */
            animation-fill-mode: backwards;
            /* 执行方向 */
            animation-direction: normal;
        }
        .box-1:hover{
            /* 停止动画 */
            animation-play-state: paused;
        }
    </style>
</head>
<body>
    <div class="box box-1"></div>
    <div class="box box-2"></div>


    <script>


    </script>
</body>
</html>

9. 媒体查询

媒体查询是 CSS 中用于响应式设计的强大工具。它允许你根据设备的特性(如屏幕宽度、高度、分辨率等)来应用不同的样式。这使得网页能够在不同设备上(如手机、平板和桌面)表现良好。

min-width: 设备宽度大于等于指定值。
max-width: 设备宽度小于等于指定值。
min-height: 设备高度大于等于指定值。
max-height: 设备高度小于等于指定值。
orientation: 设备方向,例如 portrait(纵向)或 landscape(横向)。

<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>基本模板</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        ul {
            list-style: none;
        }

        button {
            border: 0;
        }

        a {
            color: #000;
            text-decoration: none;
        }

        nav {
            background-color: #ccc;
            position: relative;
        }

        .container {
            width: 90%;
            margin: 0 auto;
        }

        .navbar {
            display: flex;
        }

        .navbar li a {
            display: block;
            padding: 15px 30px;
        }

        .clearfix::after {
            content: "";
            display: block;
            clear: both;
        }

        .btn {
            padding: 10px 30px;
            margin: 6px 15px;
        }

        .btn-toggle {
            float: left;
            display: none;
            cursor: pointer;
        }
        @media (max-width : 770px){
            .container{
                width: 100%;
            }
            .btn-toggle{
                display: block;
            }
            .navbar{
                width: 100%;
                display: none;
                position: absolute;
                top: 44px;
            }
            .navbar li a{
                width: 100%;
                box-sizing: border-box;
                background-color: #ccc;
                border-bottom: 1px solid #fff;
                padding: 10px 30px;
            }
        }
    </style>
</head>

<body>
    <nav class="nav">
        <div class="container">
            <button class="btn btn-toggle">菜单</button>
            <ul class="navbar">
                <li><a href="#">首页</a></li>
                <li><a href="#">公司简介</a></li>
                <li><a href="#">服务案列</a></li>
                <li><a href="#">合作伙伴</a></li>
                <li><a href="#">联系我们</a></li>
            </ul>
        </div>
    </nav>


    <script>
        var btn = document.querySelector(".btn-toggle")
        var navbar = document.querySelector(".navbar")
        var isShow = true
        btn.onclick = function(){
            if(isShow){
                navbar.style.display = "block"
            }
            else{
                navbar.style.display = "none"
            }
            isShow = !isShow
        }
        var chang = function(){
            var width = window.innerWidth
            if(width > 770){
                navbar.style.display = "flex"
            }
            else{
                navbar.style.display = "none"
            }
        }
        window.addEventListener("resize",chang)
        chang()


    </script>
</body>

</html>

上诉代码运行的结果如下:

10. 字体

进入https://www.zhaozi.cn/ 网可以找到不同的字体,可以免费下载字体。

11. 列布局

列布局是网页设计中常用的一种布局方式,可以通过 CSS 的多种方式实现。以下是几种常见的方法来创建列布局,包括使用 Flexbox、CSS Grid 和传统的浮动布局。

12. 弹性布局

弹性布局(Flexbox)是一种一维布局模型,能够在容器内有效地分配空间并对齐元素。它特别适用于需要响应式设计的场景,能够轻松地调整子元素的大小和排列。

display: flex;: 将元素定义为弹性容器。
flex-direction: 定义主轴的方向。
       row(默认):从左到右。
       column:从上到下。
justify-content: 定义主轴上的对齐方式。
       flex-start: 默认,向开始对齐。
       center: 居中对齐。
       space-between: 项目之间均匀分布。
       space-around: 项目之间留出相等的空间。
align-items: 定义交叉轴上的对齐方式。
       stretch(默认):拉伸以填满容器。
       flex-start: 向开始对齐。
      center: 居中对齐。
      flex-end: 向结束对齐。

flex-grow: 定义项目的放大比例。
flex-shrink: 定义项目的缩小比例。
flex-basis: 定义项目在分配多余空间之前的基础大小。

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>弹性布局示例</title>
    <style>
        .container {
            display: flex; /* 创建弹性容器 */
            flex-direction: row; /* 主轴方向为行 */
            justify-content: space-between; /* 项目之间均匀分布 */
            align-items: center; /* 交叉轴居中对齐 */
            height: 100px;
            background-color: #f4f4f4;
            padding: 10px;
        }

        .item {
            flex: 1; /* 每个项目均等分配空间 */
            margin: 0 10px; /* 项目之间的水平间距 */
            padding: 20px;
            background-color: lightcoral;
            text-align: center;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">项目 1</div>
        <div class="item">项目 2</div>
        <div class="item">项目 3</div>
    </div>
</body>
</html>

13. 倒影

-webkit-box-reflect 是一个非标准的 CSS 属性,用于创建元素的倒影效果。它主要在 WebKit 内核的浏览器(如 Safari)中支持。虽然它非常简单易用,但由于其非标准性质,建议在使用时考虑兼容性。

14. 裁剪标签

clip-path 是 CSS 中的一个属性,用于定义一个元素的可见区域,可以用于创建各种形状的裁剪效果。通过设置不同的形状,可以实现独特的视觉效果。

clip-path: <shape> | <url> | none; 

<shape>:可以是各种形状的关键字(如 circle()、ellipse()、polygon()、inset())或 SVG 路径。
<url>:指向 SVG 图形的 URL。
none:表示没有裁剪。

15. 背景模糊

filter 是 CSS 中的一个属性,用于为元素应用各种图形效果,如模糊、亮度、对比度、灰度等。这个属性可以用于图像、文本或任何其他 HTML 元素,以实现不同的视觉效果

16. 网格布局

网格布局是 CSS 中一种强大的布局系统,允许开发者以二维方式排列和对齐元素。与 Flexbox 相比,Grid 更适合处理复杂的布局。

grid-template-rows:定义网格的行模式。
grid-template-columns:定义网格的列模式
align-content:控制网格内容在交叉轴方向(垂直)上的对齐方式。
row-gap:设置行间距
column-gap:设置列间距。

具体代码如下:

<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>基本模板</title>
    
</head>

<body>
    <style>
        ul {
            padding: 0;
            margin: 0;
            list-style: none;
        }

        ul {
            width: 600px;
            height: 400px;
            background-color: #ccc;
            /* 网格系统 */
            /* 把ul标签(父元素)设置成网格容器 */
            display: grid;
            /* 设置两行,每一行高度100px */
            /* grid-template-rows: 100px 100px; */
            /* grid-template-rows: 1fr 1fr; */

            /* 设置两行,每一行高度50px */
            grid-template-rows: repeat(4, 50px);

            /* 设置三列,每一列宽度为150px */
            grid-template-columns: 150px 150px 150px;
            /* 第一列(占2/4) */
            /* 第二列(占1/4) */
            /* 第三列(占1/4) */
            /* grid-template-columns: 1fr 1fr 1fr; */


            /* 设置网格内容水平居中 */
            justify-content: center;
            /* 设置网格内容垂直居中 */
            align-content: center;

            /* 行间距 */
            row-gap: 10px;
            /* 列间距 */
            column-gap: 10px;

            /* 给网格容器划分区域 */
            grid-template-areas: 
                'a   b   c'
                'd   e   f'
                '.   .   .'
                '.   .   .';
        }

        ul li {
            border: 2px solid #f0f0f0;
        }
        .c1 {
            background-color: deeppink;
            /* 根据单元格标记设置子元素的位置 */
            grid-area: f;
        }
        .c6 {
            background-color: deepskyblue;
            /* 根据单元格标记设置子元素的位置 */
            grid-area: a;
        }
    </style>
    <!-- 父元素(网格容器) -->
    <ul>
        <!-- 子元素(单元格) -->
        <li class="c1">1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li class="c6">6</li>

        <li>7</li>
        <li>8</li>
        <li>9</li>
        <li>10</li>
        <li>11</li>
        <li>12</li>
    </ul>

</body>

</html>

转载请注明出处或者链接地址:https://www.qianduange.cn//article/12234.html
标签
评论
发布的文章
大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!