响应式布局

news2024/9/21 15:31:50

文章目录

  • 响应式布局
    • 概述
    • viewport 视口
    • CSS 常用单位
    • CSS 媒体查询
      • 语法
      • 直接使用
      • 使用style标签
      • 使用link引入
    • 自适应布局
    • 栅格系统
    • 响应式布局案例
    • rem+媒体查询

响应式布局

概述

响应式布局是指网站或应用程序可以自适应不同的屏幕尺寸和设备类型,简而言之就是一个网站兼容多种终端。

viewport 视口

  • viewport:视口,控制页面的尺寸和缩放。
  • width:设置视口的宽度,可以指定一个具体的值,如600,可以是由关键字组成的特殊值,如 device-width 就表示设备的宽度。
  • initial-scale:初始缩放比例,也就是页面第一次加载时的缩放比例。
  • minimum-scale:表示允许用户缩放的最大比例,范围0~10.0。
  • maximum-scale:表示允许用户缩放的最小比例,范围0~10.0。
  • user-scalable:表示用户是否可以手动缩放,yes表示允许,no表示禁止。
<meta name="viewport"
			content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />

CSS 常用单位

单位说明
px像素。在大多数情况下,1像素等于1个显示器上的物理像素。例如,如果您将一个元素的宽度设置为100px,则它将在屏幕上占据100个像素的宽度。
%百分比。百分比是相对于父元素的单位。例如,如果您将一个元素的宽度设置为50%,则它将占据其父元素宽度的50%。
emem是相对于元素的字体大小的单位。例如,如果您将一个元素的字体大小设置为16px,则1em等于16px。如果您将一个元素的宽度设置为2em,则它将占据其父元素字体大小的2倍的宽度。
remrem是相对于根元素(即HTML元素)的字体大小的单位。例如,如果您将根元素的字体大小设置为16px,则1rem等于16px。如果您将一个元素的宽度设置为2rem,则它将占据根元素字体大小的2倍的宽度。
vw和vhvw和vh是相对于视口宽度和高度的单位。例如,如果您将一个元素的宽度设置为50vw,则它将占据视口宽度的50%。

CSS 媒体查询

CSS 媒体查询可以根据指定的条件,针对不同的媒体类型(screen print)定义不同的 CSS 样式。

语法

媒体类型说明
all默认值,宿友设备
screen屏幕设备
print打印设备
speech屏幕阅读器,一般供残障人士使用
媒体逻辑说明
and
,
not

直接使用

场景:当屏幕大于等于400px时,一行显示3个;当屏幕大于等于300px并且小于等于399px时,一行显示2个;当屏幕小于等于299px时,一行显示1个。

在这里插入图片描述

<!doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport"
			content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
		<title>响应式布局</title>
		<style>
			#div0 {
				width: 100%;
				height: 500px;
			}

			#div0 div {
				float: left;
				height: 100px;
			}

			#div0 div:first-child {
				background-color: red;
			}

			#div0 div:nth-child(2) {
				background-color: green;
			}

			#div0 div:last-child {
				background-color: blue;
			}

			/* >=400px */
			@media screen and (min-width:400px) {
				#div0 div {
					width: 33.3%;
				}
			}

			/* >=300px 并且 <=399px */
			@media screen and (min-width:300px) and (max-width:399px) {
				#div0 div {
					width: 50%;
				}
			}

			/* <=299px */
			@media screen and (max-width:299px) {
				#div0 div {
					width: 100%;
				}
			}
		</style>
	</head>
	<body>
		<div id="div0">
			<div></div>
			<div></div>
			<div></div>
		</div>
	</body>
</html>

使用style标签

<head>
    <meta charset="utf-8">
    <meta name="viewport"
          content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title>响应式布局</title>
    <style>
        #div0 {
            width: 100%;
            height: 500px;
        }

        #div0 div {
            float: left;
            height: 100px;
        }

        #div0 div:first-child {
            background-color: red;
        }

        #div0 div:nth-child(2) {
            background-color: green;
        }

        #div0 div:last-child {
            background-color: blue;
        }
    </style>
    <!-- >=400px -->
    <style media="screen and (min-width:400px)">
        #div0 div {
            width: 33.3%;
        }
    </style>
    <!-- >=300px 并且 <=399px -->
    <style media="screen and (min-width:300px) and (max-width:399px)">
        #div0 div {
            width: 50%;
        }
    </style>
    <!-- <=299px -->
    <style media="screen and (max-width:299px)">
        #div0 div {
            width: 100%;
        }
    </style>
