javascript之原型和原型链

众所周知CSS技术我们虽然很熟悉,在使用的过程却很容易被困住,这让我们在新问题出现的时候变得很不利。随着web继续不断地发展,对于新技术新解决方案的要求也会不断增长。

因此,作为网页设计师和前端开发人员,我们别无选择,必须熟悉我们手上的工具,做到知己知彼,这样才能百战不殆。

这就意味着有那么些个特别的货,虽然平常都不怎么会用上,但是一旦某个地方需要它们了,他们就真的是特么得合适不过来了呢。

今儿,我就准备向大伙儿介绍一些你们之前可能很少见过CSS家伙们。他们每个都是度量的单位,类似pixel 和 em 这样的,但是很有可能你之前从来就没听过这些家伙们!就让我们一起来交个朋友吧~

1、rem

我们首先介绍下和我们熟悉的很相似的货。em 被定义为相对于当前对象内文本的字体大小。炒个栗子,如果你给body小哥设置了font-size字体大小,那么body小哥的任何子元素的1em就是等于body设置的font-size。

<body>    <div class="test">
Test</div></body>

body {    font-size: 14px;}div {    font-size: 1.2em; 
// calculated at 14px 
* 1.2, or 16.8px}

你看,这里div这娃的字体大小是1.2em。解释来说,就是他从body爹爹那里继承的字体大小(这里是14px)的1.2倍,结果就是16.8px。

但是,如果你用em一层一层级联得定义嵌套元素的字体大小又会花生什么事情呢?在下面这一小段代码里我们应用了和上面一样一样的CSS,每一个div都从它上一级父元素继承了字体大小,并且逐渐得增加。

<body> <div>  Test 
<!-- 14 * 1.2 = 16.8px --> <div>Test 
<!-- 16.8 * 1.2 = 20.16px --> <div> Test 
<!-- 20.16 * 1.2 = 24.192px -->  </div>   </div>    </div>
</body>

虽然在某些地方这正是我们想要的,但是通常情况下我们还是希望就依赖单一的相对度量单位就好。这时候嘛,我们就可以使用 rem 了。 ‘r’是“root”的缩写,意思就是1rem等于根元素的字体大小;大部分情况下,根元素就是<html>元素了。

html {    
font-size: 14px;}div {    
font-size: 1.2rem;}

这样在上面的那三个嵌套的div娃们的字体大小都是 1.2*14px = 16.8px 了。

2、适用于网格布局

Rems 不仅仅只是在设置字体大小上很方便。再炒个栗子,你可以用基于html根元素字体大小的rem作为整个网格布局或者UI库的大小单位,然后在其他特定的地方用em单位。这样将会给你带来更多的字体大小和伸缩的可控性,

