当前位置: 首页 > news >正文

大白话css第五章CSS新特性与前沿技术、跨平台与跨设备适配

大白话css第五章CSS新特性与前沿技术、跨平台与跨设备适配

1. 掌握CSS新特性与前沿技术

容器查询(Container Queries)
  • 解释:以前的媒体查询是根据整个浏览器窗口的大小来改变样式,而容器查询是根据某个元素的容器大小来调整样式。就好比你有一个盒子装着东西,这个盒子变大变小了,里面东西的样式就跟着变,不用管整个房间(浏览器窗口)有多大。
  • 示例
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        /* 定义一个容器,容器查询会基于这个容器的大小 */
       .card-container {
            container-type: inline-size;
            border: 1px solid #ccc;
            padding: 20px;
            margin: 20px;
        }

       .card {
            background-color: #f0f0f0;
            padding: 10px;
        }

        /* 当容器宽度至少为 400px 时,改变卡片样式 */
        @container (min-width: 400px) {
           .card {
                display: flex;
                align-items: center;
            }
        }
    </style>
</head>

<body>
    <div class="card-container">
        <div class="card">
            <img src="example.jpg" alt="示例图片" width="100">
            <p>这是卡片里的文字内容。</p>
        </div>
    </div>
</body>

</html>

在这个例子里,当 .card-container 的宽度达到 400px 及以上时,.card 里的图片和文字会水平排列;宽度小于 400px 时,就还是默认的垂直排列。

CSS 嵌套(Nesting)
  • 解释:以前写 CSS 嵌套样式要写很长的选择器,现在 CSS 嵌套让你可以像写 HTML 嵌套结构那样写 CSS,代码更简洁,也更好理解。
  • 示例
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        nav {
            background-color: #333;
            /* 嵌套写法,直接在 nav 里写子元素样式 */
            a {
                color: white;
                text-decoration: none;
                padding: 10px;

                &:hover {
                    background-color: #555;
                }
            }
        }
    </style>
</head>

<body>
    <nav>
        <a href="#">首页</a>
        <a href="#">产品</a>
        <a href="#">关于我们</a>
    </nav>
</body>

</html>

这里在 nav 选择器里直接嵌套写了 a 标签的样式,& 代表父选择器 nav a,所以 &:hover 就是 nav a:hover 的意思。

2. 跨平台与跨设备适配

