1.流体布局

它能够根据浏览器窗口的大小自动调整页面元素的宽度,使页面在不同屏幕尺寸下都能保持较好的显示效果。

     特点

元素宽度相对:与固定布局使用固定像素值来设定元素宽度不同,流体布局使用百分比来定义元素的宽度。这样,当浏览器窗口大小发生变化时,元素的宽度会相应地按比例调整。

适应不同屏幕:无论用户使用的是宽屏显示器、普通电脑屏幕、平板电脑还是手机,页面都能自动适应屏幕宽度,合理地展示内容,无需用户手动调整。

    实现方式

使用百分比宽度:这是实现流体布局的核心。例如,将一个div元素的宽度设置为50%,那么它将始终占据其父元素宽度的一半。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <style>
        /* 父容器 */
       .container {
            width: 80%;
            margin: 0 auto;
            border: 1px solid #ccc;
        }
        /* 子元素 */
       .box {
            width: 50%;
            float: left;
            box-sizing: border-box;
            border: 1px solid #f00;
            padding: 10px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box">这是一个流体布局的盒子1</div>
        <div class="box">这是一个流体布局的盒子2</div>
    </div>
</body>
</html>

媒体查询:结合媒体查询,可以根据不同的屏幕尺寸和设备特性,对页面布局进行更细致的调整。例如,在屏幕宽度小于600px时,将两列布局改为单列布局。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <style>
       .container {
            width: 80%;
            margin: 0 auto;
            border: 1px solid #ccc;
        }
       .box {
            width: 50%;
            float: left;
            box-sizing: border-box;
            border: 1px solid #f00;
            padding: 10px;
        }
        /* 屏幕宽度小于600px时的样式 */
        @media (max-width: 600px) {
          .box {
                width: 100%;
                float: none;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box">这是一个流体布局的盒子1</div>
        <div class="box">这是一个流体布局的盒子2</div>
    </div>
</body>
</html>
      优缺点

优点:提供了较好的用户体验,能适应多种设备,节省开发成本,提高开发效率。

缺点:在某些极端的屏幕尺寸下,可能会出现布局错乱或内容显示不美观的情况。精确控制页面元素的位置和排版较为困难,对于复杂的设计可能无法达到预期效果。

2.弹性图片:

叫响应式图片,是一种能根据不同设备屏幕尺寸、分辨率、像素密度等因素,自动加载合适尺寸和格式图片的技术手段。

  • 实现方式:在网页开发中,主要通过 HTML 的<img>标签的 srcset 属性和 sizes 属性,以及 picture 元素来实现。
    • srcset 属性:可以指定多个不同分辨率的图片路径,浏览器会根据设备的像素密度来选择合适的图片加载。
    • 例如:<img src="small.jpg" srcset="small.jpg 1x, medium.jpg 2x, large.jpg 3x" alt="示例图片">
    • ,这里表示设备像素密度为 1 倍时加载 small.jpg,2 倍时加载 medium.jpg,3 倍时加载 large.jpg。
    • sizes 属性:用于告诉浏览器在不同屏幕宽度下,图片应该占据的空间大小,从而让浏览器根据这个信息选择合适的图片。
    • 比如:<img src="default.jpg" srcset="small.jpg 480w, medium.jpg 800w, large.jpg 1200w" sizes="(max-width: 480px) 100vw, (max-width: 800px) 50vw, 33vw" alt="示例图片">
    • ,这意味着屏幕宽度小于等于 480 像素时,图片宽度为 100 视口宽度(vw),此时浏览器可能选择 small.jpg;屏幕宽度在 481 - 800 像素之间,图片宽度为 50vw,可能选择 medium.jpg;屏幕宽度大于 800 像素,图片宽度为 33vw,可能选择 large.jpg 。
    • picture 元素:提供了更灵活的图片选择方式,可以根据多种条件(如不同的媒体查询、图片格式支持情况等)来选择要显示的图片。例如:
<picture>
    <source media="(min-width: 800px)" srcset="large.jpg">
    <source media="(min-width: 480px)" srcset="medium.jpg">
    <img src="small.jpg" alt="示例图片">
</picture>

这段代码表示屏幕宽度大于等于 800 像素时显示 large.jpg,在 480 - 799 像素之间显示 medium.jpg,小于 480 像素时显示 small.jpg。

3.CSS 媒体查询:

是 CSS3 中引入的一项功能,它允许你根据设备的特性(如屏幕尺寸、分辨率、设备方向等)来应用不同的 CSS 样式。这使得网页能够根据不同的设备环境进行自适应调整,提供更好的用户体验。

基本语法

媒体查询由一个媒体类型和零个或多个检查特定媒体特征的表达式组成。语法如下:

@media media-type and (media-feature) {
    /* CSS 样式 */
}

  • media-type:指定媒体类型,如 screen(用于屏幕设备)、print(用于打印预览)、speech(用于屏幕阅读器等发声设备)。
  • media-feature:是媒体特性表达式,用来指定具体的设备特征,如 width(屏幕宽度)、height(屏幕高度)、device-pixel-ratio(设备像素比)等。
示例

 1.根据屏幕宽度应用不同样式

/* 当屏幕宽度小于等于 600px 时应用以下样式 */
@media screen and (max-width: 600px) {
    body {
        background-color: lightblue;
    }
}

/* 当屏幕宽度大于 600px 时应用以下样式 */
@media screen and (min-width: 601px) {
    body {
        background-color: lightgreen;
    }
}

2.根据设备方向应用不同样式

/* 当设备处于横屏模式时应用以下样式 */
@media screen and (orientation: landscape) {
    body {
        font-size: 20px;
    }
}

/* 当设备处于竖屏模式时应用以下样式 */
@media screen and (orientation: portrait) {
    body {
        font-size: 16px;
    }
}

3.根据设备像素比应用不同样式

/* 当设备像素比大于等于 2 时应用以下样式,适用于高清屏幕 */
@media screen and (min-device-pixel-ratio: 2) {
    img {
        /* 使用高清图片 */
        background-image: url('high-res-image.jpg');
    }
}
逻辑操作符

可以使用逻辑操作符来组合多个媒体特性表达式:

  • and:用于连接多个媒体特性表达式,所有表达式都必须为真时,媒体查询才为真。例如:@media screen and (min-width: 768px) and (max-width: 1024px)
  • not:用于否定整个媒体查询。例如:@media not screen and (max-width: 600px),表示除了屏幕宽度小于等于 600px 的屏幕设备之外的其他设备。
  • or:连接多个媒体查询,只要其中一个媒体查询为真,整个查询就为真。例如:@media screen and (max-width: 600px) or print and (max-width: 600px)
媒体查询在样式表中的使用方式

  1. 直接在 CSS 文件中使用:如上述示例,直接在 CSS 文件中编写媒体查询。
  2. 使用 <link> 标签的媒体属性:在 HTML 的 <link> 标签中,可以通过 media 属性指定媒体查询条件,加载不同的样式表。
<link rel="stylesheet" media="screen and (max-width: 600px)" href="styles-mobile.css">
<link rel="stylesheet" media="screen and (min-width: 601px)" href="styles-desktop.css">

媒体查询是实现响应式网页设计的重要工具,通过合理运用它,可以使网页在各种设备上都能呈现出最佳的视觉效果和用户体验。

4.可伸缩的字体(也被称为响应式字体)

指的是能够根据不同的设备屏幕大小、分辨率或用户设定自动调整大小的字体。这种字体技术有助于在各种显示环境下保持良好的可读性和视觉效果,提升用户体验。以下是实现可伸缩字体的一些常见方法:

使用相对单位

  • em 单位em 是相对于父元素字体大小的单位。如果父元素的字体大小发生变化,子元素中以 em 为单位设置的字体大小也会相应改变。例如:
body {
    font-size: 16px; /* 浏览器默认字体大小通常是 16px */
}
h1 {
    font-size: 2em; /* 相对于 body 的字体大小,此时 h1 字体大小为 32px */
}

  • rem 单位rem 是相对于根元素(即 html 元素)字体大小的单位。这意味着无论元素嵌套多深,只要根元素的字体大小确定,使用 rem 作为单位的字体大小就会统一按照根元素的字体大小进行缩放。例如:
html {
    font-size: 16px;
}
p {
    font-size: 1.2rem; /* 相对于 html 元素,字体大小为 19.2px */
}
使用 vw 和 vh 单位

vw(视口宽度的百分比)和 vh(视口高度的百分比)是相对于视口尺寸的单位。视口是浏览器窗口的可见区域。1vw 等于视口宽度的 1%,1vh 等于视口高度的 1%。通过使用 vw 和 vh 单位,可以使字体大小根据视口大小进行伸缩。例如:

h2 {
    font-size: 3vw; /* 字体大小会随着视口宽度的变化而变化 */
}
使用媒体查询

结合媒体查询,可以根据不同的屏幕尺寸范围设置不同的字体大小。例如:

/* 屏幕宽度小于 600px 时 */
@media (max-width: 600px) {
    body {
        font-size: 14px;
    }
}
/* 屏幕宽度在 600px 到 992px 之间时 */
@media (min-width: 601px) and (max-width: 992px) {
    body {
        font-size: 16px;
    }
}
/* 屏幕宽度大于 992px 时 */
@media (min-width: 993px) {
    body {
        font-size: 18px;
    }
}
使用 CSS 变量

CSS 变量可以存储和复用值,也可以用于实现可伸缩字体。通过在不同的媒体查询中改变 CSS 变量的值,从而改变字体大小。例如:

:root {
    --base-font-size: 16px;
}
body {
    font-size: var(--base-font-size);
}
@media (max-width: 600px) {
    :root {
        --base-font-size: 14px;
    }
}
@media (min-width: 992px) {
    :root {
        --base-font-size: 18px;
    }
}
使用 JavaScript

通过 JavaScript 获取设备的屏幕信息,动态地修改字体大小。例如:

<!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-size: 16px;
        }
    </style>
</head>
<body>
    <script>
        function setFontSize() {
            const screenWidth = window.innerWidth;
            let fontSize;
            if (screenWidth < 600) {
                fontSize = 14;
            } else if (screenWidth < 992) {
                fontSize = 16;
            } else {
                fontSize = 18;
            }
            document.body.style.fontSize = fontSize + 'px';
        }
        window.addEventListener('load', setFontSize);
        window.addEventListener('resize', setFontSize);
    </script>
</body>
</html>

setFontSize 函数根据屏幕宽度计算合适的字体大小,然后设置到 body 元素上。load 事件确保在页面加载完成后执行一次该函数,resize 事件则在用户调整窗口大小时重新执行该函数,以保证字体大小始终适应屏幕尺寸。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