长一段时间以来,都以为响应式网站就是自适应网站,这是两个一样的概念。后来机缘巧合认识了一位前端大拿,给我好好上了一课,终于能把这两种网站前端表现形式给讲透了。现摘录如下:
1、响应式网站由来
最开始网站都会被设计成固定宽度的页面,最开始的PC显示器的分辨率种类不多,因为当时电脑本来就少,即使有变化也是 800、900、1050、1200等几种。比如 GitHub的网页就是固定宽度为1020px来定制的。
后来随着显示器越来越多,以及笔记本的普及,这种方式的页面出现了问题。在大屏显示器上整个页面显的特别小,在小屏显示器上网页又出现滚动条导致用户体验极其的差。为了解决在各种不同大小和分辨率的设备上如何正确显示网站的问题,前前后后也出现了好多种方案。
提供不同版本:最开始的解决方法,是为不同的设备提供不同版本的网页。比如一个站点为PC、Mobile、Pad提供三个不同的版本。这样做固然保证了效果,但同时要维护好几个版本比较麻烦,而且网站有多个入口,会大大增加系统架构的复杂度。
自适应:后来人们就开始想能不能"一次设计,普遍适用",即让同一个页面自动适应不同大小的设备,从而解决为不同设备提供不同版本的页面问题。这就是所谓自适应布局解决方案。
响应式: 采用自适应布局的话,如果设备太小,就算网页能够根据屏幕大小进行适配,但是在太小屏幕显示内容过多会看不清楚。为了解决这个问题而衍生出来的一种新的布局方式,那就是响应式布局。
2、响应式和自适应的区别
先给出两个具体例子让大家直观感受一下两种的效果:
响应式网站:https://www.microsoft.com/zh-cn/
自适应网站:http://m.ctrip.com/html5/
响应式和自适应两种布局方式都是为了解决在不同大小和分辨率的设备上正确显示网页的问题。不同的是两种布局方式采取了不同的解决方法而矣。
最开始出现的一种新的布局方式其实是宽度自适应布局。我们平时谈论的自适应布局,大部分时候指的就是宽度自适应布局。 自适应是为了解决如何才能在不同大小和分辨率的设备上呈现同样的网页。在网页内容和布局主体保持基本不变的前提下,让同一张个页面自动适应不同大小和分辨率的设备,根据设备屏幕宽度,自动调整网页内容大小。 如下图所示:
自适应布局:网页内容和布局完全一样
从上图可以看出采用自适应布局的话,不管设备屏幕尺寸如何变化,打开同一个页面看到的内容和布局基本上是一样的,不同的只是内容的尺寸。
这样就会引发一个问题,那就是如果设备太小,就算网页能够根据屏幕大小进行适配,但是在太小屏幕显示内容过多会看不清楚,从而极大损害用户体验。
响应式布局正是为了解决这个问题而衍生出来的一种新的布局方式。它可以自动识别屏幕尺寸并做出相应调整的网页设计,页面布局和展示的内容可能会随着屏幕尺寸变化而有所变化。如下图所示:
响应式布局:网页内容和布局随着屏幕尺寸变化而变化
网络上也有网友用这么一张图来总结响应式和自适应的区别:
如上图所示,对于同一个页面(图中的Html),如果用响应式布局来处理的话,用不同设备(电脑、平板、手机)去访问此页面,最后看到的布局和内容有很大不同。
而如果用自适应布局去处理的话,那不管访问设备如何的不同(上图是三台尺寸不一样的手机),最后看到的页面内容和布局基本上还是一样的,就是尺寸略有不同。
进一步详细说明,如下图所示,屏幕宽度大于720像素,则4张图片并排在一行:
如果屏幕宽度在不大于720像素,则4张图片分成两行:
如果屏幕宽度在小于600像素话,网站主导航由平铺变成了下拉:
其实响应式和自适应两种布局方式从外观上很难分辨,但从技术角度来说他们运行的机理不同。所以最后从技术角度再来总结一下两者的区别:
响应式布局不管使用什么设备都是在服务器把数据推送到浏览器后,脚本或CSS自行检测设备屏幕大小后执行对应的样式表内容,并且一直通过本地脚本在监听屏幕大小的变化,随时做出样式响应的变化,这是主动的。
自适应是用户请求访问时会夹带设备信息,服务器据此做出判断并调适应对应设备样式文件+HTML内容+JS,返回给浏览器以这种方式响应不同设备。
为了帮助小伙伴们更好的学习WEB前端,技术学派整理了WEB前端的相关学习视频及学习路线图。
关注“技术学派”后,评论转发文章,私信回复:WEB前端
5自适应是现在主流的技术,导航栏菜单是最常见的一种,今天我们一起来学习一下它是如何使用HTML,CSS和JavaScript来构建响应式导航栏和汉堡菜单的。
这就是它的样子,是不是很熟悉呢?
H5导航菜单
好的,那就先从HTML开始:
<header class=”header”>
<nav class=”navbar”>
<a href=”#” class=”nav-logo”>WebDev.</a>
<ul class=”nav-menu”>
<li class=”nav-item”>
<a href=”#” class=”nav-link”>Services</a>
</li>
<li class=”nav-item”>
<a href=”#” class=”nav-link”>Blog</a>
</li>
<li class=”nav-item”>
<a href=”#” class=”nav-link”>About</a>
</li>
<li class=”nav-item”>
<a href=”#” class=”nav-link”>Contact</a>
</li>
</ul>
<div class=”hamburger”>
<span class=”bar”></span>
<span class=”bar”></span>
<span class=”bar”></span>
</div>
</nav>
</header>
通过这些代码,我们实现了:
以上就是我们需要的HTML代码。
现在让我们添加CSS样式重置代码
(此外,我们将导入所需的字体,并添加一些基本的CSS来重置所有的默认样式。)
@import url(‘https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,500;1,400&display=swap’);
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
font-size: 62.5%;
font-family: ‘Roboto’, sans-serif;
}
li {
list-style: none;
}
a {
text-decoration: none;
}
现在让我们给每个元素逐个添加样式:
header和navbar:
.header{
border-bottom: 1px solid #E2E8F0;
}
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 1.5rem;
}
hamburger样式:
.hamburger {
display: none;
}
.bar {
display: block;
width: 25px;
height: 3px;
margin: 5px auto;
-webkit-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
background-color: #101010;
}
其他元素的基本样式:
.nav-menu {
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-item {
margin-left: 5rem;
}
.nav-link{
font-size: 1.6rem;
font-weight: 400;
color: #475569;
}
.nav-link:hover{
color: #482ff7;
}
.nav-logo {
font-size: 2.1rem;
font-weight: 500;
color: #482ff7;
}
完成这些之后,看起来应该是这样的:
但是它不是响应式的,所以我们还需要添加媒体查询css代码。
@media only screen and (max-width: 768px) {
.nav-menu {
position: fixed;
left: -100%;
top: 5rem;
flex-direction: column;
background-color: #fff;
width: 100%;
border-radius: 10px;
text-align: center;
transition: 0.3s;
box-shadow:
0 10px 27px rgba(0, 0, 0, 0.05);
}
.nav-menu.active {
left: 0;
}
.nav-item {
margin: 2.5rem 0;
}
.hamburger {
display: block;
cursor: pointer;
}
}
这里媒体查询就是通过设置position: fixed; left: -100%;来隐藏nav-menu。
此外,我们将hamburger设置为display: block;,所以现在可见。
我们还添加了一个额外的类.nav-menu.active,它在nav-menu上设置left: 0;。现在,到了添加javascript的时候了,以便在我们单击汉堡菜单时,会在nav-menu上添加此active类。
添加JavaScript
const hamburger=document.querySelector(“.hamburger”);
const navMenu=document.querySelector(“.nav-menu”);
hamburger.addEventListener(“click”, mobileMenu);
function mobileMenu() {
hamburger.classList.toggle(“active”);
navMenu.classList.toggle(“active”);
}
此处的函数mobileMenu()在hamburger和nav-menu上也添加了一个active类,从而打开mobile menu。单击hamburger时,我们可以使用hamburger上的active类来创建X动画。现在就开始做吧。
// Inside the Media Query.
.hamburger.active .bar:nth-child(2) {
opacity: 0;
}
.hamburger.active .bar:nth-child(1) {
transform: translateY(8px) rotate(45deg);
}
.hamburger.active .bar:nth-child(3) {
transform: translateY(-8px) rotate(-45deg);
}
现在看起来应该是这样的:
但是有一个问题,当我们单击链接时,汉堡菜单不会关闭。现在让我们解决一下这个问题。
const navLink=document.querySelectorAll(“.nav-link”);
navLink.forEach(n=> n.addEventListener(“click”, closeMenu));
function closeMenu() {
hamburger.classList.remove(“active”);
navMenu.classList.remove(“active”);
}
closeMenu()函数从nav-menu和hamburger中删除active类,从而关闭mobile menu。
H5导航菜单就是这样,实现了用HTML,CSS和javascript构建一个响应式的导航栏菜单。希望你喜欢并分享这篇文章。感谢大家的阅读。
更多干货等着你~ 点赞、分享,关注哦
TML5和CSS3的不断风行,对 的需求也越来越火,越来越受到开发者和设计师们的喜欢。不过大众对响应式框架却有着不同的态度和观点,一些人认为一个懂HTML5和CSS3的专业设计师应该自己写框架,这样才能做出别具特色的网站;另一些人觉得响应式设计框架能够方便设计师快速、有效的搭建出一个实用、漂亮的网站,在节省时间和精力等方面不可或缺。关于这个争论我们易点科技还是比较支持后者的观点。我们认为即使是再有经验的Web前端开发人员也应该好好研究一下 ,它能给我们提供一些借鉴意义和便利,在今天这个快速发展的时代,设计师动手写框架做网站(合理安排栅格、布局、media queries )实在太耗时了。另外,在使用响应式框架时设计师也可以充分发挥自己的创造力,定制化一些特征,做出有新意的网站。今天我们就来介绍一些目前设计师经常使用的响应式框架,大家可以结合自己的实际需求合理选择使用。
Bootstrap
Bootstrap是由Twitter推出的一个用于前端开发的开源工具包,它可谓是目前最流行的HTML5框架,用户基数最大,在国内的知名度也最高。Bootstrap的口号就是"简单、直观、强悍,让web开发更迅速、简单",它也确实在努力达成这一点:基本涵盖了构建 的所有组件,如bootstrap编辑器、定制jQuery插件,能够实现自定义表单元素、Javascript交互性和跨浏览器兼容性等多项功能。对于大部分站长来说,Bootstrap方便简单,搭建一个比较美观的响应式网站也很快速,是他们的头号选择。
不过,Bootstrap也并非无可挑剔。虽然Bootstrap能够兼容Chrome、Firefox、Safari、Opera、360和搜狗等多个浏览器,但由于它是基于HTML5和CSS3开发的,一些特征对IE浏览器并不是那么友好,在IE浏览器上可能出现无法显示等问题。还有,如果你的网站定制化设计的内容太多,使用bootstrap作为框架底层进行修改一般会涉及到大量样式的复写,可能会造成CSS层级的混乱,不利于网站后期的维护。
Foundation
Foundation基于灵活的栅格,采用最新的技术,成为了先进的响应式前端框架的代表。它的整体框架设计观是以移动端为先,因此它很突出的一个特点就是在手机等移动设备上表现更好。与此同时,Foundation支持用户使用定制化服务(定义栅格、颜色、字体大小等),提供了多种Web的UI组件,比如表单、按钮等,在操作使用上也足够灵活 。与Bootstrap受到广泛使用相比,Foundation由于中文版文档、教程较少在国内显得比较低调,不过也有不少站长认为使用Bootstrap框架 的人实在是太多了,做出的网站都像一个模子刻出来的,无法让自己的网站在一众竞争对手中脱颖而出,此时反而会更倾向于使用Foundation以做出一个高大上、别具一格的网站。不过这个框架也有自己的缺点,那就是兼容性的问题,Foundation 4已经放弃了对IE8的兼容,在国内浏览器的大环境下Foundation的行为究竟是利还是弊,我们也不好轻易下定论。
Skeleton
相比前两者来说,Skeleton在国内用户心目中没有那么高的地位。它使用简单的网格系统,有一系列CSS和JS文件的集合,这使得基于Skeleton的网站能够根据不同分辨率的设备(电脑、平板、手机等)快速调整,能让用户界面更友好,优化用户体验。虽然Skeleton只定义了部分标准HTML元素以及960px的标准模板,但并不影响一般网站的搭建需求。也正是因为这个原因它比较容易上手,尤其适合一些小项目的搭建。
Golden Grid System
如果你对网格系统很感兴趣,Golden Grid System一定是你的不二之选。它一开始呈现为16列网格,但是你也可以将它折叠起来,将视窗缩小到8列或4列的布局,适应平板和手机的浏览。总结来说,它是为了增加 兼容性的折叠式网格,具有四个明显的特征:列、跨页、底线、script。使用Golden 栅格系统框架做网站有不少优点,比如,可以帮助建立清晰、规则的排版,增加网页的可读性;作为网页设计师和前端开发人员的桥梁,方便他们沟通;实现自适应,改变布局响应不同大小的屏幕。这么多好处,你还没心动吗?
Less Framework
Less Framework是经典的响应式框架之一,它是一款支持自适应的CSS网格系统,涵盖4种布局和3种字体预设来满足电脑、平板、手机等不同视窗的需求。Less Framework的工作原理是基于一个单一的网格,改变布局列的数量和外边缘的宽度来做出不同的布局。CSS作为一门非程式语言,对不少设计师来说都比较有难度,Less的出现恰好解决了这一问题,它大大简化了CSS代码的编写,降低了网页的维护成本,让设计师可以用更少的代码做出更出更好的网站。这一点跟它的名称less相呼应,难怪这么多设计师爱上了这个框架。
Gumby
如果你在 方面是个新手,Gumby框架对你来说绝对是个上手的好地方。 Gumby是一个基于SASS(一门CSS扩展语言解析器)响应式的CSS框架,它自带模板以及Web UI工具包,有各种好看的按钮、表格、导航、标签、JS文件,响应速度快。它还支持无编码设计,就算你不懂技术操作起来也很简单,很容易上手,在后期维护方面也没有什么障碍。
320 and UP
这个框架首先面向小屏幕,使用一个小型的屏幕样式表,包含了一些颜色、排版布局等设置属性,确保了网站内容的优先。小屏幕都能适应良好,在大屏幕上就更没有什么问题了。
1140px CSS Grid System
一个响应式网站并不仅仅意味着满足小分辨率设备的需要,还需要在一般电脑屏幕上显示良好的同时适应更大分辨率的布局。1140网格框架就能够做到这一点,它可以完美适应1280分辨率显示器。在较小的显示器上,它可以根据浏览器的宽度变成流体形式,并自适应浏览窗口。
以上就是有关 的介绍。不同的响应式框架各有优缺点,没有一个响应式框架是完美的。还有,要记住使用框架做网站并不意味着我们可以当甩手掌柜,还是需要合理评估自己的需求,适当的自定义一些内容,将框架与自己的想法相结合,这样才能充分发挥响应式框架在网站建设中的积极作用,在节省时间的同时做出一个美观、实用的响应式网站。
当然,如果您确实天生对代码过敏,又想拥有一个高质量易推广的响应式网站,那么也可以联系我们易点科技,让我们帮您实现梦想
*请认真填写需求信息,我们会在24小时内与您取得联系。