前端响应式布局原理与实践

2023-11-18

前言

作为一个前端开发者,响应式网站开发是必备技能之一。响应式有它的很好的优点,也有它一定的缺点。这就需要我们在开发的时候做出取舍。对于内容较少、主要为展示类网站,故采用响应式;对于内容多,管理类的网站采用分开开发的方式,不同设备采用不同的一套代码。本文会主要探讨响应式布局原理和技巧,并结合实例来加深印象。

响应式与自适应

我们很多人其实把这响应式和自适应两种网站当成一回事,但事实上这两种网站的布局方式是有一定的区别的。我们可以来看看这两种方法的概念以及分别对应解决的问题。

什么是响应式布局?

响应式布局就是一个网站能够兼容多个终端,可以根据屏幕的大小自动调整页面的的展示方式以及布局,我们不用为每一个终端做一个特定的版本。响应式网站的几个标志:

  1. 同时适配PC + 平板 + 手机等;
  2. 标签导航在接近手持终端设备时改变为经典的抽屉式导航;
  3. 网站的布局会根据视口来调整模块的大小和位置;
    在这里插入图片描述

什么是自适应布局?

自适应布局是指网页能够在不同大小的终端设备上自行适应显示,也就是让一个网站在不同大小的设备上显示同一样的页面,让同一个页面适应不同大小屏幕,根据屏幕的大小,自动缩放。自适应布局的几个标志:

  1. 大多只是适配单个终端的主流N个主流视口;
  2. 当视口大小低于设置的最小视口时,界面会出现显示不全,并且出现横向滑动条;
  3. 总体框架不变,横线布局的版块太多会有所减少。
    在这里插入图片描述

如何选择

总的来说,这两种方式的原来是相似的,都是先检测设备,根据不同的设备采用不同的CSS。那开发中我们该如何去选择?这就要结合响应式与自适应的优缺点来看。

响应式布局的优点:
1、灵活性强;2、能够快捷解决多设备显示适用问题。

缺点:
1、效率较低,兼容各设备工作量大;2、代码较为累赘,加载时间会加长;3、在一定程度上改变了网站原有的布局结构。

自适应布局的优点:
1、对网站复杂程度兼容更大;2、代码更高效;3、测试和运营都相对容易和精准。

缺点:
1、同一个网站需要为不同的设备开发不同的页面,增加的开发的成本。

上面两种方法各有自己的优缺点,所以我们在开发的时候,要从实际的项目出发。对于页面不是太复杂的情况下,我们可以利用响应式布局;而对于页面中信息较多,布局较为复杂的情况,我们可以采用自适应布局的方式。

响应式布局设计步骤

介绍完基本的概念,我们来看看响应式布局的基本步骤,主要分为下面几步:
1.设置meta标签

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

2.使用@Media查询来设置样式,这是响应式布局的核心

@media screen and (max-width: 1920px) { ... }

3.设置布局分界点,即通过设置多种视图宽度样式来控制页面布局

@media screen and (max-width: 1920px) { ... }

@media screen and (max-width: 1700px) { ... }

其实还是很简单的,就是在适配的时候稍微有点点繁琐。

布局分界点

对于@Media查询的分界点,这个可以根据自己的项目来调整,设置合适自己项目的布局分界点。在设置分界点时,要注意先后顺序,当使用max-width数值大的在前面,数值小的在后面;当使用min-width时,数值小的放前面,数值大的放后面。下面列出了我在项目开发时所设置的部分布局分界点:

@media screen and (max-width: 1920px) { ... }

@media screen and (max-width: 1700px) { ... }

@media screen and (max-width: 1600px) { ... }

@media screen and (max-width: 1440px) { ... }

@media screen and (max-width: 1280px) { ... }

@media screen and (min-width: 992px) and (max-width: 1200px) { ... }

@media screen and (min-width: 768px) and (max-width: 991px) { ... }

@media screen and (max-width: 767px) { ... }

那我们什么时候用min-width,什么时候用max-width呢?通常来说,如果是移动端优先,则用min-width;如果是PC端优先,则用max-width

布局单位

熟悉常用的布局单位还是很重要的,常用的布局单位包括像素(px),百分比(%),emremvw/vh。我们可以合理的运用这些布局解决方案,来提高我们开发时的效率和质量。

像素

像素是网页布局的基础,一个像素表示计算机屏幕所能显示的最小区域。像素分为两种类型:css像素和物理像素。两者区别如下:

