一、媒体(介)查询

1.1 基本语法

媒体查询由媒体类型和一个或多个检测媒体特性的条件表达式组成。媒体查询中可用于检测的媒体特性有:width、height和color(等)。使用媒体查询可以在不改变页面内容的情况下,为特性的一些输出设备定制显示效果。

使用 @media 查询,你可以针对不同的媒体类型(媒体、媒介)定义不同的样式。@media 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@media 是非常有用的。

基本语法:

@media 约束词  媒体类型  修饰词  宽高限制{css代码}

@media 媒体类型 and|not|only (媒介约束条件) {
CSS-Code;
}

咱们页面渲染的媒介指的就是:电脑、手机、平板、手表、打印机···


1.2 查询条件

max-width:999px;   最大宽度(当设备小于或等于999px时执行)

min-width:999px;   最小宽度(当设备大于或等于999px时执行)

@media (条件1) and (条件2){

条件1和条件成立执行的CSS样式

}

/*当屏幕尺寸大于或等于1000px,并且 小于或等于1199px*/
@media (min-width: 1000px) and (max-width: 1199px){
body{
background-color: green;
}
}

1.3 实际应用案例

实际应用一 判断设备横竖屏:

/* 这是匹配横屏的状态,横屏时的css代码 */

@media all and (orientation :landscape){}

/* 这是匹配竖屏的状态,竖屏时的css代码 */

@media all and (orientation :portrait){}

实际应用二 判断设备类型:   

@media X and (min-width:200px){}

    X为设备类型》比如print/screen/TV等等

实际应用三 判断设备宽高: 

/* 宽度大于600px小于960之间时,隐藏footer结构 */

  @media all and (min-height:640px) and (max-height:960px){

  footer{display:none;}

}


1.4 外链式

上述写法代码都写到一个css中这样不利于后期维护和修改所以我们修改为外联式。


二、前端UI框架-Bootstrap

2.1 简介

Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML、CSS、JavaScript 开发的简洁、直观、强悍的前端开发框架,使得 Web 开发更加快捷。 [1]  Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。

2.2 使用

中文官网:http://www.bootcss.com/

我们目前只需要使用红色框中的css文件,当然我们目前处于学习阶段,那么我们使用蓝色框。

引入到本地


2.3 栅格系统

Bootstrap 提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列。它包含了易于使用的预定义类,还有强大的mixin 用于生成更具语义的布局。

栅格参数:

<div class="container">
<ul class="row">
<!--如果你不再写小屏幕的样式那么他就会自动占满一行-->
<!--<li class="col-lg-3">111</li>
<li class="col-lg-3">111</li>
<li class="col-lg-3">111</li>
<li class="col-lg-3">111</li>--> <li class="col-lg-3 col-md-4 col-sm-6">111</li>
<li class="col-lg-3 col-md-4 col-sm-6">222</li>
<li class="col-lg-3 col-md-4 col-sm-6">333</li>
<li class="col-lg-3 col-md-4 col-sm-6">444</li>
</ul> <ol class="row">
<!--列偏移-->
<li class="col-lg-10 col-lg-offset-1"></li>
</ol>
</div>

2.4 字体图标

2.4.1 什么是字体图标

字体图标是在 Web 项目中使用的图标字体。


2.4.2 BootStrap字体图标

我们已经在 环境安装 章节下载了 Bootstrap 3.x 版本,并理解了它的目录结构。在 fonts 文件夹内可以找到字体图标,它包含了下列这些文件:

glyphicons-halflings-regular.eot

glyphicons-halflings-regular.svg

glyphicons-halflings-regular.ttf

glyphicons-halflings-regular.woff

相关的 CSS 规则写在 dist 文件夹内的 css 文件夹内的 bootstrap.css 和 bootstrap-min.css 文件上。

bootstrap字体图标是利用css3的@font-face实现的,既然是字体图标那么就可以像使用字体一样来设置它的颜色、字体大小等···

基本方法:

<i class="基类 字体图标类"></i>