</head>

使用link引入

<head>
    <meta charset="utf-8">
    <meta name="viewport"
          content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title>响应式布局</title>
    <style>
        #div0 {
            width: 100%;
            height: 500px;
        }

        #div0 div {
            float: left;
            height: 100px;
        }

        #div0 div:first-child {
            background-color: red;
        }

        #div0 div:nth-child(2) {
            background-color: green;
        }

        #div0 div:last-child {
            background-color: blue;
        }
    </style>
    <!-- 大于等于400px -->
    <link rel="stylesheet" href="css/css1.css" media="screen and (min-width:400px)">
    <!-- 大于等于300px,并且小于等于399px -->
    <link rel="stylesheet" href="css/css2.css" media="screen and (min-width:300px) and (max-width:399px)">
    <!-- 小于等于299px -->
    <link rel="stylesheet" href="css/css3.css" media="screen and (max-width:299px)">
</head>

css1.css:

#div0 div {
	width: 33.3%;
}

css2.css

#div0 div {
	width: 50%;
}

css3.css

#div0 div {
	width: 100%;
}

自适应布局

根据判断不同设备平台跳转不同的页面。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>自适应布局</title>
		<script>
			var redirect = () => {
				//获取设备信息
				let userAgent = navigator.userAgent.toLowerCase();
				let device = /ipad|iphone|midp|rv: 1.2.3.4|ucweb|android|windows ce|windows mobile/;

				if (device.test(userAgent)) {
					window.location.href = "mobile.html";
				} else {
					window.location.href = "pc.html";
				}
			}
			redirect();
		</script>
	</head>
	<body>
	</body>
</html>

栅格系统

栅格系统是一种用于响应式网页设计的布局系统,它将页面分成若干列和行,使得页面可以在不同设备上以不同的屏幕尺寸和分辨率正确显示。

在栅格系统中,页面被分成若干列,每列的宽度可以是固定的像素值,也可以是相对于父元素的百分比值。每行可以包含若干列,每列之间可以设置间距和偏移量。通过使用栅格系统,可以轻松地创建响应式布局,使得页面可以在不同设备上以正确的大小和比例显示。

栅格系统通常使用CSS框架(如Bootstrap)来实现。

Bootstrap中的栅格系统:

在这里插入图片描述

使用:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }
    </style>
    <link
      href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css"
      rel="stylesheet"
      integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD"
      crossorigin="anonymous" />
    <style>
      .container {
        margin-top: 50px;
        background-color: #eee;
      }
      div[class*="col"] {
        padding-top: 10px;
        padding-bottom: 10px;
        background-color: rgba(86, 61, 124, 0.15);
        border: 1px solid rgba(86, 61, 124, 0.2);
      }
    </style>
  </head>
  <body>
    <div class="container text-center">
      <div class="row">
        <div class="col col-12 col-sm-6 col-md-3 col-lg-2 col-xl-1">1</div>
        <div class="col col-12 col-sm-6 col-md-3 col-lg-2 col-xl-1">2</div>
        <div class="col col-12 col-sm-6 col-md-3 col-lg-2 col-xl-1">3</div>
        <div class="col col-12 col-sm-6 col-md-3 col-lg-2 col-xl-1">4</div>
        <div class="col col-12 col-sm-6 col-md-3 col-lg-2 col-xl-1">5</div>
        <div class="col col-12 col-sm-6 col-md-3 col-lg-2 col-xl-1">6</div>
        <div class="col col-12 col-sm-6 col-md-3 col-lg-2 col-xl-1">7</div>
        <div class="col col-12 col-sm-6 col-md-3 col-lg-2 col-xl-1">8</div>
        <div class="col col-12 col-sm-6 col-md-3 col-lg-2 col-xl-1">9</div>
        <div class="col col-12 col-sm-6 col-md-3 col-lg-2 col-xl-1">10</div>
        <div class="col col-12 col-sm-6 col-md-3 col-lg-2 col-xl-1">11</div>
        <div class="col col-12 col-sm-6 col-md-3 col-lg-2 col-xl-1">12</div>
      </div>
    </div>
    <script
      src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
      integrity="sha384-/mhDoLbDldZc3qpsJHpLogda//BVZbgYuw6kof4u2FrCedxOtgRZDTHgHUhOCVim"
      crossorigin="anonymous"></script>
  </body>