css像素:为web开发者提供,在css中使用的一个抽象单位;
物理像素:只与设备的硬件密度有关,任何设备的物理像素都是固定的。

百分比

当浏览器的宽度或者高度发生变化时,通过百分比单位可以使得浏览器中的组件的宽和高随着浏览器的变化而变化,从而实现响应式的效果。一般我们的直观理解都会认为子元素的百分比完全相对于直接父元素,这种理解没问题,比如heightwidth属性。但是在css的盒模型中不止有heightwidth属性,还有paddingbordermargin等属性,所以这就值得我们去具体分析一下。

我们先写好html代码,然后通过不同的css代码来看看会呈现出什么样的情况:

<div class="parent">
    <div class="child">子元素</div>
</div>

1.子元素的height和width

当子元素的heightwidth使用百分比时,是相对于直接父元素的heightwidth进行变化的。

.parent{
    width: 200px;
    height: 200px;
    background: #aaaaaa;
}
.child{
    width: 50%;
    height: 50%;
    background: red;
}

在这里插入图片描述

2.子元素的top、bottom 、left和right

子元素的topbottom如果设置百分比,则相对于直接非static定位(默认定位)的父元素的高度;
子元素的leftright如果设置百分比,则相对于直接非static定位(默认定位的)父元素的宽度。

.parent{
    width: 200px;
    height: 200px;
    background: #aaaaaa;
    position: relative;
}
.child{
    width: 50%;
    height: 50%;
    background: red;
    position: absolute;
    top: 50%;
    left: 50%;
}

在这里插入图片描述

3.子元素的padding

子元素的padding如果设置百分比,不论是垂直方向或者是水平方向,都相对于直接父亲元素的width,而与父元素的height无关。

.parent{
    width: 300px;
    height: 400px;
    background: #aaaaaa;
}
.child{
    width: 50%;
    height: 50%;
    background: red;
    padding-top: 20%;
    padding-left: 20%;
}

在这里插入图片描述

打开控制台,查看子元素,我们可以看见padding-toppadding-left都为父元素width的20% ——60px:
在这里插入图片描述

4.子元素的margin

子元素的marginpadding是一样的,子元素的margin如果设置成百分比,不论是垂直方向还是水平方向,都相对于直接父元素的width

5.子元素的border-radius

border-radius设置为百分比则是相对于自身的宽度

.parent{
    width: 200px;
    height: 200px;
    background: #aaaaaa;
}
.child{
    width: 50%;
    height: 50%;
    background: red;
    border-radius: 50%;
}

在这里插入图片描述

em和rem

emrem相对于px更具灵活性,他们都是相对长度单位,而他们之间的区别可以用一句话来概括:em相对于父元素,rem相对于根元素。
em是相对于父元素的font-sizerem则是相对于html元素的font-size

vw/vh

vw/vh是与视图窗口有关的单位,vw表示相对于视图窗口的宽度,vh表示相对于视图窗口高度,除了vwvh外,还有vminvmax两个相关的单位。

单位 含义
vw 相对于视窗的宽度,视窗宽度是100vw
vh 相对于视窗的高度,视窗高度是100vh
vmin vw和vh中的较小值
vmax vw和vh中的较大值

这个单位和百分比很类似,但是还是有区别的:

单位 含义
% 大部分相对于祖先元素,也有相对于自身的情况比如(border-radius、translate等)
vw/vm 相对于视窗的尺寸

响应式布局实践

好了,说了这么多,我们现在可以结合上面的理论知识,来完成一个响应式布局的demo。下面我会贴出部分代码来讲一些思路,完整的代码放在了我的github上面。

初始布局

首先,我们进行整体的布局,这个demo主要分为三部分:头部、内容、底部,类似于简单的企业官网。