<i class="glyphicon glyphicon-volume-off"></i>


三、 动画库-animation.css

3.1 简介

animate.css 是一个来自国外的 CSS3 动画库,它预设了抖动(shake)、闪烁(flash)、弹跳(bounce)、翻转(flip)、旋转(rotateIn/rotateOut)、淡入淡出(fadeIn/fadeOut)等多达 60 多种动画效果,几乎包含了所有常见的动画效果。

虽然借助 animate.css 能够很方便、快速的制作 CSS3 动画效果,但还是建议看看 animate.css 的代码,也许你能从中学到一些东西。

浏览器兼容:当然是只兼容支持 CSS3 animate 属性的浏览器,他们分别是:IE10+、Firefox、Chrome、Opera、Safari。


3.2 使用

github官网地址:https://daneden.github.io/animate.css/

中文API地址:http://www.dowebok.com/98.html

使用方法:

<link rel="stylesheet" type="text/css" href="css/animate.css"/>

<!--class="基类  效果类"-->
<p class="animated bounceOutLeft">动画库~~~~~~~~~~~~~</p>
<p class="animated rotateInDownRight">动画库**********</p>
<img class="animated rubberBand" src="img/7.png"/>

3.3 其他动画库

使用方法及其简单,自己可以试着在网上找一找动画库然后进行学习一下。


zepto

4.1简介

官网:http://zeptojs.com

中文手册:http://www.css88.com/doc/zeptojs_api/

Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery有着类似的api。 如果你会用jquery,那么你也会用zepto。

阉割版的jQuery,比jQuery要强大。

zepto的哲学:只针对高级浏览器,不针对IE6789,兼容IE10以上的浏览器;也就是说zepto中少了很多解决兼容性的代码,有人统计过jQuery处理兼容性代码占50%。

zepto的目标不是覆盖100%的jQuery的API,但是也提供了必要的API。目标创建小的JS库,让用户可以非常快的下载。

语法和jQuery基本一样,甚至于函数的名字都和jQuery一样。

4.2选择器

jQuer拓展的一些选择器,zepto一律不支持,:eq()、:lt()、:gt()、:first、:last、:odd、:even都不支持。

$('div:first')

$('div:last')