</html>

说明:

  • 特大屏幕(>=1200px):每个单元格占1列。
  • 大屏幕(>=992px):每个单元格占2列。
  • 中等屏幕(>=768):每个单元格占3列。
  • 小屏幕(>=576):每个单元格占6列。
  • 特小屏幕:每个单元格占12列。

在这里插入图片描述

响应式布局案例

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

html:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>响应式布局</title>
    <link rel="stylesheet" href="./css/reset.css" />
    <link rel="stylesheet" href="./css/index.css" />
    <link rel="stylesheet" href="./css/responsive.css" />
  </head>
  <body>
    <div class="header">
      <div class="header_wrap">
        <div href="javascript:;">hello</div>
        <button class="toggle" id="toggle">
          <span class="toggle_line"></span>
          <span class="toggle_line"></span>
          <span class="toggle_line"></span>
        </button>
        <nav class="nav" id="nav">
          <ul class="nav_list">
            <li><a href="javascript:;" class="nav_link">首页</a></li>
            <li><a href="javascript:;" class="nav_link">热门新闻</a></li>
            <li><a href="javascript:;" class="nav_link">职业规划</a></li>
            <li><a href="javascript:;" class="nav_link">专栏/手记/关注</a></li>
            <li><a href="javascript:;" class="nav_link">教程</a></li>
          </ul>
        </nav>
      </div>
    </div>
    <div class="main">
      <ul class="box_list">
        <li class="box_item"><img src="./images/2.jpg" /></li>
        <li class="box_item"><img src="./images/2.jpg" /></li>
        <li class="box_item"><img src="./images/2.jpg" /></li>
        <li class="box_item"><img src="./images/2.jpg" /></li>
        <li class="box_item"><img src="./images/2.jpg" /></li>
        <li class="box_item"><img src="./images/2.jpg" /></li>
        <li class="box_item"><img src="./images/2.jpg" /></li>
      </ul>
    </div>
    <script>
      let toggle = document.getElementById("toggle");
      let nav = document.getElementById("nav");
      toggle.onclick = function () {
        this.classList.toggle("toggle_active");
        nav.classList.toggle("nav_extended");
      };
    </script>
  </body>
</html>

reset.css:

* {
    box-sizing: border-box;
    padding: 0;
    margin: 0;
    -webkit-tap-highlight-color: transparent;
}

ul,
li {
    list-style: none;
}

index.css:

body {
    display: flex;
    flex-direction: column;
    height: 100vh;
}

.header {
    position: relative;
    flex-shrink: 0;
    width: 100%;
    height: 48px;
    border-bottom: 1px solid #e8e8e8;
    background: #fff;
}

.header_wrap {
    display: flex;
    justify-content: space-between;
    align-items: center;
    width: 100%;
    height: 100%;
    padding: 0 20px;
}

.toggle {
    padding: 10px;
    border: none;
    border-radius: 4px;
    background-color: #fff;
}

.toggle .toggle_line {
    display: block;
    width: 24px;
    height: 4px;
    background-color: #363636;
    border-radius: 2px;
}

.toggle_active {
    background-color: #f1f1f1;
}

.toggle_active .toggle_line {
    background-color: #000000;
}

.toggle_line+.toggle_line {
    margin-top: 4px;
}

.nav {
    overflow: hidden;
    position: absolute;
    top: 48px;
    left: 0;
    width: 100%;
    height: 0;
    transition: height 0.5s;
    background-color: #fff;
}

.nav_extended {
    height: 200px;
}

.nav_list .nav_link {
    display: block;
    height: 40px;
    line-height: 40px;
    padding: 0 20px;
    color: #363636;
    font-size: 14px;
    font-weight: bold;
}

.nav_list .nav_link:hover {
    color: red
}

.main {
    flex-grow: 1;
    margin: 20px 0;
}

.main .box_list {
    display: flex;
    flex-wrap: wrap;
    padding-right: 20px;
}

.box_item {
    width: 50%;
    padding: 0 0 10px 20px;
}

.box_item img {
    width: 100%;
}

responsive.css:

.box_item {
    width: 100%;
}

@media(min-width:576px) {
    .box_item {
        width: 50%;
    }
}