<!DOCTYPE html>
<html lang="zh-CN">
<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/index.css">
</head>
<body>
<div id="root">
    <!-- 头部 -->
    <header>
        <div class="header-box">
            <div class="logo">
                logo
            </div>
            <nav class="main-nav">
                <ul class="nav-list">
                    <li id="nav-item" class="main-nav-item">
                        <ul class="nav-main-list">
                            <li class="list-item">首页</li>
                            <li class="list-item">文章</li>
                            <li class="list-item">论坛</li>
                            <li class="list-item">娱乐</li>
                            <li class="list-item">联系</li>
                        </ul>
                    </li>
                    <li class="main-nav-login">
                        <div class="login-box">登录 | 注册</div>
                    </li>
                </ul>
            </nav>

        </div>
    </header>

    <!-- 内容 -->
    <div id="container">
        <div class="container-header"></div>
        <div class="content">
            <!-- 内容一-->
            <div class="content-box content-box1">
                <div class="content-box1-text"></div>
                <div class="content-box1-img">
                    <div class="img-radius"></div>
                </div>
            </div>
            <!-- 内容二-->
            <div class="content-box content-box2">
                <div class="content-box2-text"></div>
                <div class="content-box2-text"></div>
                <div class="content-box2-text"></div>
            </div>
            <!-- 内容三-->
            <div class="content-box content-box3">
                <div class="content-box3-text"></div>
                <div class="content-box3-text"></div>
                <div class="content-box3-text"></div>
                <div class="content-box3-text"></div>
                <div class="content-box3-text"></div>
                <div class="content-box3-text"></div>
            </div>
        </div>
    </div>

    <!-- 底部 -->
    <footer></footer>
</div>

</body>
</html>

在这个demo中,最初的css代码是在1920px下进行编写的,这个就是我们的初始样式。
初始样式代码比较长,就不贴在文章里面了,看这里>>> index.css
我们先来看看初始的效果:
在这里插入图片描述
在实际开发的时候,有些模块中包含的内容,使得这些模块不能无限制的进行缩小。所以在index.css的初始布局中,我们对一些模块的大小进行了限制,设置了min-width

中大屏适配

前面我们提到,布局分界点是要根据实际的项目来进行划分的,我针对这个项目进行了以下的划分,大家也可以根据自己的想法来进行划分。

1201px~1280px

我们先看看把宽度调到1201px时会出现什么情况:
在这里插入图片描述
我们可以看见部分模块超出了父元素的宽度,使得页面变得参差不齐了,所以我们就要对布局进行调整了:

@media screen and (max-width: 1280px) {
     /* 内容一  */
    .content-box1{
        flex-wrap: wrap;
        height: 650px;
    }
    .content-box1-text{
        width: 90%;
        margin: 0 auto;
    }
    .content-box1-img{
        display: flex;
        align-items: center;
        margin: 0 auto;
    }
}

再来看布局情况:
在这里插入图片描述

992px~1200px

这时候出现的情况:
在这里插入图片描述
我们看到,布局又混乱了,然后我们需要继续调整布局:

@media screen and (min-width: 992px) and (max-width: 1200px) {
    /* 内容二 */
    .content-box2{
        height: 400px;
    }
    .content-box2-text{
        height: 300px;
        min-width: 200px;
    }

    /* 内容三 */
    .content-box3{
        justify-content: space-around;
    }
}

再来看看布局情况:
在这里插入图片描述

768px~991px

在这个分界点时,同样会出现布局问题,所以要进一步实现调整,因为是重复操作,这里就不贴图和代码了。我们可以重点看看下面的适配。

手机端适配

在boostrap的栅格系统中,把<768px的屏幕归为手机。我们也可以以此作为参考。此时布局调整不仅仅是内容的调整,我们的导航栏也要发生改变——由横向导航栏变为点击出现的纵向导航栏(具体需求,具体实现,这里只是提出一种普遍的变换方法)。如下图所示:
在这里插入图片描述
要想实现上图中的效果我们需要做哪些事情呢?

  1. 写一个按钮,如右图右上角的按钮,样子是不是很熟悉;
  2. 导航条样式重写,由横向导航条变为纵向导航条;
  3. 利用js实现点击按钮,导航条显示与隐藏的切换。

按钮

我们先在类名为nav-list的末尾加入以下HTML代码:

...

<li class="phone-show">
    <div id="nav-btn" class="nav-btn">
        <span></span>
        <span></span>
        <span></span>
    </div>
</li>

...

然后对按钮样式进行美化:

@media screen and (max-width: 767px){
    ...
    .phone-show{
        display: block;
        height: 60px;
        width: 60px;
    }
    .nav-btn{
        height: 100%;
        width: 100%;
        display: flex;
        flex-direction: column;
        flex-wrap: wrap;
        justify-content: space-around;
    }
    .nav-btn span{
        display: inline-block;
        height: 10px;
        width: 60px;
        background: coral;
    }
}