.container {    width: 70rem; 
// 70 * 14px = 980px}

概念上来说,这个方法的思想就是让你的界面根据你的内容进行缩放。但是,这样做并不是对所有的情况都有意义。

3、vh and vw

响应式Web设计离不开百分比。但是,CSS百分比并不是所有的问题的最佳解决方案。CSS的宽度是相对于包含它的最近的父元素的宽度的。但是如果你就想用视口(viewpoint)的宽度或者高度,而不是父元素的,那该肿么办? 这就是 vh 和 vw 单位为我们提供的。

1vh 等于1/100的视口高度。栗子:浏览器高度900px, 1 vh = 900px/100 = 9 px。同理,如果视口宽度未750, 1vw = 750px/100 = 7.5 px。

可以想象到的,他们有很多很多的用途。比如,我们用很简单的方法只用一行CSS代码就实现同屏幕等高的框。

.slide {    
height: 100vh;}

假设你要来一个和屏幕同宽的标题,你只要设置这个标题的font-size的单位为vm,那标题的字体大小就会自动根据浏览器的宽度进行缩放,以达到字体和viewport大小同步的效果,有木有?!

4、vmin and vmax

vh和 vm 依据于视口的高度和宽度,相对的,vmin 和 vmax则关于视口高度和宽度两者的最小或者最大值。比如,浏览器的宽度设置为1100px,高度设置为700px, 1vmin = 1px, 1vmax = 11px。

如果宽度设置为800px,高度设置为1080px, 1vmin就等于8px, 1vmax则未10.8px。
那么问题来了,我们应该在什么场景下使用这两个单位呢?
假设有一个元素,你需要让它始终在屏幕上可见。

只要对其高度和宽度使用vmin单位,并赋予其低于100的值就可以做到了。再来个栗子,可以这样定义一个至少有两个边触摸到屏幕的方形:

.box {    
height: 100vmin;    
width: 100vmin;}
需要web前端学习资料的同学,加群434623999

时间: 2024-10-27 06:39:38

javascript之原型和原型链的相关文章

javascript中的构造函数和原型及原型链

纯属个人理解,有错误的地方希望大牛指出,以免误人子弟 1.构造函数: 构造函数的作用 : 初始化由new创建出来的对象    new 的作用: 创建对象(空对象) new 后面跟的是函数调用,使用new来调用函数,跟普通的直接调用函数主要的不同: 就是 this 的指向不同了 , 再就是 会自动的返回新创建的对象 什么是原型?        原型的作用:就是为了实现继承!  一个对象的原型就是它的构造函数的prototype属性的值. 在讨论原型的时候,是指的 对象和原型对关系 prototyp

Javascript 原型和原型链

先来了解一下Javascript中的原型:”原型也是一个对象,原型可以用来实现继承...“ 对于 原型,构造函数,以及实例之间的关系:“每个(构造)函数都有一个原型属性,原型对象都包含一个指向构造函数的指针,每个实例都包含一个指向原型对象的指针.” 举个例子: 1 function Student(name) { 2 this.name = name; 3 } 4 var stu = new Student("xiao ming"); Student 函数有个prototype的属性,

介绍下Javascript原型和原型链的特点?

JavaScript原型: 每个对象都会在其内部初始化一个属性,就是prototype(原型). 原型链: 当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念. 特点: JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本.当我们修改原型时,与之相关的对象也会继承这一改变.

JavaScript学习总结(五)原型和原型链详解

转自:http://segmentfault.com/a/1190000000662547 私有变量和函数 在函数内部定义的变量和函数,如果不对外提供接口,外部是无法访问到的,也就是该函数的私有的变量和函数. <script type="text/javascript"> function Box(){ var color = "blue";//私有变量 var fn = function() //私有函数 { } } </script> 这

javascript面向对象系列5——知识点(原型和原型链)

基本概念 [原型链]每个构造函数都有一个对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针.那么,如果原型对象等于另一个原型的实例,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针.如果另一个原型又是另一个原型的实例,那么上述关系依然成立.如此层层递进,就构成了实例与原型的链条. [原型对象]这个对象包含可以由特定类型的所有实例共享的属性和方法.所有引用类型默认都继承了Object,而这个继承也是通过原型链实现

javascript中的原型与原型链

javascript是一门面向对象的语言,但它却没有像其他面向对象的语言(如java,C++)有类的概念,也没有基于类的继承体系.但是它有自己独特的继承方式,那就是基于原型和原型链的继承. 当我们创建一个对象时,每个对象在生成之后都有一个隐式的属性__proto__(非规范,暂且这么叫吧),该属性指向该实例的原型对象,并共享其原型对象上的属性和方法. 下面分析下不同创建对象的方式所对应的__proto__属性指向的不同. 1.用对象字面量创建对象. var a={x:1}; console.lo

JavaScript 深入之从原型到原型链(转载)

构造函数创建对象 我们先使用构造函数创建一个对象: function Person() { } var person = new Person(); person.name = 'name'; console.log(person.name) // name 在这个例子中,Person就是一个构造函数,我们使用new创建了一个实例对象person. 很简单吧,接下来进入正题: prototype 每个函数都有一个prototype属性,就是我们经常在各种例子中看到的那个prototype,比如:

javascript 原型 和 原型链

最近几天,好些新同事来问原型,原型链啥的.本身作为菜鸟的我好像也没有好好整理过这个,这里写写自己的理解. 原型 大家都知道,JavaScript 不包含传统的类继承模型,而是使用 prototype 原型模型.代码实现大概是这样子的 function Student(name){ this.name = name; } var Kimy = new Student("Kimy"); Student.prototype.say = function(){ console.log(this

理解javascript原型与原型链

想要学习javascript中的面向对象编程(oop),首先就要了解原型及原型链. 先来个例子,了解原型 1 function Foo(y){ 2 this.y = y; 3 } 4 Foo.prototype.x = 10; 5 Foo.prototype.calculate = function(z){ 6 return this.x+this.y+z; 7 }; 8 var b = new Foo(20); 9 alert(b.calculate(30)); js中除了基本数据类型,一切皆

【JavaScript】深入理解JavaScript之强大的原型和原型链

由于JavaScript是唯一一个被广泛使用的基于原型继承的语言,所以理解两种继承模式的差异是需要一定时间的,今天我们就来了解一下原型和原型链. AD: hasOwnProperty函数: hasOwnProperty是Object.prototype的一个方法,它可是个好东西,他能判断一个对象是否包含自定义属性而不是原型链上的属性,因为hasOwnProperty 是 JavaScript 中唯一一个处理属性但是不查找原型链的函数. // 修改Object.prototype Object.p