@media(min-width:768px) {
    .box_item {
        width: 33.333333%;
    }

    .toggle {
        display: none;
    }

    .nav {
        position: static;
        height: auto;
    }

    .nav .nav_list {
        display: flex;
        justify-content: end;
    }
}

@media(min-width:992px) {
    .box_item {
        width: 25%;
    }
}

@media(min-width:1200px) {
    .box_item {
        width: 16.666667%;
    }
}

rem+媒体查询

代码下载

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/453496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ERTEC200P-2 PROFINET设备完全开发手册(8-2)

8.2 IRT通讯原理及API PROFINET RT通讯的特点&#xff1a; 典型的PROFINET网络如下图所示。 其中&#xff1a; T1: 采样输入 T2: IO背板周期 T3: Profinet I/O 通讯周期 T4: CPU组织块OB1执行周期 T5: Profinet I/O 通讯周期 T6: IO背板周期 T7: 建立输出 在PRO…

Java35-85

这里写目录标题 steam流collect超详解 方法引用静态方法中没有this&#xff01;&#xff01;&#xff01;引用本类或者父类的成员方法 引用构造方法引用方法成员引用数组的构造方法转成自定义对象获取部分属性并收集到数组 异常异常中的常见方法抛出 处理自定义异常File的概述和…

实验8 梯度下降法

1. 实验目的 ① 掌握深度学习框架中的自动求导机制&#xff1b; ② 掌握梯度下降法的基本原理&#xff0c;能够使用梯度下降法求解一元和多元线性回归问题。 2. 实验内容 ① 使用TensorFlow的可训练变量和自动求导机制实现梯度下降法&#xff1b; ② 使用梯度下降法训练线性…

2023-04-23 算法面试中常见的动态规划问题

动态规划 1 什么是动态规划 以菲波那切数列求和为例&#xff0c;通过 1.普通的递归2.引入记忆数组memo3.自下而上地解决问题&#xff0c;即动态规划 动态规划的定义 dynamic programming (also known as dynamic optimization) is a method for solving a complex problem by…

Redis-cli Go代码