看看效果:
在这里插入图片描述

导航样式修改

这个我们可以巧妙的运用一个相对定位和绝对定位的关系实现导航条样式和位置的修改:

@media screen and (max-width: 767px){
    .header-box{
        position: relative;
    }
    
    ...
    
    /* 手机端样式 */
    .main-nav-item{
        display: none;
        position: absolute;
        width: 10rem;
        right: 0;
        top: 8rem;
        border-radius: 0 0 .5rem .5rem;
    }
    .nav-main-list{
        width: 100%;
        background: #ffffff;
        display: flex;
        flex-direction: row;
        flex-wrap: wrap;
        border-radius: 0 0 .5rem .5rem;
    }
    .list-item{
        width: 100%;
        margin: 0 1rem;
        border-bottom: 1px solid #eeeeee;
    }
}

看看效果:
在这里插入图片描述

导航条显示和隐藏切换

利用js来控制切换的思路很简单,我们在网页打开时,先把导航隐藏掉,然后定义一个变量hide,初始值为true,点击按钮时进行判断:如果hide值为true,则让导航显示;反之隐藏。

let btn = document.getElementById("nav-btn");
let  nav =  document.getElementById("nav-item");

let hide = true;

btn.addEventListener('click', function () {
    if (hide){
        nav.style.display = "block";
        hide = false;
    } else {
        nav.style.display = "none";
        hide = true;
    }
});

在这里插入图片描述
最后再进行一些细节方面的调整,我们的响应式布局demo就初步完成了。我们在日常的开发的时候,一般来讲不会这么简单,所以还是也根据实际情况去进行调整,以满足实际的需求。
完整demo点击这里——demo地址

参考

自适应和响应式的区别有哪些你知道吗?
响应式和自适应有什么区别?
响应式布局的常用解决方案对比(媒体查询、百分比、rem和vw/vh)

最后