响应式与自适应结合
  • 解释:响应式布局是网页根据不同设备屏幕大小自动调整样式,自适应布局是针对不同设备预先做好几套固定的布局。把它们结合起来,能让网页在各种设备上都有最好的显示效果。
  • 示例
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        /* 通用样式 */
       .container {
            display: flex;
            flex-wrap: wrap;
            padding: 20px;
        }

       .item {
            width: 25%;
            padding: 10px;
            box-sizing: border-box;
        }

        /* 小屏幕设备(手机),自适应布局 */
        @media (max-width: 767px) {
           .container {
                display: block;
            }

           .item {
                width: 100%;
            }
        }

        /* 中等屏幕设备(平板),响应式微调 */
        @media (min-width: 768px) and (max-width: 991px) {
           .item {
                width: 50%;
            }
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="item">项目 1</div>
        <div class="item">项目 2</div>
        <div class="item">项目 3</div>
        <div class="item">项目 4</div>
    </div>
</body>

</html>

在这个例子中,大屏幕下项目是四列显示;平板设备时,变成两列显示;手机设备时,变成一列显示,既利用了响应式的灵活性,又针对小屏幕做了自适应调整。

不同操作系统与浏览器适配
  • 解释:不同操作系统(如 Windows、Mac、iOS、Android)和浏览器(如 Chrome、Firefox、Safari)对 CSS 的支持可能有点小差别,要做一些针对性的样式调整,保证网页在各种环境下都正常显示。
  • 示例
/* 针对 Safari 浏览器的样式调整 */
@supports (-webkit-touch-callout: none) {
    /* Safari 是 iOS 系统默认浏览器,这里可以写针对 Safari 的样式 */
    body {
        /* 比如调整字体渲染 */
        -webkit-font-smoothing: antialiased;
    }
}

/* 针对 Firefox 浏览器的样式调整 */
@-moz-document url-prefix() {
    /* 这里写针对 Firefox 的样式 */
    input[type="text"] {
        /* 调整输入框样式 */
        border: 1px solid #bbb;
    }
}

3. 性能极致优化与维护

代码压缩与合并
  • 解释:把 CSS 文件里多余的空格、换行符去掉,还可以把多个 CSS 文件合并成一个,这样能减少浏览器请求文件的次数,加快网页加载速度。
  • 示例
    假设有两个 CSS 文件:
    style1.css
body {
    font-family: Arial, sans-serif;
}

style2.css

h1 {
    color: #333;
}

合并压缩后变成:

body{font-family:Arial,sans-serif}h1{color:#333}
减少重排与重绘
  • 解释:重排就是浏览器重新计算元素的位置和大小,重绘就是重新绘制元素的外观。频繁的重排和重绘会让网页变慢,所以要尽量减少。比如一次性修改元素的多个样式,而不是一个一个改。
  • 示例
<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
       .box {
            width: 100px;
            height: 100px;
            background-color: red;
        }

       .new-style {
            width: 200px;
            height: 200px;
            background-color: blue;
        }
    </style>
</head>

<body>
    <div class="box" id="myBox"></div>
    <script>
        const box = document.getElementById('myBox');
        // 一次性添加新样式类,减少重排重绘
        box.classList.add('new-style');
    </script>
</body>

</html>

这里通过一次性添加 new-style 类,而不是分别修改 widthheightbackground-color,减少了重排和重绘的次数。

用代码示例介绍如何使用CSS变量?

咱先来说说啥是 CSS 变量。CSS 变量就像是给一个特定的样式值取了个名字,以后想用这个值的时候,直接喊这个名字就行,不用每次都重复写那个具体的值。这样一来,要是哪天你想改这个值,只需要在定义名字的地方改一次,所有用这个名字的地方都会跟着变,特别方便。

1. 定义 CSS 变量

咱们先看看怎么定义 CSS 变量。一般我们会把变量定义在 :root 里面,:root 就相当于整个网页的“老大”,在这儿定义的变量,整个网页都能用到。

:root {
    --main-color: #ff6600;  /* 定义一个叫 --main-color 的变量,值是橙色 */
    --font-size-big: 24px;  /* 定义一个叫 --font-size-big 的变量,值是 24 像素 */
}

在上面的代码里,--main-color--font-size-big 就是我们定义的变量。变量名前面必须有两个短横线 --,后面冒号跟着的就是变量的值。

2. 使用 CSS 变量

定义好变量后,怎么用呢?这就得用到 var() 这个东西啦。var() 就像是一个“传话员”,能把变量的值“传”到需要的地方。

body {
    color: var(--main-color);  /* 把 body 里面文字的颜色设置成 --main-color 变量的值,也就是橙色 */
    font-size: var(--font-size-big);  /* 把 body 里面文字的大小设置成 --font-size-big 变量的值,也就是 24 像素 */
}

h1 {
    background-color: var(--main-color);  /* 把 h1 标题的背景颜色设置成 --main-color 变量的值,还是橙色 */
}

在这段代码里,var(--main-color) 就代表我们之前定义的橙色,var(--font-size-big) 就代表 24 像素。这样写是不是比每次都写具体的颜色代码和像素值方便多啦?

3. 完整的 HTML 和 CSS 示例

下面是一个完整的例子,把 HTML 和 CSS 结合起来,看看实际效果。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        :root {
            --main-color: #ff6600;
            --font-size-big: 24px;
        }

        body {
            color: var(--main-color);
            font-size: var(--font-size-big);
        }

        h1 {
            background-color: var(--main-color);
            color: white;
        }
    </style>
</head>

<body>
    <h1>这是一个标题</h1>
    <p>这是一段正文内容。</p>
</body>

</html>

在这个例子里,网页的标题背景颜色和正文文字颜色都会是橙色,标题文字是白色,正文文字大小是 24 像素。要是你哪天想把橙色换成蓝色,只需要把 :root--main-color 的值改成蓝色的代码,比如 #0066ff,整个网页里用到 --main-color 的地方就都变成蓝色啦。

4. 变量的作用域

CSS 变量也有自己的“地盘”,也就是作用域。在 :root 里定义的变量,整个网页都能用,这是全局变量。但你也可以在某个具体的元素里定义变量,这样这个变量就只能在这个元素和它的“孩子”元素里用,这就是局部变量。

:root {
    --global-color: green;  /* 全局变量,整个网页都能用 */
}

article {
    --local-color: purple;  /* 局部变量,只能在 article 元素和它里面的元素用 */
}

body {
    color: var(--global-color);  /* 用全局变量,文字颜色是绿色 */
}

article p {
    color: var(--local-color);  /* 用局部变量,article 里面的段落文字颜色是紫色 */
}

在这个例子里,--global-color 是全局变量,body 元素能用;--local-color 是在 article 里定义的局部变量,只有 article 里面的 p 元素能用。

5. 给变量设置默认值

有时候,变量可能没定义,这时候可以给 var() 传个默认值,万一变量不存在,就用这个默认值。

div {
    background-color: var(--maybe-not-defined, lightgray);  /* 如果 --maybe-not-defined 没定义,背景颜色就是浅灰色 */
}

在这个例子里,要是 --maybe-not-defined 这个变量没定义,div 的背景颜色就会是浅灰色。

通过这些例子,你应该对 CSS 变量的使用有个大概的了解啦,以后写 CSS 代码的时候,就可以试试用变量,让代码更简洁、更好维护。

响应式布局的由来与发展

响应式布局的由来

在互联网发展的早期,大家主要用电脑访问网页,而且电脑屏幕尺寸差异不大。所以那时候做网页布局很简单,就按照固定的宽度和高度来设计,所有内容都在这个固定的“框框”里显示得整整齐齐。

可后来科技发展太快啦,各种设备都冒出来了,像手机、平板,它们的屏幕大小和电脑完全不一样,有大有小,比例也各不相同。要是还沿用以前固定宽度的布局,在手机或者平板上看网页就会出大问题。比如内容显示不全,字小得像蚂蚁,得不停地缩放和滑动屏幕才能看清;或者布局全乱套了,该在左边的跑到右边,该在上面的跑到下面,用户体验差得没法说。

举个例子,一个在电脑上看着特别规整的电商网站,商品图片、价格、介绍都排列得很好。但在手机上打开,可能图片变形,文字挤成一团,根本没法好好浏览商品。为了让用户不管用啥设备都能舒服地看网页,响应式布局就被发明出来啦。它能让网页根据不同设备的屏幕大小、分辨率自动调整布局和样式,就像给网页装了个“智能脑袋”,能自己适应各种环境。

响应式布局的未来发展趋势

更智能的自适应

以后的响应式布局会更聪明,它不只是根据屏幕大小调整,还能根据设备的特性和用户的使用习惯来变。比如说,当你用智能手表打开网页,它能自动识别手表屏幕小、触摸操作的特点,把网页内容变得简洁又好操作,让你点几下就能找到想要的信息。

与新兴技术结合

和人工智能、虚拟现实这些新技术结合得更紧密。比如在虚拟现实环境里浏览网页,响应式布局能根据你的视角和动作,实时调整网页的显示,给你特别沉浸式的体验。要是你戴着 VR 眼镜看新闻网页,当你转头或者靠近屏幕,新闻内容的布局和显示方式会自动改变,就像真的在一个立体的新闻空间里一样。

无障碍访问优化

会更加注重无障碍访问设计,让有残疾的人也能轻松使用。比如对于视力不好的人,网页能自动调整文字大小、颜色对比度,还能提供语音朗读功能;对于行动不便只能用键盘操作的人,能优化焦点样式和操作流程,让他们也能流畅地浏览网页。

用代码实现响应式布局

1. 使用媒体查询

媒体查询就像是个“魔法开关”,能根据不同的屏幕尺寸应用不同的 CSS 样式。

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

<head>
    <meta charset="UTF-8">
    <!-- 让网页在移动设备上正确显示 -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        /* 全局样式,所有设备都适用 */
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
        }

        /* 导航栏样式 */
        nav {
            background-color: #333;
            display: flex;
            justify-content: space-around;
            padding: 10px;
        }

        nav a {
            color: white;
            text-decoration: none;
        }

        /* 主体内容样式 */
       .content {
            padding: 20px;
        }

        /* 小屏幕设备(手机) */
        @media (max-width: 767px) {
            nav {
                /* 导航栏变成垂直排列 */
                flex-direction: column;
                align-items: center;
            }

           .content {
                font-size: 14px;
            }
        }

        /* 中等屏幕设备(平板) */
        @media (min-width: 768px) and (max-width: 991px) {
            nav {
                /* 导航栏居中排列 */
                justify-content: center;
            }

           .content {
                font-size: 16px;
            }
        }

        /* 大屏幕设备(电脑) */
        @media (min-width: 992px) {
            nav {
                /* 导航栏均匀分布 */
                justify-content: space-around;
            }

           .content {
                font-size: 18px;
            }
        }
    </style>
</head>

<body>
    <nav>
        <a href="#">首页</a>
        <a href="#">产品</a>
        <a href="#">关于我们</a>
    </nav>
    <div class="content">
        <p>这是网页的主体内容,会根据不同设备屏幕大小调整样式哦。</p>
    </div>
</body>

</html>

在这个例子里,我们用 @media 定义了不同的屏幕尺寸范围,然后在每个范围里修改导航栏和内容的样式。比如在小屏幕(手机)上,导航栏从水平排列变成垂直排列,内容字体变小。

2. 使用弹性布局(Flexbox)

Flexbox 能让元素在容器里灵活排列和伸缩。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        /* 容器样式 */
       .container {
            display: flex;
            /* 允许元素换行 */
            flex-wrap: wrap;
            justify-content: space-around;
            padding: 20px;
        }

        /* 子元素样式 */
       .item {
            width: 200px;
            background-color: #f0f0f0;
            padding: 20px;
            margin: 10px;
        }

        /* 小屏幕设备(手机) */
        @media (max-width: 767px) {
           .item {
                width: 100%;
            }
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="item">项目 1</div>
        <div class="item">项目 2</div>
        <div class="item">项目 3</div>
        <div class="item">项目 4</div>
    </div>
</body>

</html>

这里我们用 display: flex.container 变成弹性容器,里面的 .item 元素会自动排列。在小屏幕上,通过媒体查询让每个 .item 元素宽度变成 100%,实现垂直排列。

3. 使用网格布局(Grid)

Grid 可以创建二维的网格结构,让元素在网格里定位。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        /* 网格容器样式 */
       .grid-container {
            display: grid;
            /* 初始三列布局 */
            grid-template-columns: repeat(3, 1fr);
            gap: 20px;
            padding: 20px;
        }

        /* 网格项样式 */
       .grid-item {
            background-color: #f0f0f0;
            padding: 20px;
        }

        /* 小屏幕设备(手机) */
        @media (max-width: 767px) {
           .grid-container {
                /* 变成一列布局 */
                grid-template-columns: 1fr;
            }
        }

        /* 中等屏幕设备(平板) */
        @media (min-width: 768px) and (max-width: 991px) {
           .grid-container {
                /* 变成两列布局 */
                grid-template-columns: repeat(2, 1fr);
            }
        }
    </style>
</head>

<body>
    <div class="grid-container">
        <div class="grid-item">项目 1</div>
        <div class="grid-item">项目 2</div>
        <div class="grid-item">项目 3</div>
        <div class="grid-item">项目 4</div>
        <div class="grid-item">项目 5</div>
        <div class="grid-item">项目 6</div>
    </div>
</body>

</html>

在这个例子中,我们用 display: grid 创建了一个网格容器,通过 grid-template-columns 定义列的布局。然后根据不同屏幕尺寸,用媒体查询改变列的数量,实现响应式布局。

相关文章:

  • FakeApp 技术浅析(二):生成对抗网络
  • 传承式的传统企业新零售数字化转型的逆袭之路!
  • 在已安装二进制movit2的情况下使用自编译moveit2
  • Redis分布式锁的实现(Redission)
  • 弱监督语义分割学习计划(2)-使用CoT进行Open Vocabulary Label简单实现类激活图
  • 【AD】3-10 原理图PDF导出
  • 【多模态大模型论文精读】MOSHI:双工实时语音对话大模型
  • java之运算符
  • 大白话TypeScript 第九章:TypeScript 项目的优化、测试与发布
  • 计算机网络概述
  • Apache IoTDB 树表双模型直播回顾(下)
  • 专线物流公共服务平台:全面提升专线物流效率
  • 【linux】详谈 环境变量
  • 基于Transformers的文本相似度
  • 小红书自动评论
  • 大模型—如何从huggingface上下载并调用模型
  • 每天一个Flutter开发小项目 (8) : 掌握Flutter网络请求 - 构建每日名言应用
  • RuoYi框架介绍,以及如何基于Python使用RuoYi框架
  • DeepSeek 使用窍门与提示词写法指南
  • Spark基础篇 RDD、DataFrame与DataSet的关系、适用场景与演进趋势
  • html5技术可以制作网站吗/推广app赚佣金接单平台
  • 有哪些网站做二手房好的/营销培训视频课程免费
  • 做移动网站优化软/微信营销软件哪个好用
  • 四站合一网站建设价格/万网域名官网
  • wordpress的插件名/旺道seo营销软件
  • 东莞seo网站建设公司/二级网站怎么做