金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > web前端 > 时要避免的几个地方,CSS动画学习指南

时要避免的几个地方,CSS动画学习指南

发布时间:2019-11-19 14:44编辑:web前端浏览(78)

    CSS动画学习指南:原理与实例

    2015/09/25 · CSS · 1 评论 · 动画

    本文由 伯乐在线 - 段昕理 翻译,唐尤华 校稿。未经许可,禁止转载!
    英文出处:Tom Waterhouse。欢迎加入翻译组。

    译者注:这篇文章比较古老了,大概成文于2011年。放在当今急速变化的web前端世界中似乎有些不合时宜。不过究其所写的内容-CSS动画的原理,则万变不离其宗,理解动画的基本原理非常重要,里面提到的12条基础动画原则,对创建高质量的动画效果有着极好的指导意义。当时支持CSS动画属性的浏览器很少,如今几乎所有主流浏览器基本都支持了(别跟我提IE哦)。文章中的代码示例和我们今天写的CSS3动画基本是一致,放在现在的浏览器跑也没有兼容性问题。

    现如今 Firefox 和 基于Webkit引擎的浏览器都支持CSS动画了,择日不如撞日,何不尝试一下。抛去技术形态,不管是传统动画、电脑3D动画、Flash或CSS,遵循的动画原理都是相通的。

    我们将在文章中初步了解CSS动画,并按照指导原则创建CSS动画。然后将通过实例,使用传统动画原理创建CSS动画。最后,展示一些真实世界里的用例。

    图片 1

    Web前端框架与类库的思考

    2015/09/09 · CSS, HTML5, JavaScript · 1 评论 · 框架, 类库

    原文出处: ChokCoco   

    说起前端框架,我也是醉了。现在去面试或者和同行聊天,动不动就这个框架碉堡了,那个框架好犀利。

    当然不是贬低框架,只是有一种杀鸡焉用牛刀的感觉。网站技术是为业务而存在的,除此毫无意义,框架也是一样。在技术选型和架构设计当中,脱离网站业务发展的实际,一味的追求时髦新技术,可能会适得其反,将网站发展引入崎岖小道。就好像一个日均pv只有几百的小型电商网站,却要大喊“某宝就是这么搞的”,然后搭建应用服务器集群,使用分布式文件系统和分布式数据库系统…等巴拉巴拉的一堆用来处理高并发,海量数据访问的手段。我想说,有意义吗?

      前端框架的理解误区

    网站的价值在于它能为用户提供什么价值,在于网站能做什么,而不在于它是怎么做的,所以在网站还很小的时候就去追求网站的架构框架是舍本逐末,得不偿失的。前端框架同理,如果是一个简单的页面型产品,应用只是依赖服务器来生成Web页面和视图,并且只需要使用一些简单的Javascript或者JQuery来使应用更加具有互动性,那么一个JQuery前端类库就可以了,真的没必要用上一些高大上的框架。

    当然,框架的确是很有用的,重点是我们要知道什么时候该用什么框架。大公司大项目的经验和成功模式固然重要,值得学习借鉴,但我们不能因此变得盲从。只有深刻去理解前端框架,知道什么时候该用什么什么框架解决什么问题,才能有的放矢,直击要害。

      前端框架与前端类库的区别

    使用框架前,我觉得很重要的一点是弄清类库(诸如JQuery)和框架(诸如angularJS)的区别在何处。

    简单而言,类库,解决的是代码或者是模块级别的复用或者对复杂度的封装问题,例如将一个解决复杂问题的功能模块封装成一个函数,提供一个简单的接口。库它是一种工具,它提供了很多封装好的方法,用与不用取决于我们自身,即使用了也不会影响我们呢的代码结构。

    而框架,更多的是对模式级别的复用和对程序组织的规范。这里的模式是指比如MVC,为了实现M和V的解耦,把复杂的耦合关系由经常变化的业务代码转移到不经常变化的框架内部消化。是面向一个领域来提供一套解决方案,提高开发效率,如果我们选择了使用某框架,就应该遵循该框架所规定的规则。

    二者最主要的区别是:JQuery以DOM操作为中心,框架,准确来说是MVC框架,是以模型(model)为中心,而DOM操作是附加的。所以,以模型为中心最终达到的目的是带来一整套工作流程的变更,使得后台工程师可以编写前端的模型代码,把后台与前端打通,交互设计师处理UI跟模型的互动关系,UI设计师可以专注、无障碍的处理HTML源码,把它们以界面模板的形式提交给交互工程师。这一整套协作机制能大大提高开发效率。使用MVC框架使得前端任务更好的被解耦。

      前端MVC框架思想

    我们知道,传统的MVC模式将一个应用划分为——模型层(model)、视图层(view)、控制层(controller)。他们在应用系统中担当不同的角色,完成不同的任务。

    • Model:即数据模型,用来包装和应用程序的业务逻辑相关的数据或者对数据进行处理,模型可以直接访问数据。
    • View:视图用来有目的显示数据,在视图中一般没有程序上的逻辑,为了实现视图上的最新功能,视图需要访问它监视的数据模型。
    • Controller:控制器调控模型和视图的联系,它控制应用程序的流程,处理事件并作出响应,事件不仅仅包括用户的行为还有数据模型上的改变。通过捕获用户事件,通知模型层作出相应的更新处理,同时将模型层的更新和改变通知给视图,使得视图作出相应改变。因此控制器保证了视图和模型的一致性。

    图片 2

    那么在前端中的表现。前端MVC中各部分的职责:图片 3

    我对前端的View的理解是,与页面上元素直接相关的部分都属于View。包括html,CSS和一部分直接控制页面元素的JS。可以从Model中得到数据,并将其显示到页面上。而关于数据的变更与请求,则统统交给Controller处理。

    那么Controller呢?作为Model和View的粘合剂,Controller将View方面的请求转发给合适的Model,在必要时也会去更新View。而Controller本身也可以作为Model的观察者,获取Model的变更。而作为Controller本身,就不应该有涉及到页面元素的代码了。

    最后谈谈Model,与后端的沟通、AJAX请求以及对数据的处理都属于Model的工作。Model本身不知道谁是View,谁是Controller。它只提供一些方法供View和Controller调用,并且将变更通知给它的观察者View或Controller。显然,Model与页面元素之间也解耦了。

    虽然基于MVC模型的框架之间也有很多不同之处,但是总体而言,Model负责保存vier需要的数据以及数据处理逻辑,例如读写,更新,删除,验证,转换等。View负责接收并显示Model提供的数据以及接收用户的输入,并且响应事件,Model更新后及时将更新反馈回用户。Controller处理业务逻辑和事件逻辑。

      知己知彼,对症下药

    在前端框架和类库越来越丰富的今天。选择一款对的框架或类库就显得尤为重要了,我觉得没必要盲目跟风,看见什么框架火就屁颠屁颠跑去啃一个星期,然后因为项目工作上用不到,几个月之后又全忘光了。

    所以我觉得重要的是把基础打扎实,重点是去了解各个类库与框架的作用,某类框架着重用于解决什么问题,然后在项目需要用到时候再去研读API才是上策。

    最后,我们要清楚MVC在前端开发中的应用具有的局限性,简单的项目如果使用MVC框架会可能导致项目变得更加复杂。当然随着Web前端的复杂度不断增加,前端MVC框架的不断发展,相信在未来的应用软件类复杂产品当中,MVC框架一定会给前端工作带来效率上的飞跃。

    以上只是我对前端框架和类库一些浅显的认识,不喜勿喷,更希望您能提出更好的学习框架和类库的方法。共同进步,共同学习。

    文中若有技术层面的错误还请斧正,误人子弟实乃罪过。

    1 赞 5 收藏 1 评论

    图片 4

    写 CSS 时要避免的几个地方

    2015/11/01 · CSS · 命名

    原文出处: heydonworks   译文出处:腊八粥   

    声明:你可以不同意我在本文所写的一些观点,没有问题,我不是要代表你、代表你的公司或意识,因此请不要感到不安。继续保持你的看法即可。向那些理解演讲方法和辩证法的、绝大多数人致歉,因为本声明不适用于他们。

    CSS 动画属性

    在深入之前,我们先写点基础的CSS:

    Animation 是CSS的新属性,允许我们不需要借助Javascript或Flash就能为HTML元素(如:div、h1 和 span)创建动画。现在支持这个属性的浏览器有 包含Webkit 引擎的浏览器,如:Safari 4+、Safari for iOS (iOS 2+)、Chrome 1+和Firefox 5。 不支持该属性的浏览器则会忽略动画代码,此时要确保你的页面不完全依赖这个属性。

    由于这个技术相对来说较新,需要添加浏览器厂商的前缀。到目前为止,每个浏览器的语法规则都是一样,只是用前缀区分。下面的代码例子中,我们用的是 -webkit 前缀语法。

    要为元素添加动画,你只需要将CSS 动画关联到该元素就可以了:

    CSS

    /* This is the animation code. */ @-webkit-keyframes example { from { transform: scale(2.0); } to { transform: scale(1.0); } } /* This is the element that we apply the animation to. */ div { -webkit-animation-name: example; -webkit-animation-duration: 1s; -webkit-animation-timing-function: ease; /* ease is the default */ -webkit-animation-delay: 1s; /* 0 is the default */ -webkit-animation-iteration-count: 2; /* 1 is the default */ -webkit-animation-direction: alternate; /* normal is the default */ }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /* This is the animation code. */
    @-webkit-keyframes example {
       from { transform: scale(2.0); }
       to   { transform: scale(1.0); }
    }
     
    /* This is the element that we apply the animation to. */
    div {
       -webkit-animation-name: example;
       -webkit-animation-duration: 1s;
       -webkit-animation-timing-function: ease; /* ease is the default */
       -webkit-animation-delay: 1s;             /* 0 is the default */
       -webkit-animation-iteration-count: 2;    /* 1 is the default */
       -webkit-animation-direction: alternate;  /* normal is the default */
    }

    首先,我们创建动画代码。这段代码可以出现在CSS文件中的任何位置,只要元素能找到相应动画的名字(animation-name)就可以了。

    还有一种更简便的方法为元素添加动画:

    CSS

    div { -webkit-animation: example 1s ease 1s 2 alternate; }

    1
    2
    3
    div {
    -webkit-animation: example 1s ease 1s 2 alternate;
    }

    这段代码做了一定简化,并没有把所有属性值都写上。如果某些值没有写,浏览器会回退使用默认值。

    这些是最基础的。下面我们将展示更多的代码。

    多文件

    很多 web 开发貌似都和将任务分割为可管理的块或「组件」相关。对于每一个分离的 JavaScript 功能块、或 HTML 局部,我可以做一个专门文件,并把相关文件组织到文件夹里,以 javascript、html 或 controller、templates 命名。你怎么做都行。这样,你就能轻松查看文件系统,只关注包含有你当时想要编辑的代码文件即可。

    这种方式不适用于 CSS。JavaScript 函数可以放在它们被调用位置的前后,HTML 模块可以在任何地方插入,只要你觉得它们适合当前文档流。另一方面,CSS 是按照时间顺序发生的。它和你声明样式的顺序,有着很大关系。由于该语言的继承和 specificity注1,你应该从一般样式(比如对 body 设置 font-family)开始,并过度到更多具体的定义。

    CSS 是一个有序的、以例外为基础的语言,没有简单的方法来连贯地表示一个文件列表(通常按照字母顺序组织)。它给了你一个印象,每个 CSS 文件都是自治的,事实上却不是。

    - buttons.css - reset.css

    1
    2
    - buttons.css
    - reset.css

    因此你有两种选择:当你试图把一个方钉子打入圆孔时,你可以对「specificity 不应该成为 CSS 的一部分」持拒绝、抱怨的态度,或者,你用一个有着良好注释的文件,它明确地表示了继承过来层叠的弧度。specificity 不应该成为一个问题,因为大多数特定的选择器应该是你最后才编写的。

    总结你不应该把 CSS 文件分割为独立文件,就像不应该把一块玻璃丢在水泥地板上一样。

    使用传统动画原理

    在我看来,传统动画的鼻祖迪斯尼,早期在著名的图书《Illusion of Life》里创立了传统动画的12条原则。这些基础原则可以应用到所有类型动画,不过你并不需要像动画专家一样遵循。我们将这12条原则运用到CSS动画实例上,把一个基础动画转变成更加可信的视觉幻象。

    虽然只是蹦蹦跳跳的小球,但你可以看出两个版本中的不同世界。

    这个例子展示了CSS动画特性。下面的代码中,我们用一些空div元素来展示如何运作;我们都知道这代码不够语义化,但重点在于它将页面变得生动起来,这在以前的浏览器中是绝对做不到的。

    嵌套(借助 Sass)

    我对 Sass 感到比较纠结。它的一些思想真的让我激动,比如使用循环和条件语句提高编写效率的能力。而另外一些特性就不那么好了,比如无限嵌套的声明。

    我认为,很多人选择 Sass,帮助他们管理和维护 CSS,更方便阅读和编写。Sass 做为一个依赖和抽象层所带来的负面影响,就是让事情更加系统化地复杂,据说还有一些 Sass 提供的接口,比如带参数的混入(mixin)。将其用在项目中,代码的可阅读性和简短程度,就成了一种福音。

    嵌套吗?那只会让问题更糟。想象一下组织最糟糕的 CSS 文件。虽然混乱,但至少是一个维度的混乱:如果你愿意,那么只有一个文件混乱。让编写蹩脚 CSS 的人(可以是任何人,很多时候也包含我)使用嵌套,相当于授权他们扩大到第二维度的混乱。太棒了!现在,混乱彻底蔓延开来。

    鉴于在其它语言里,尽可能地避免嵌套结构是一种职业荣誉感的体现,那么,将这种能力用在不需要嵌套的语言里,貌似有些可笑。Hugo Giraudel 就 Sass 写了数百篇指导文章。下面是他就嵌套不得不说的话:

    Fucking. Stop. Nesting.

    总结你要追寻的 Sass 特性不应该是嵌套。

    挤压和拉伸

    图片 5

    这个弹跳球为压扁和拉伸做了很好的展示。如果弹球高速下落并撞击地面,你可以观察到它被挤扁然后在弹回的过程中被拉伸。

    在基本常识层面,这个例子让我们的动画有了重量和伸缩的感觉。如果扔一个保龄球,我们不会期待它有任何拉伸,很可能只是会撞坏地面。

    可以通过CSS3的属性 transform 来产生压扁和拉伸的效果。

    CSS

    @-webkit-keyframes example { 0% { -webkit-transform: scaleY(1.0); } 50% { -webkit-transform: scaleY(1.2); } 100% { -webkit-transform: scaleY(1.0); } }

    1
    2
    3
    4
    5
    @-webkit-keyframes example {
       0% { -webkit-transform: scaleY(1.0); }
       50% { -webkit-transform: scaleY(1.2); }
       100% { -webkit-transform: scaleY(1.0); }
    }

    这段代码会将物体纵向(y轴,上下)的比例改变为原始比例的1.2倍,然后回复到原始尺寸。

    我们还为这个动画使用了稍微复杂一点的定时器。对于基础动画只需要起始(from)和结束(to)就可以了。但你也可以通过白分比的方式为每个时间点设置动画,就像代码所展示的那样。

    挤压效果已经实现了。现在我们利用转换(translate)来移动物体。我们可以它将形变放在一起。

    CSS

    50% { -webkit-transform: translateY(-300px) scaleY(1.2); }

    1
    2
    3
    50% {
    -webkit-transform: translateY(-300px) scaleY(1.2);
    }

    转换属性允许我们在不改变基础属性(如 位置、宽度、高度)的前提下操作物体,这就使其非常适合CSS动画。这个特别的转换属性让小球在动画的中间点从地面弹起。

    (请注意:要查看这个动画,你需要最新版的Firefox、Chrome或Safari。笔者书写这段文字的时候,Safari浏览器提供了最佳视觉体验。)

    (译者注:现如今主流的浏览器都已经能很好的实现动画效果了)

    查看挤压和拉伸的效果.

    没错,小球看起来还是很糙,不过这个小小的调整是让动画变得逼真的第一步。

    像素单位

    回溯到 IE6 的时代,我们被告诫用 em 单位设置字体大小。较新的浏览器带有缩放功能,可以更容易地按比例增加页面尺寸,但是在 IE6,你只能增加字体大小。由于用像素设置的文本拒绝被放大,我们会排斥很多低版本用户。

    IE6 不再是一个问题了,但是大多数操作系统和浏览器的用户仍然设置独立于缩放功能的字体大小。这应该是他们的喜好,我们应该包容。

    说归说,我甚至没有打算实现这一目的。我只想向你自私的一面发出恳求:在响应式设计里使用像素来管理大小,绝对是愚蠢至极的行为。分开元素之间的尺寸,其相对性的缺乏意味着你要不得不为每个独立的断点,单独考虑每种设置。事实上,使用像素时,你甚至不得不管理字体大小和单独的、隔开元素的 margin。你本不想这样做的。

    举个例子:

    CSS

    @media (min-width: 400px) { h1 { font-size: 22px; margin-top: 33px; } }

    1
    2
    3
    4
    5
    6
    @media (min-width: 400px) {
      h1 {
        font-size: 22px;
        margin-top: 33px;
      }
    }

    如果使用相对单位,我该怎么做呢?我不愿意的。事实上,我无需在我的媒体查询里针对任何单独元素设置字体大小和 margin。我只想让浏览器或用户根据根元素()来决定字体大小,并用 em 或 rem 来设置我的所有其它规格。

    CSS

    h1, h2 { margin-top: 1.5rem; } h1 { font-size: 2.5em; } h2 { font-size: 2em; } /* all your other element styles */

    1
    2
    3
    4
    h1, h2 { margin-top: 1.5rem; }
    h1 { font-size: 2.5em; }
    h2 { font-size: 2em; }
    /* all your other element styles */

    然后,当我想在 min-width 断点下放大比例时,我只需要根据其它元素的比例,调整根的字体大小。我使用百分比,因为这涉及到用户喜好,如果设置为:

    CSS

    @media (min-width: 400px) { html { font-size: 120%; } }

    1
    2
    3
    4
    5
    @media (min-width: 400px) {
      html {
        font-size: 120%;
      }
    }

    你的响应式设计的 90% 策略都在这里了。而且,你还能在所有同级的流元素之间设置通用的 margin,比如使用 Lobotomized Owls注2 的选择器:

    CSS

    body * + * { margin-top: 1.5rem; }

    1
    2
    3
    body * + * {
      margin-top: 1.5rem;
    }

    总之拥抱相对性,收获成果。

    预备

    预备在主要动作发生之前增加了悬念或力量感。举个例子,在你起跳之前腿部的弯曲有助于观察者预判你下一步会做什么。在我们的弹球例子中,事前增加一个简单的影子表示有东西将要从上面掉下。

    查看预备效果.

    我们添加了另一个 div 元素代表影子,这样我们可以单独的为其设置动画。

    要在这里增加预期,我们需要让小球快速掉入场景中。通过适配各百分比的时间点来实现,小球在开始点和第一个动作之间没有移动。

    CSS

    @-webkit-keyframes example { 0% { -webkit-transform: translateY(-300px) scaleY(1.2); } 35% { -webkit-transform: translateY(-300px) scaleY(1.2); } /* Same position as 0% */ 65% { -webkit-transform: translateY(0px) scaleY(1.2); } /* Starts moving after 35% to this position */ 67% { -webkit-transform: translateY(10px) scaleY(0.8); } 85% { -webkit-transform: translateY(-100px) scaleY(1.2); } 100% { -webkit-transform: translateY(0px); } }

    1
    2
    3
    4
    5
    6
    7
    8
    @-webkit-keyframes example {
       0% { -webkit-transform: translateY(-300px) scaleY(1.2); }
       35% { -webkit-transform: translateY(-300px) scaleY(1.2); } /* Same position as 0% */
       65% { -webkit-transform: translateY(0px) scaleY(1.2); }    /* Starts moving after 35% to this position */
       67% { -webkit-transform: translateY(10px) scaleY(0.8); }
       85% { -webkit-transform: translateY(-100px) scaleY(1.2); }
       100% { -webkit-transform: translateY(0px); }
    }

    在动画的35%的时间点前,小球在场景中的位置没有发生变化,没有移动。然后在 35% 到 65%,小球忽然出现在舞台上,剩下的动画紧接着跟上。

    也可以使用动画延迟(animation-delay)来实现预备:

    CSS

    div { -webkit-animation-delay: 1s; }

    1
    2
    3
    div {
    -webkit-animation-delay: 1s;
    }

    设备断点

    几个月前,也就是在被爆出苹果公司在中国血汗工厂不久,我看到一名评论员发的 tweet。他们的 tweet 包含了一种风格:「对于响应式 web 设计,所有的视口在 iOS9 上都是可用的」。

    什么?什么?

    然后我想起和 Sara Soueidan 的一次谈话,她把内容断点描述成了响应式设计的「惊天秘密」。我突然想到:有很多人盯着被选定的专门设备,把它们特定的屏幕尺寸做为「响应式 web 设计」的目标——每当一家技术公司发布一款内置浏览器的设备时,都要「改变这个规划」,那么,成千上万的 web 设计师可能要骂「oh fuck me」了。想象一下!

    “OHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKMEOHFUCKME”

    我没有假定你是在此误解下工作的,但适用于一种情况,你有一个朋友,他需要了解真相:适应于具体设备的具体尺寸的断点,不属于响应式设计。这种行为是站不住脚的,它行不通。如果你没有针对某种设备做过调整的设计,具有完整的呈现,那一定是好运气在作怪。这真不算是一个策略。

    你应该确保设计是流动的,仅仅在内容遭遇呈现问题的地方插入断点(或「tweak point」)。在这些点之间,设计应该无缝地展开或折叠,满足任何出现在这些范围内的设备尺寸的要求。

    我对评论员和意见领袖说,我认为他们要说的话和真正的响应式设计没有关系。他答道,「理论上我是认可的,但是移动体验成功的关键在于理解现实世界」。也就是说——没有说明白!我很想知道真正的现实世界是什么样子……有一天我必须参观一下。

    总结苹果不是唯一一家制作带有内置浏览器设备的厂商。真的不是。

    舞台

    图片 6

    现在试试把舞台添加到场景中,将动画放入环境中。回顾一下迪士尼的电影,如果去掉了奇妙的背景会变成什么样?这是魔法的半壁江山。

    舞台也是吸引注意的关键元素。与剧院的舞台一样,光线总是照射到最重要的区域。舞台应该加入到视野中。除了弹球,我为弹球的降落添加了一个简单的背景。这样看客就知道舞台的中央会出现动画,场景也就可以从一片大白雪(白色区域)中脱颖而出了。

    Fuck CSS,大家开干吧

    感谢你们容忍我对 CSS 作者的看法。如果你是 web 可访问性和音乐(谁不是呢)的粉丝,你可能乐于支持一些优秀的组织,请查看 A11Y ROCKS。

    本文由金沙国际官网发布于web前端,转载请注明出处:时要避免的几个地方,CSS动画学习指南

    关键词:

上一篇:隔行扫描算法,的交互式地铁线路图

下一篇:没有了