Redis-cli Go代码 安装 go get github.com/redis/go-redis/v9 建立连接 import ("context""fmt""github.com/redis/go-redis/v9" )client : redis.NewClient(&redis.Options{Addr: "localhost:6379",Password: "", …

支付宝 网站支付Demo 案例【沙箱环境】IDEA如何配置启动Eclipse项目

前言 在跑支付宝提供的支付案例Demo的时候&#xff0c;遇到了一些问题。支付宝提供的Demo是用Eclipse跑的JAVAEE项目。我想用IDEA来跑一下看看、结果使用习惯了Mavne管理jar包和SpringBoot项目。启动web项目的时候&#xff0c;还遇到一些问题。特此记录遇到的一些小问题。顺便回…

c++之常见函数

文章目录 一、inline函数二、函数重载三、函数模板 一、inline函数 1.当进行函数的调用时&#xff0c;系统要建立栈空间&#xff0c;保护现场&#xff0c;传递参数等等&#xff0c;这些工作都需要系统时间和空间得开销然而inline 函数是以空间换时间的做法&#xff0c;省去调用…

FL Studio 21最新发布的版本主要的新功能

FL Studio 21是最新发布的版本,其主要的新功能有: 1. 全新的UI设计:FL 21采用全新的 FLAT UI 设计风格,简洁而不简单,颜值大大提高。 2. 多窗口支持:可以将FL Studio窗口分别显示在不同的显示器上,实现屏幕间切换和多视图编辑。 3. 混音台增强:新增后置通道、多输入输入和多…

反垃圾邮件产品技术要求和测试评价方法

声明 本文是学习信息安全技术 反垃圾邮件产品技术要求和测试评价方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 反垃圾邮件产品等级划分 根据产品功能要求和安全保证要求的不同&#xff0c;以及反垃圾邮件产品适用应用环境的不同&#xff0c;将…

ROS1学习笔记:常用可视化工具的使用(ubuntu20.04)

参考B站古月居ROS入门21讲&#xff1a;常用可视化工具的实现 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录 一、日志输出工具&#xff1a;rqt_console二、绘制数据曲线&#xff1a;rqt_plot三、 图像渲染工具&#xff1a;rqt_image_view四、图形界面总接口&#xff1a;r…

FE之TSNE:基于MNIST手写数字数据集利用T-SNE/TSNE方法实现高维数据集可视化应(二维可视化和三维可视化)应用案例之详细攻略

FE之TSNE&#xff1a;基于MNIST手写数字数据集利用T-SNE/TSNE方法实现高维数据集可视化应(二维可视化和三维可视化)应用案例之详细攻略 目录 基于MNIST手写数字数据集利用T-SNE/TSNE方法实现高维数据集可视化应(二维可视化和三维可视化)应用案例 # 1、定义数据集 # 2、数据预…

docker部署springboot(jar)项目的方式概括

1、docker挂载目录 实现原理&#xff1a;docker中只需要安装一个JDK镜像&#xff0c;把该镜像的目录挂载到外部的Linux中&#xff0c;如挂载到/usr/data/jar&#xff0c;我们只需要把Jenkins构建的jar文件传输到该目录中&#xff0c;在通过docker命令启动jar即可&#xff1a; …

【代码随想录】刷题Day5

1.链表重复节点删除 82. 删除排序链表中的重复元素 II 前后指针实现 1.做这道题最大的感受就是&#xff1a;不要觉得开辟空间浪费&#xff0c;多用临时变量去记录。越精确越容易成功 2.首先没有节点或者一个节点直接返回 3.因为头部会出现一样元素的情况&#xff0c;以至于我不…

C语言之详解静态变量static

在C语言中static是用来修饰变量和函数的&#xff0c;这篇文章详细介绍了static主要作用&#xff0c;文章中有详细的代码实例&#xff0c;需要的朋友可以参考阅读 在C语言中&#xff1a; static是用来修饰变量和函数的 static主要作用为: 1. 修饰局部变量 - 静态局部变量 2. …

linux软件安装指令---yum和rpm

这里写目录标题 一 yum指令1. yum install 软件名2. yum remove 软件名3 检查已经安装成功的软件 二 rpm指令1 rpm -q2 rpm -qa|less3 rpm -qa| grep python4 搜索文件的详细信息5 查询一个rpm中的包安装到哪里去了6 查询一个文件属于那个包7 软件包的卸载 三 总结四 示范安装 …

【面试系列】四种经典限流算法讲解

固定窗口限流算法 介绍 固定窗口限流算法&#xff08;Fixed Window Rate Limiting Algorithm&#xff09;是一种最简单的限流算法&#xff0c;其原理是在固定时间窗口(单位时间)内限制请求的数量。该算法将时间分成固定的窗口&#xff0c;并在每个窗口内限制请求的数量。具体来…

锦江展焕新演绎,憬黎公寓住造理想

2023年4月19-21日&#xff0c;“万物春生&#xff0c;赴锦程”锦江酒店&#xff08;中国区&#xff09;投资加盟品鉴会&#xff0c;在上海世博展览馆完美收官。这是一场迎着酒店行业复苏浪潮的年度盛会。 插图丨锦江酒店&#xff08;中国区&#xff09; 作为锦江酒店&#xff…

60 openEuler 22.03-LTS 搭建MySQL数据库服务器-安装、运行和卸载

文章目录 60 openEuler 22.03-LTS 搭建MySQL数据库服务器-安装、运行和卸载60.1 安装60.2 运行60.3 卸载 60 openEuler 22.03-LTS 搭建MySQL数据库服务器-安装、运行和卸载 60.1 安装 配置本地yum源&#xff0c;详细信息请参考《openEuler 22.03-LTS 搭建repo服务器》。 清除…

JavaWeb01(WEB环境的搭建)

目录 一.JDK 1.1 JDK是什么? 1.2 如何下载和安装jdk? 1.3 如何配置环境变量? 1.4 如何测试java环境变量是否配置成功? 二.Tomcat 2.1 Tomcat是什么? 2.2 为什么需要使用它? 2.3 如何下载? 2.4 了解Tomcat目录结构 2.5 如何修改Tomcat端口号(0-65535) 2.6 如何使…

Nginx的优化及防盗链

Nginx程序优化 模块 ngx_http_access_module模块 访问模块 ngx_http_auth_basic_module模块 用户访问控制 ngx_http_stub_status_module模块 查看http状态统计模块 ngx_http_gzip_module模块 压缩模块 ngx_http_ssl_module模块 设置http的连接模块 ngx_http_rewrite_mod…