文中若有不准确或错误的地方,欢迎指出~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端响应式布局原理与实践 的相关文章

  • 迭代相同的表单元素

    如果一个表单重复具有相同的标签 如何在 JavaScript 中获取它的值
  • 如何使用XPath选择非空段落?

    我想要抓取的网页具有类似的结构 每个都有一个段落是一个问题 一个段落是一个答案 我想抓取每个问题和答案并将它们存储在两个项目中 问题是 在某些页面上 问题和答案分别是 xxx p 1 and xxx p 2 但在其他页面上 xxx p 1
  • jQuery 变量在定义时声称它是未定义的

    我试图在同一页面上有两个自动填充文本框 一个用于手机型号 input1 一个用于固件 input2 当两者都填充时 我希望显示一个带有ID input1input2 的div 但是当在input1 中输入值时 它声称phone 的变量未定义
  • 未捕获的 TypeMismatchError:无法在“CanvasRenderingContext2D”上执行“drawImage”

    我对以下代码片段有疑问 var o inserted motive find span contains document documentElement o 0 b fillText m i h b drawImage d i h e f
  • Gmail 无法在电子邮件上正确呈现字体

    我已经建立了一个 html 电子邮件并使用了 Google 字体 我已使用以下方法将字体包含在 head 标签中 if mso endif 并使用字体 即我这样做了
  • CSS使背景图像使用字体字符

    我想使用字体字符 例如来自 font awesome 作为输入元素的背景图像
  • TDD/测试 CSS 和 HTML? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有没有办法测试 CSS 和 HTML 例如 有时某些通知会受到某些 CSS 更改的影响 我不想每次进行更改时都手动测试所有通知 Tha
  • 为什么网格项目不居中?

    由于某种原因 两个输入范围使网格中的前两项偏离中心 我假设这是因为它们的影子 DOM 样式 事实真的是这样吗 有谁知道为什么范围使项目 A 和 B 偏离中心 这是一个代码笔 https codepen io tOkyO1 pen QOeKL
  • 在按钮之间添加空间?

    嗨 我这里有一个代码 除了一件事之外 一切都很完美 代码中每个按钮之间没有空格 我尝试过 margin 但不幸的是它是一个无序列表 所以我有点困惑 我将添加或替换什么以在两个按钮之间留出空间 帮助
  • 用于渲染 html 子集的 Django templatetag

    我有一些 html 在本例中是通过 TinyMCE 创建的 我想将其添加到页面中 但是 出于安全原因 我不想只打印用户输入的所有内容 有谁知道模板标签 最好是过滤器 只允许呈现 html 的安全子集 我意识到 Markdown 和其他人就是
  • GWT 主题/模板 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 GWT 开发一个应用程序 尽管 GWT 是基于 JAVA 的媒介 但外观和感觉只能通过 CS
  • 引导标签输入宽度

    我正在尝试使用引导程序标签输入 http timschlechter github io bootstrap tagsinput examples 以模态中包含的形式 像这样 div class form group div
  • 使 Material UI Grid 项目的子项拉伸以适合父容器的剩余高度

    1 现状 我有一个包含 4 个网格项的 Material UI 网格容器 每个 Grid 项中都有一个 Typography 组件 其中包含标题和包含一些内容的 Card 如下所示 2 期望的外观 我希望卡片填充网格项目的剩余高度并且不超过
  • 如何防止弹性项目高度因其内容而溢出[重复]

    这个问题在这里已经有答案了 我刚刚开始学习 Flex 到目前为止我印象深刻 但是 我对包含页眉 页脚和三列的全页应用程序遇到了问题 第一列包含一个项目列表 由于我无法为其父级设置固定高度 因此每次列表增长时 它都会将页脚向下推 这是一个带有
  • 使用 CSS 覆盖透明 div 中的不透明文本

    我试图使透明 div 内的文本没有不透明度 也就是全黑 div style background 3cc p style background 000 This text should be all black p div 只用 CSS 就
  • Outlook 2013 渲染问题:嵌套表格截断相邻文本

    在开发 html 电子邮件通讯时 我经常使用类似于以下的结构 table width 244 border 0 cellpadding 0 cellspacing 0 tr td table border 0 align left tbod
  • 没有类的 CSS 选择器

    我正在使用选择器来选择不具有一个类的所有元素 list th not foo some rules 我怎样才能将其应用到多个班级 list th not foo list th not bar some rules 上面的 CSS 当然不会
  • PHP 共享标头而不使用服务器端脚本?

    到目前为止我总是通过 PHP 解决简单的问题 您有一个包含页眉 菜单 页脚和内容字段的网站 每个页面的页眉 菜单和页脚通常是相同的 在没有 PHP 或任何其他服务器端语言的情况下 如何使页眉 菜单和页脚数据仅存在于一个文件中 例如 您不会有
  • 水平对齐输入字段

    我正在尝试获取一个输入字段 并且它与同一水平线上的关联提交按钮相关 但事实证明这是一个挑战 这是我的代码
  • 在webview android中加载本地html文件

    我正在尝试在 android 的 webview 中加载 html 文件的内容 但是 它给了我 网页不可用错误 如果我尝试使用谷歌或雅虎等网站 它们就会起作用 html文件位于src gt main gt assests gt index