$('div:odd)

$('div:even')

$('div:eq(3)')

$('div:lt(3)')

$('div:gt(3)')

CSS3的选择器zepto统统支持。

$('div:first-of-type')

$('div:nth-of-type(odd)')

$('div:not()')

也就是说,zepto的$()函数的底层原理,就是querySelectorAll()。querySelectorAll()支持的写法,zepto都支持。

zepto不需要兼容低版本浏览器。

IE6、7不支持getEmentsByClassName(),jQuery就是玩命的用正则表达式去模拟支持。

所以zepto就是阉割版的jQuery,但是阉割的部分是jQuery中的兼容性部分,所以变得更精简。


4.3常用方法、属性

支持html()方法

$('div:first-of-type').html('1111');

节点选择器:

$('p:first-child').parent('h1').siblings().html('222');

位置:

$('div:nth-of-type(4)').offset().top

加类、删类:

$('div').addClass('cur');

$('div').eq(0).removeClass('cur');

DOM操作:

$('<span></span>').appendTo('div')

jQuery中常见的函数,zepto都有,没有什么变化。


4.4事件

原生事件都支持。

$('div').eq(0).click(function(){

alert(1)

});

$('div').eq(1).on('click',function(){

$(this).css('background','red')

});


4.5动画模块

zepto为方便使用者的包达到最大限度的精简,就是让用户自由的选择自己的功能。

模块的安装很简单,就是把模块的代码,复制到原来代码的后面。

$('div').eq(1).animate({'left':1000},1000,'cubic-bezier(0.15,0.33,1,1)',function(){
$(this).css('background-color','blue');
});

zepto的动画实现原理是过渡,不是定时器,zepto源码中没有setInterval函数,所以zepto实现的动画,不抖动、时间精确。正是是因为机理是CSS3过渡,所以zepto的animate函数能实现背景颜色动画、背景定位动画、transform动画。而这些jQuery都不支持。

哲学复习一下:

jQuery:兼容所有浏览器,选择器元素方便,DOM操作也方便,动画也方便。

jQuery2.x和3.x:不兼容IE678,也是轻量级的jQuery,只精简$()函数,也开始querySelectorAll,减少了正则表达式的使用。但是里面的动画还是定时器。

zepto:jQuery的阉割版,但是不兼容所有浏览器,选择器是querySelectorAll,动画是过渡实现,能够完成3D内所有的动画,只针对移动端使用。


4.6模块modules

zepto是模块化开发,要使用动画函数animate必须引入模块。

zepto把所有功能都拆分为一个个模块,按需拼凑即可。

zepto不支持jQuery风格的动画队列:

$('div').animate({'left':1000},500);

$('div').animate({'top':500},500);

必须用回调函数:

$('div').animate({'left':1000},500,function(){
$(this).animate({'top':500},500,function(){
$(this).animate({'left':0},500,function(){
$(this).animate({'top':0},500);
});
});
});

动画的配套不完善。

stop()、is()、delay函数支持的不好。

但是delay有办法支持。

$('div').animate({'left':1000},{'duration':1000,'delay':1000});

新创建的元素能够立即开始动画。

$('<div></div>').appendTo('body').animate({'transform':'rotate(360deg)'},1000);

动画完成,过渡会立即去掉,但是css函数使用的时候,我们不能确定此元素当前在不在过渡,所以为了安全还是手动去掉过渡。

$('input').eq(0).click(function(){

$('div').css({'transition':'none','left':1000});

});


五、velocity插件

Velocity 是一个简单易用、高性能、功能丰富的轻量级JS动画库。它能和 jQuery 完美协作,并和$.animate()有相同的 API, 但它不依赖 jQuery,可单独使用。 Velocity 不仅包含了 $.animate() 的全部功能, 还拥有:颜色动画转换动画(transforms)循环缓动SVG 动画、和 滚动动画 等特色功能。

它比 $.animate() 更快更流畅,性能甚至高于 CSS3 animation, 是 jQuery 和 CSS3 transition 的最佳组合,它支持所有现代浏览器,最低可兼容到 IE8 和 Android 2.3。

Velocity 目前已被数以千计的公司使用在自己的项目中,包括 WhatsApp, Tumblr, Windows, Samsung, Uber 等,这里 Libscore.com 统计了哪些站点正使用 velocity.js。

官网:http://velocityjs.org/

中文网站:http://www.mrfront.com/docs/velocity.js/index.html

5.1 Velocity 不依赖 jQuery

// console.log(document.querySelector('.box'))
// console.log(document.querySelectorAll('.box p'))
var oBox = document.querySelector('.box1');
//Velocity.js 可以在不引入 jQuery 的情况下单独使用。如果 你需要大部分动画效果能兼容 IE8,就必须引入 jQuery 1×。 它也可以和
Zepto 一起使用,写法和 jQuery 一样:
//Velocity(oBox,{width:200},1000);
// 使用 jQuery 或 Zepto 时
$(".box").velocity({width: 200},{duration: 1000});

5.2 Arguments 参数

$('.box').velocity({
width: "500px", // 动画属性 宽度到 "500px" 的动画
height:"300px"
}, {
/* Velocity 动画配置项的默认值 */
duration: 1000, // 动画执行时间
easing: "linear", // 缓动效果
queue: "", // 队列
begin: function(){console.log('动画开始的函数')}, // 动画开始时的回调函数
progress: undefined, // 动画执行中的回调函数(该函数会随着动画执行被不断触发)
complete: function(){console.log('动画结束的函数')}, // 动画结束时的回调函数
display: 'none', // 动画结束时设置元素的 css display 属性
visibility: undefined, // 动画结束时设置元素的 css visibility 属性
//loop: true, // 循环
delay: 1000, // 延迟
mobileHA: true // 移动端硬件加速(默认开启)
});

5.3 Chaining链式动画

//先执行宽度变为75px的动画,等前面的宽度动画结束后,再执行高度变为0的动画

$("div").velocity({width: 750}).velocity({ height: 200 });


5.4 loop选项可以制作多次动画

$("div").velocity({"rotateX" : 30},{duration:1000,loop: 2 });


5.4 Easing 缓动效果

jQuery UI 的缓动关键字(预定义在 Velocity 源码中):

CSS3 贝塞尔曲线:

/* 标准写法 */
$element.velocity({ width: 50 }, { easing: "easeInSine" });
/* 或 */
$element.velocity({ width: 50 }, "easeInSine");
/* jQuery UI easings */
$element.velocity({ width: 50 }, "easeInSine"); /* CSS3 easings */
$element.velocity({ width: 50 }, "ease-in"); /* 贝塞尔曲线 */
$element.velocity({ width: 50 }, [ 0.17, 0.67, 0.83, 0.67 ]); /* 弹簧物理 */
$element.velocity({ width: 50 }, [ 250, 15 ]); /* step easing */
$element.velocity({ width: 50 }, [ 8 ]);

5.5缓动可应用于单个属性

$element.velocity({
borderBottomWidth: [ "2px", "spring" ], // border-bottom 使用 "spring"
width: [ "100px", [ 250, 15 ] ], // width 使用 spring physics
height: "100px"
}, {
easing: "easeInSine" // 默认所有属性使用 "easeInSine"
});

5.6 Complete回调函数

complete为动画结束时的回调函数,在无限循环模式下(设置loop: true) 该回调函数将不会执行,但是有规定次数的循环模式下(比如设置设置loop: 3) 该回调函数 将只会在最后一次循环结束后 执行一次。

$element.velocity({opacity: 0}, {
complete: function(elements) { console.log(elements); }
});

5.7滚动浏览器内容到目标元素的位置

/* 回顶动画,滚动浏览器内容到 <body> 的顶部 */

$("body").velocity("scroll", { duration: 500, easing: "easeOutQuart" });


5.8 Stop 停止当前动画

"stop"指令,可以使当前正在执行的动画立即停止,类似 jQuery 的$.stop()方法

$element.velocity("stop");  // 停止正在执行的 $element 元素的动画
$("div").stop(); //停止当前动画,进入下一个动画
$("div").stop(true); //立即停止

设置stop: true, 可以停止并清空当前正在执行的整个动画队列

$element
.velocity({ width: 100 }, 1000)
.velocity({ height: 200 }, 1000); // 如果元素正在执行 width 动画,点击 $("#button") 将立即停止当前动画
// 并移除和跳过将要执行的 height 动画队列
$("#button").on("click", function() {
$element.velocity("stop", true);
});

5.9 Reverse 使动画反向执行

"reverse"指令使动画反向执行,就像让一部电影倒着播放。 Reverse 默认会继承之前动画的配置选项(比如duration,easing等), 但也可以重新设置:

$element.velocity({ left: 200 }, { duration: 500 }).velocity("reverse", { duration: 2000 });


5.10 Feature 特色 Transforms

Velocity 支持2D/3D变换动画, 比如translate, scale, rotate, skew等。

可以进行变形动画,注意不能写transform属性,而是应该散着写:

$(".box").velocity({
translateX: 200,
translateY: "150px",
translateZ: "200px",
scale: 0.5,
scaleX: 0.5,
scaleY: 0.5,
rotate: 45,
rotateX: "45deg",
rotateY: "45deg",
rotateZ: "45deg",
skewX: "30deg",
skewY: "30deg"
}, { duration: 500 })

5.11动画嵌套

$('div').eq(0).velocity({ translateX: 100 }, 1000, function() {
$('div').eq(1).velocity({ translateY: 200 }, 1000, function() {
$('div').eq(2).velocity({ translateY: 200,width: 300 }, 1000);
});
}); //如何解决上面的问题?我们直接用$.Velocity.RunSequence()对上面代码进行重写:
//e:element - 表示元素
//p:properties - 属性集
//o:options - 配置选项
// 将嵌套动画序列储存到一个数组里,很清晰的显示了它们的执行顺序
var mySequence = [
{ e: $('div').eq(0), p: { translateX: 100 }, o: { duration: 1000 } },
{ e: $('div').eq(1), p: { translateY: 200 }, o: { duration: 1000 } },
{ e: $('div').eq(2), p: { translateY: 300,width: 300 }, o: { duration: 1000 } }
];
// 调用这个自定义的序列名称 还可以在其他地方复用
$.Velocity.RunSequence(mySequence);

注意:使用RunSequence()方法需要引入velocity.ui.js插件包


兼容策略主要有两点(面试常考,建议背诵)

(1)平稳退化(优雅降级):

首先使用最新的技术面向高级浏览器构建最强的功能及用户体验,然后针对低级的浏览器进行限制,逐步衰减那些无法被支持的功能及体验。使用平稳退化技术时,你必须首先完整的实现了网站,其中包括所有的功能和特效。 然后再为那些无法支持所有功能的浏览器增加候选方案,使之在旧市的浏览器上可以以某种形式降级体验却不至于完全失效

(2)渐进增强

渐进增强的概念就是,指从最基本的可用性出发,在保证站点页面在低级浏览器中的可用性和可访问性的基础上,逐步增强功能及提高用户体验。

我们应该先让网站能够正常工作于尽可能旧的浏览器上,然后不断为它在新型浏览器上实现更多的增强和改进。随着时间的推移,当越来越多的人开始升级浏览器而浏览器本身的支持度也不断提升时,就会有越来越多的人体验到这些增强和改进,它持续有效的使网站越来越好,只要一次实现,它就让网站的体验与时俱进。

平稳退化就是渴着牛逼的技术来,然后给低级浏览器“找补”解决方法;

渐进增强就是渴着低级浏览器来,然后给高级浏览器加点“小甜点”。

他们的哲学都是一样的,就是高级浏览器看更牛逼的特效,低级浏览器保证基本浏览效果。但是出发点不一样,渐进增强需要你花更细腻的心思,不能撒丫子一个劲高级技术猛怼。

.transition { /*渐进增强写法*/
-webkit-transition: all .5s;
-moz-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
.transition { /*优雅降级写法*/
transition: all .5s;
-o-transition: all .5s;
-moz-transition: all .5s;
-webkit-transition: all .5s;
}

前端笔记之移动端&响应式(上)媒体查询&Bootstrap&动画库&zepto&velocity的更多相关文章

  1. 前端笔记之移动端&响应式(中)视口&百分比布局&弹性盒模型&rem&fillpage

    一.viewport视口 1.1什么是屏幕尺寸.屏幕分辨率.屏幕像素密度? 屏幕尺寸:指屏幕的对角线的长度,单位是英寸,常见的屏幕尺寸有3.5.3.7.4.2.4.7.5.0.5.5.6.0等. 屏幕 ...

  2. 前端笔记之移动端&响应式(下)默认样式&事件&惯性抛掷&swiper&loaction对象

    一.移动端默认样式 ·IOS和Android下触摸元素时出现半透明灰色遮罩 a,input,button{ -webkit-tap-highlight-color: transparent; } ·I ...

  3. 关于响应式、媒体查询和media的关系 、流媒体布局flex 和em rem像素的使用 我有一些废话要讲.....

    一.什么是响应式 随着移动端越来遇火 网站的布局成为一个热议的话题 有的人喜欢用手机浏览网站.有的人喜欢用paid浏览网站.有人喜欢用电脑浏览网站 那么问题来了 我们怎么样才能使用一套css样式 完成 ...

  4. 基于REM的移动端响应式适配方案

    视口 在前一段时间,我曾经写过一篇关于viewport的文章.最近由于在接触移动端开发,对viewport有了新的理解.于是,打算重新写一篇文章,介绍移动端视口的相关概念. 关于这篇文章说到的所有知识 ...

  5. 移动端响应式布局--你不知道的CSS3.0媒体查询,解决rem部分情况下无法适配的场景

    媒体查询作为响应式布局的方法之一,实际项目中用途也很广.但是你真的知道怎么用吗? 例如,下面匹配 iphone6/7/8 屏幕 @media screen and (max-width: 375px) ...

  6. 【CSS-移动端响应式布局详解】

    背景 移动端响应式布局开发主要方案有: 基于rem开发 基于媒体查询 基于弹性盒 基础概念 在讨论响应式布局知识前,先了解下移动端常用基础概念. 逻辑像素(CSS pixels) 浏览器使用的抽象单位 ...

  7. 探讨兼容IE低版本的PC端响应式布局

    http://www.jiangweishan.com/article/lowIeResposive.html 响应式布局,oh my god!!有点醉了,感觉是老生常谈的话题了.虽然已经谈过很多了, ...

  8. 移动端使用rem同时适应安卓ios手机原理解析,移动端响应式开发

    rem单位大家可能已经很熟悉,rem是随着html的字体大小来显示代表宽度的方法,我们怎样进行移动端响应式开发呢 浏览器默认的字体大小为16px 及1rem 等于 16px 如果我们想要使1rem等于 ...

  9. 基于rem的移动端响应式适配方案(详解) 移动端H5页面的设计稿尺寸大小规范

    基于rem的移动端响应式适配方案(详解) : https://www.jb51.net/article/118067.htm 移动端H5页面的设计稿尺寸大小规范 http://www.tuyiyi.c ...

随机推荐

  1. Go-技篇第二 命名规范

    优秀的命名 优秀的命名应当是一贯的.短小的.精确的.所谓一贯,就是说同一个意义在不同的环境下的命名应当一致,譬如依赖关系,不要在一个方法中命名为depend,另一个方法中命名为rely.所谓短小,不必 ...

  2. Dubbo中暴露服务的过程解析

    dubbo暴露服务有两种情况,一种是设置了延迟暴露(比如delay="5000"),另外一种是没有设置延迟暴露或者延迟设置为-1(delay="-1"): 设置 ...

  3. BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组

    BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位 ...

  4. BZOJ_2427_[HAOI2010]软件安装_tarjan+树形DP

    BZOJ_2427_[HAOI2010]软件安装_tarjan+树形DP 题意: 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁 ...

  5. React组件设计

    React组件设计 组件分类 展示组件和容器组件 展示组件 容器组件 关注事物的展示 关注事物如何工作 可能包含展示和容器组件,并且一般会有DOM标签和css样式 可能包含展示和容器组件,并且不会有D ...

  6. jdbc 增删改查以及遇见的 数据库报错Can't get hostname for your address如何解决

    最近开始复习以前学过的JDBC今天肝了一晚上 来睡睡回笼觉,长话短说 我们现在开始. 我们先写一个获取数据库连接的jdbc封装类 以后可以用 如果不是maven环境的话在src文件下新建一个db.pr ...

  7. CentOS DesktopEntry

    IBM Developer  :  https://www.ibm.com/developerworks/cn/linux/l-cn-dtef/index.html [Desktop Entry] N ...

  8. django 多对多自定义第三张表时的注意事项

    杂交(自定义第三张表+ManyToManyField) # modles.py class Boy(models.Model): name = models.CharField(max_length= ...

  9. LaTeX 公式编辑

    推荐一篇关于LaTeX的文档:<一份不太简短的LATEX 2ε介绍> 1. 常用数学公式符号: 求期望 $\mathbb{E}$ \mathbb{E} 正负无穷 $+\infty$,$-\ ...

  10. Qt之QDomDocument操作xml文件-模拟ini文件存储

    一.背景 不得不说Qt是一个很强大的类库,不管是做项目还是做产品,Qt自身封装的东西就已经非常全面了,我们今天的这篇文章就是模拟了Qt读写ini文件的一个操作,当然是由于一些外力原因,我们决定自己来完 ...