随机推荐

  • 卷首语:我决定从零开始,用C++手写自己的键值数据库

    2023年5月1日 周一下午 我为什么要自己写一个 今天中午 我在CSDN上提出了一个关于如何学习C 的观点 通过用C 造东西来学习C 于是为了实践这个观点 我决定用C 手写一个简单的属于自己的键值数据库 我会把这个键值库写到什么程度 只要
  • 双色球笔记2--保存所有双色球号码到MySQL

    双色球笔记2 保存所有双色球号码到MySQL 1 功能 本代码主要将双色球所有数据保存到mysql数据库 双色球总种类为17721088 笔者8G I7笔记本大约插入了10天 下面代码中包含两中方法 Insert SSQ 和Insert S
  • springcloud集成apollo

    apollo 配置中心 官网 Apollo 官网有设计 部署说明 系统架构图 github开源官网https github com apolloconfig apollo releases releases上下载后发现有这4个文件 apol
  • Docker学习笔记(二):Docker镜像原理、Docker数据卷(挂载)作用和使用

    Docker镜像详解 1 镜像是什么 镜像是一种轻量级 可执行的独立软件包 用来打包软件运行环境和基于运行环境开发的软件 它包含运行某个软件所需的所有内容 包括代码 运行时 库 环境变量和配置文件 所有应用打包成docker镜像 就可以直接
  • 少儿创意学编程(Scratch基础篇):第4课——聊天机器人

    少儿创意学编程 Scratch基础篇 参考了英国公益组织发起的 code club 代码俱乐部 少儿免费学编程活动 愿为中国的少儿创意编程教育尽微薄之力 对国内的家长 信息教师和相关教育机构有所帮助 共同促进软件素质教育的发展 本课程以Sc
  • Qt4.8.2 QPushButton按钮贴图以及实现按钮的几种常用状态

    一 继承自QPushButton 不改变图片本身 而是通过改变按钮背景的透明度 myPushButton h cpp view plain copy ifndef MYPUSHBUTTON H define MYPUSHBUTTON H i
  • 支持向量机类实现

    import os import jieba import numpy as np from sklearn model selection import train test split cross val score from skle
  • 5分钟带你了解写博客的重要性——博客的大门为你敞开

    文章目录 前言 为什么要写博客 写博客有什么用 1 检验自己对知识是否真的理解 2 积累知识并让自己变成合规的 卷王 3 讨论反思 收获新认知 4 提升思维逻辑力和文字组织力
  • Docker运行MySQL容器

    目录 一 宿主机与容器之间的文件拷贝 1 利用MySQL镜像安装MySQL服务 2 容器中怎么上传项目 文件 3 从容器中拷贝文件到宿主机 4 从宿主机拷贝文件到容器 二 数据卷 三 数据卷容器 四 Dockerfile 本次目标 数据卷
  • TCP发送数据流程详解

    B S通信简述 整个计算机网络的实现体现为协议的实现 TCP IP协议是Internet的核心协议 HTTP协议是比TCP更高层次的应用层协议 HTTP HyperText Transfer Protocol 超文本传输协议 是互联网上应用
  • Eclipse 版本和JDK对应关系

    1 JDK最新版本下载地址 http www oracle com technetwork java javase downloads index html 2 JDK历史版本下载地址 http www oracle com technet
  • 「VS Code」Visual Studio Code 菜鸟教程:从入门到精通

    VS Code Visual Studio Code 教程 从入门到精通 日志 2020 04 26 介绍如何配置 LaTeX 环境 2019 09 06 更新了选择默认终端的方法 在胶片中补全列选方式 2019 05 26 补全了全文的剩
  • 在Unity中进行单例的动态脚本加载

    首先调用Unity提供的注释可以在点下Play之后 在游戏真正启动前去执行一些脚本 要注意执行脚本要放在Assets Editor下 RuntimeInitializeOnLoadMethod RuntimeInitializeLoadTy
  • 一文弄懂循环链表、双向链表、静态链表

    循环链表 双向链表 静态链表 三遍定律 理解了单链表本文的理解易如反掌 单链表请点击这里 理解了单链表本文的理解易如反掌 单链表请点击这里 理解了单链表本文的理解易如反掌 单链表请点击这里 1 循环链表 将单链表中终端结点的指针端由空指针改
  • QImage No such file or directory

    在Qtpro文件中添加Qt gui QImage的帮助中写的很清楚 Header include
  • Stm32旧版库函数3——nrf24l01 16位数据 51单片机发送与stm32接收

    51代码 include
  • WAP调用微信支付https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1

    必看 要用WAP版的微信支付 首先你得有腾讯公司的邀请资格 要是没有 那么就不用往下看了 具体请咨询 0755 83768788 公司做的一个购物网站 之前微信版的网站要搬在webView上 可是微信支付是个问题 在外部浏览器怎么都发不起微
  • 802.11协议数据帧详解(一)——802.11帧结构与分类

    今天继续给大家介绍WLAN 本文主要内容是802 11帧格式 一 802 11数据帧整体结构 IEEE802 11系列标准定义了WLAN无线网络数据帧的帧结构 和基本的物理层 MAC层通信标准 与802 3定义的以太网数据帧格式及通信方式不
  • C++之继承<inheritance>

    目录 前言 继承 1 继承的概念与定义 1 1 继承的概念 1 2 继承的定义 2 基类和派生类对象赋值转换 3 继承中的作用域 4 派生类的默认成员函数 5 继承与友元 6 继承与静态成员 7 复杂的菱形继承及菱形虚拟继承 8 继承的总结
  • 前端响应式布局原理与实践

    前言 作为一个前端开发者 响应式网站开发是必备技能之一 响应式有它的很好的优点 也有它一定的缺点 这就需要我们在开发的时候做出取舍 对于内容较少 主要为展示类网站 故采用响应式 对于内容多 管理类的网站采用分开开发的方式 不同设备采用不同的