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

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

您的位置:金沙国际官网 > web前端 > 关于HTML5的11个让人难以接受的事实,推荐7本不错

关于HTML5的11个让人难以接受的事实,推荐7本不错

发布时间:2019-11-05 03:09编辑:web前端浏览(137)

    关于HTML5的11个让人难以接受的事实

    2012/01/01 · HTML5 · 2 评论 · HTML5

    英文:11 hard truths about HTML5,编译:WebAppTrend

    HTML5为Web开发者提供了很多强大的新特性,但是它的一些特定的限制会让它无法和本地应用匹敌。

    HTML5整合进了很多新的特性,并且有可能提升Web编程模式。和每一个阅读技术资讯的人所知道的一样,没有任何一样东西能像HTML5对互联网造成更多改变。在代码中加入一些HTML5,网站会变得更快更炫。但是HTML5能为那些想要要网络上实现本地应用表现的人做什么可能不在此列了。

    在享受了HTML5的新标签以及APIs之后,现在已经是时机来承认HTML5模式确实是有一些限制的。这些限制不但会让我们对HTML5的幻梦破灭,还有可能让我们在某些场合不再使用HTML5。

    事实上是,尽管HTML5确实有很强大的功能,但它并不能解决所有问题。它的一些附加功能是非常强大的,能让Web apps成为native app的强有力的对手,但是安全问题、本地数据存储的限制、同步问题以及政治问题都会让我们减小对它的期望。毕竟,任何技术都是有其限制的。

    下面是Web开发者需要接受的一些关于HTML5的事实。

     事实1:安全是一场噩梦

    客户端计算最根本的问题是用户最终拥有了对机器上运行的代码的控制权。在Web apps中,当浏览器拥有一个很强大的调试工具的时候,这种控制权比以往更容易被滥用。

    当在浏览器中集成了一个Javascript的调试器比如Firebug,任何对Facebook、Google以及其他网站感兴趣的人都可以插入断点来查看代码。这对于了解网站是如何运行的是非常有利的,但对于安全问题来说却是一场噩梦。

    想象有个变量的值是你想要改变的,Firebug或者其他一个浏览器调试器可以让你很容易地将数据改成你想要的任何数据。你想要通过改变你的地理位置来捉弄一下你的朋友吗?那么你可以修改浏览器中的经度和维度变量,让浏览器“处于”世界上的任何位置。所有你的Web应用的neat features都可以被修改,浏览器使得这样的修改比在本地应用中更为容易。

    对于引发的安全问题,也是有些限制的。一些Javascript工具比如Google Web Toolkit和标准的编译器一样复杂,它们的输出是非常令人费解的。但是一些工具比如JavaScript Deminifier能解决这个问题。

    威胁当然也跟应用性质有关。一个人通过改变浏览器上显示的经纬度来和朋友开玩笑说在环游世界的途中是一回事,而获得其他人的权限又是另外一回事了,这会带来威胁。一旦涉及到金钱,情况会更糟糕。所有这些都意味着基于客户端的HTML5是不能用来处理敏感数据的,每个人都应该对自己的能力加以警醒。

    事实2:本地数据存储是有限制的

    浏览器中隐藏的本地数据库让Web应用更容易在电脑上缓存数据。对任何一个在浏览器中享受这种台式机体验的人来说,这些数据库可以节省带宽,提升性能。然而它们肯定比不上本地应用的数据的强大功能。

    HTML5的数据存储能力毫无疑问是很重要的功能,但是你仍然不能将存储的数据迁移到另外一台机器上,或是制作副本、备份、用另外一个应用打开。所有这些数据都是隐藏在浏览器之下的。

    某种程度上说,这是最糟糕的一种情况。因为你要承担存储这些数据库的所有责任而不能对它有任何控制。

    一些最新的浏览器可以让你看到在你的机器上创建了哪些数据库,但这些信息是有限的。Safari甚至可以让你能够删除数据库,但是你不能浏览这些信息或是将它们迁移到另外一台机器上,这些文件在设计之初就没有让它能够很容易迁移,尽管你可以做到这一点,如果你知道到哪里找这些文件的话。

    你同样不能深入到文件中看到底存储了什么。当然,一个程序员可以看懂这些文件,但前提是他们研究清楚了文件格式并且做一些hacking。这些文件不像表单或者文本可以很容易地荣任何编辑器打开,使得它们不像本地应用那样容易被人们读懂。

    事实3:本地数据可以被操纵:

    用户可能并不拥有对数据的控制权,但是网站同样也被限制不能处理用户数据。用户换浏览器了?用户换机器了?很多Web开发者对此都无能为力。因为同步问题,他们不能让用户创建更多数据。

    Web开发者也需要担心本地数据库的安全。尽管没有工具可以让用户可以很容易修改本地数据并升级权限,但服务器同样也没有能力去阻止用户做到。所有因为运行用户修改Javascript代码的安全漏洞同样会影响数据库。它们门户大开,等着有人写一个Greasemonkey脚本或一些本地代码去更改数据。

    事实4:离线数据对同步是一场噩梦

    HTML5的本地数据存储极大提升了离线使用Web应用的能力。唯一的问题是数据同步。

    如果一个Web应用连接到网络上,它可以持续地将数据存储到云中去。而当应用离线时,应用中发生的数据就不能存储到云中。如果一个人切换了浏览器或者使用了不同的机器,就会出现副本,这时同步就会成为一个大问题。更糟糕的是,时钟本身就可能是不同步的,使得发现最新被保存的数据是不现实的。

    当然,这对本地应用来说也一直都是一个问题,但是在本地应用中,为同步负责的是人,他可以通过查看文件名并改变日期来进行同步。但是因为HTML5并没有给用户对隐藏在浏览器之下的数据库的控制权,开发者必须提供用户界面让用户通过这个界面来管理同步问题。

    这并非是一个完全棘手的问题。开发人员可以通过使用版本控制系统来处理这个问题,而现今的版本控制系统在处理这些问题上已经变得越发复杂了。但拥有这项技术并不意味着这是一个很容易使用的解决方案。合并不同GIT库是件很费时间的事情。HTML5开发者们需要先处理好这些问题,才能管理HTML5 Web应用的同步。

    事实5:云端什么都没有向你承诺:

    为HTML5将数据存储在云端而带来的所有结构性的问题来责备HTML5实际上不是件很公平的事情,但云端是一个必须的部分,因为云省去了安装软件和备份数据的麻烦。

    由于HTML5本地数据存储的限制,大量Web应用存储仍然要保留在服务器端,但这可能是灾难性的。就在最近Facebook决定将不再使用一个基于Linux的插件来上传照片,结果,这个插件去掉的,同样被去掉的是通过这个插件上传的照片

    这样的例子比较少见,但是因为各种原因,它们正变得越来越多。你能确保那个可爱地免费提供他们的一切HTML5应用的新兴公司在几年后甚至几个月后还存在吗?你只能自求多福。

    情况还更糟糕。正如很多Web应用所明确说明的那样,这些数据并不是你的,在大数情形下,你不能诉诸法律来恢复数据。有些更离谱的服务条款甚至说数据可以“没有任何原因”就被删除。

    HTML5不仅没有避免这个问题,它的结构实际上是保证了任何由你的浏览器缓存的数据都会存储在云端,这些数据是脱离了你的控制的。HTML5的炒作说这是它的一个优势特性,但这实际上却很容易造成不利影响。

    事实6:强制升级并非是每个人都想要的

    有个故事,或许是杜撰的,说一个人使用Gmail账户和酒吧里认识的人保持着随意的联系。当Google+出现以后,所有的历史记录都出现了,因为Google+在论坛里自动连上了那些旧的地址。每天,这些旧名字和旧面孔都会出现询问是否要加入到论坛中去。

    当Web应用公司需要升级的时候,他们会将所有人一次性升级。尽管这据说是为了让用户不再受升级安装文件之苦,但对于那些不想使用新特性的人来说,这确是一场噩梦。这不像上面是一个关于人们隐私的问题。新软件可能因为新旧软件包之间的依赖关系而经常崩溃。

    事实7:Web Workers并不会处理优先级

    Web Workers(译者注:一种新的 JavaScript 编程模型)是HTML5的一个非常耐人寻味的特性。与其去使用Javascript传统的wait、delay和pause命令,现在Web开发者可以拆分他们的命令并且整合到Web Workers的CPU hogs中。换句话说,HTML5 Web开发者可以让浏览器表现得像操作系统一样。

    但问题在于,Web Workers并没有复制操作系统的所有特性。尽管它提供了一种方式来讲负载分支并分离,但是却没有方法来管理负载或是设置优先级。API只是让消息传入或者传出Worker对象。这就是它做的一切了,剩下的都交给浏览器了。

    CPU丰富的应用比如code crackers会潜入流行网站的后台吗?用户被交给会周期性被窃取的网站了吗?病毒已经附在一切有用的软件上了,那么攻破网站就只是时间问题了。而用户面对这一切能做的很少,因为他们没有办法去监测或者跟踪Worker objects做了什么。电脑被重定向到指定网页的时候只会越来越慢。

    事实8:格式不兼容比比皆是

    HTML5引入了<audio>和<video> 标签,第一眼看上去,它们和图像标签一样好用。只要在其中加入一个URL,浏览器就会引入数据流。然而,如果它真有这么简单的话,为什么我浪费了两个星期来让所有主要的浏览器可以播放基本的音频文件呢?

    个别浏览器构建者只实现了部分而不是全部的音频视频格式确实不是HTML5委员会的错。大家都是人,都想要争夺统治权。往往在一个浏览器上工作正常的文件到了另外一个浏览器上却不能工作了。开发者要如何测试这一点呢?API开发者非常聪明,他们加入了canPlayType函数,但就是这个函数也不是所有浏览器都支持的。

    事实9:各浏览器的实现是独立的

    HTML5的田园诗般的愿景是一回事,其实现的蹩脚的现实是另一回事。诚然,程序员正在尽他们最大努力来实现架构师的梦想,但就是有一些标签和对象无法正常工作。

    例如,有很多理由去喜欢HTML5的地理定位API。它提供了对隐私的一定程度的包含,对精确度也有控制。要是它能一直一贯地工作该有多好——有的浏览器就会总是超时,这个浏览器还是不太聪明,因为它应该知道台式机上是没有GPS芯片的。

    最后,人们会去抱怨浏览器没有完全实现HTML5的特性,而不是去责备API本身的结构问题。这一事实凸显了Web开发者在开发基于HTML5的Web应用时所面临的挑战。

    事实10:硬件idiosyncracies带来新的挑战

    抱怨某些浏览器构建者超出了职责要求而提供更好的性能表现似乎也不公平,但这并非是恩将仇报。一个法拉利拥有者在绕过了一个灯杆以后,他就会发现有时候额外的动力并非总是好事。

    Microsof通过将IE和低端硬件驱动整合而提升了IE浏览器中画布对象(Canvas object)的性能。它甚至做了一些游戏比如pirateslovedaisies.com来显示其性能。

    但现在程序员们需要注意这些附加功能是否能够实现,并且这些代码的运行速度也是无法保证的。

    例如,pirateslovedaisies.com的游戏设计者设计了一个开关来开启或者关闭IE支持的特性。但是,有没有一个API来告诉你这些特性是什么呢?没有。最简单的方式是通过浏览器名字来进行测试并估算帧速率。很多游戏开发者都有多年经验来了解可用硬件的范围,唯一的解决方法就是禁止创新,但这将是Web开发者又要解决的一个新的问题。

    事实11:政治一直都存在

    有个叫Ian Hickson的人,是HTML5标准的主要起草者,也是生命的最高独裁者(the Supreme Dictator for Life)。我想他们这是在开玩笑,因为这样的头衔实在太不匹配了。标准的编写者只是在提出建议,浏览器公司的编码天才们才是最终做出决定的人。他们可以选择实现或者不实习某个特性,然后Web开发者就要去测试结果是否稳定。几年以后,标准就会根据与实现程度的匹配情况做出改变。

    很多Javascript开发者将兼容性问题都留给了开发代码库的人,比如jQuery。这些层让我们不必去了解不同浏览器之间的差别。但是,这些代码在将来是否足够健壮?只有时间才会知道。

    这个议题凸显了这个领域中最根本的问题。我们想要自由、创造性以及因为浏览器间的激烈竞争而产生的丰富特性。创新的脚步非常快,但是因为浏览器开发者都争相添加新的特性以赢得先机,使得各个浏览器之间有更多的不同。

    但我们希望能有一个统一的指挥者这样就能获得稳定性。但是,对于独裁和自治间的争斗,从来都没有一个理想的解决方式。与其为这些差异头疼,我们或许想要听听Winston Churchill对下议院所说的话:“事实上,民主是一种最糟糕的政府形式,除非其他的形式都经过了一次又一次的试验。”

     

    赞 收藏 2 评论

    图片 1

    React Native基础&入门教程:初步使用Flexbox布局

    2018/07/04 · JavaScript · React Native

    原文出处: 葡萄城控件   

    在上篇中,笔者分享了部分安装并调试React Native应用过程里的一点经验,如果还没有看过的同学请点击React Native基础&入门教程:调试React Native应用的一小步》。

    在本篇里,让我们一起来了解一下,什么是Flexbox布局,以及如何使用。

    一、长度的单位

    在开始任何布局之前,让我们来首先需要知道,在写React Native组件样式时,长度的不带单位的,它表示“与设备像素密度无关的逻辑像素点”。

    这个怎么理解呢?

    我们知道,屏幕上一个发光的最小点,对应着一个pixel(像素)点。

    假设下面三个矩形,代表三个屏幕大小一样的设备,但是,它们拥有的分辨率(resolution)不同:

    图片 2

    图1.相同尺寸的设备 不同的分辨率

    图上的每一个小格子,其实就代表了一个像素(pixel)。可以看到,一个像素点的大小,在这个三个物理尺寸一样但拥有不同分辨率的设备上,是不一样的。

    如果我们以像素为单位来设置一个界面元素的大小,比如说2px的高度,那么这2px的长度上面的设备中就会是下面这个样子:

    图片 3

    图2.不同分辨率下的2px实际高度

    它们真实显示出的长度是不一样的。

    我们想要一种长度单位,在同样物理尺寸大小的屏幕上(不论分辨率谁高谁低,只要物理尺寸大小一样即可),1个单位的长度所代表的物理尺寸是一样的。这种单位就应该是独立于分辨率的,把它起一个名字叫做 density-independent pixels,简称dp。这其实就是Android系统中所使用的长度单位。

    举例来说,2dp宽,2dp高的内容,在不同分辨率但屏幕尺寸一样的设备上所显示出的物理大小是一样的。(一个题外话:有些Android开发者建议所有可点击的按钮,宽高都不应该少于48dp。)

    图片 4

    图3. 2dp * 2dp大小的内容 在同样尺寸的屏幕中所占据的物理大小一致

    Android中字体大小使用另外一个单位,叫做scale independent pixels,简称sp。这个单位和dp很类似,不过它通常是用在对字体大小的设置中。通过它设置的字体,可以根据系统字体大小的变化而变化。

    pixel与dp存在一个公式:px = dp * (dpi/160)。

    dpi表示dot per inch,是每英寸上的像素点,它也有个自己的计算公式,具体这里就不展开了。只需要知道我们之所以要使用一个独立于设备分辨率的单位,主要是为了让应用在不同分辨率的设备中,看起来一致。

    在RN中,同样也拥有一个类似于dp的长度单位。如果我们想知道自己的屏幕以这种长度的计量下是多少单位,可以通过引入react-native包中的Dimensions拿到,同时还可以查看本机的像素比例是多少。

    import {   Text,   View,   Dimensions,   PixelRatio } from 'react-native'; const { height, width } = Dimensions.get('window'); const pxRatio = PixelRatio.get(); <View style={styles.container}>   <Text style={styles.welcome}>     {`width: ${width}, height: ${height}`}   </Text>   <Text style={styles.welcome}>     {`pixel radio: ${pxRatio}`}   </Text> </View>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import {
      Text,
      View,
      Dimensions,
      PixelRatio
    } from 'react-native';
    const { height, width } = Dimensions.get('window');
    const pxRatio = PixelRatio.get();
     
    <View style={styles.container}>
      <Text style={styles.welcome}>
        {`width: ${width}, height: ${height}`}
      </Text>
      <Text style={styles.welcome}>
        {`pixel radio: ${pxRatio}`}
      </Text>
    </View>

    显示如下:

    图片 5

    图4. 当前手机的屏幕信息

    它反映出,当前手机屏幕的宽度占据360个单位,高度占据640个单位。像素比例是3,实际上这就是一个 1080 * 1920 像素的手机。其中1080 = width * pixelRadio, 1920 = height * pixelRatio

    二、Flexbox布局

    Flexbox布局,也就是弹性盒模型布局。也许有Android开发经验的朋友还对LinearLayout,RelativeLayout,FrameLayout等布局方法记忆犹新,但是对于更了解CSS的Web开发者而言,使用flexbox布局肯定会让他感受到更加顺手的开发体验。

    RN中的flexbox布局,其实源于CSS中的flexbox(弹性盒子)布局规范。其实它在CSS中还处于Last Call Working Draft(最终征求意见稿)阶段,但是主流浏览器对它都有了良好的支持。在RN中,几乎完全借鉴了其中的布局语义,同时更没有浏览器兼容的烦恼,用起来是很方便的。RN中只是把CSS的属性用camelCase写法代替连字符写法。后面还还会看到,默认的flex方向也不同。

    理解弹性盒模型布局,首先要知道四个最基本的概念:Flex Container(容器),Flex Item(项),Flex Direction(方向)和Axis(轴)。

    1.Flex Container

    就是包裹内容的容器,需要把它的display设置为‘flex’(或者’inline-flex’)。

    以下6个属性设置在容器上。

    1. alignItems 指定item在侧轴上的对齐方式
    2. alignContent 指定item在多条轴上的对齐方式
    3. flexDirection 指定主轴方向
    4. flexWrap 指定item在主轴方向如何换行
    5. flexFlow flexDirection属性和flexWrap属性的简写形式
    6. justifyContent 指定item在主轴上的分布方式

    2.Flex Item

    容器做直接包裹的元素。所谓弹性盒布局,通常想要布局的东西就是它们。

    以下6个属性设置在项目上。

    1. alignSelf 每个item可以单独设置对齐方式 覆盖Flex Container给设置的alignItems
    2. order 指定item排列顺序 数字越小越靠前
    3. flexGrow 指定item的拉伸比例
    4. flexShrink 指定item的压缩比例
    5. flexBasis 指定item在分配多余空间之前,占主轴的大小
    6. flex 其实是 flexGrow flexShrink flexBasis的简写

    3.Flex Direction and Axis

    在弹性盒子中,项目默认沿着main axis(主轴)排列,和主轴垂直的轴叫做cross axis,叫做侧轴,或者交叉轴。

    在盒子中,排列项目又四个方向:水平的正反两个,垂直的正反两个。

    结构代码:

    <View> <View style={styles.row}> <Text style={styles.item}>1</Text> <Text style={styles.item}>2</Text> <Text style={styles.item}>3</Text> </View> <View style={styles.rowReverse}> <Text style={styles.item}>1</Text> <Text style={styles.item}>2</Text> <Text style={styles.item}>3</Text> </View> <View style={styles.column}> <Text style={styles.item}>1</Text> <Text style={styles.item}>2</Text> <Text style={styles.item}>3</Text> </View> <View style={styles.columnReverse}> <Text style={styles.item}>1</Text> <Text style={styles.item}>2</Text> <Text style={styles.item}>3</Text> </View> </View>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <View>
        <View style={styles.row}>
            <Text style={styles.item}>1</Text>
            <Text style={styles.item}>2</Text>
            <Text style={styles.item}>3</Text>
        </View>
        <View style={styles.rowReverse}>
            <Text style={styles.item}>1</Text>
            <Text style={styles.item}>2</Text>
            <Text style={styles.item}>3</Text>
        </View>
        <View style={styles.column}>
            <Text style={styles.item}>1</Text>
            <Text style={styles.item}>2</Text>
            <Text style={styles.item}>3</Text>
        </View>
        <View style={styles.columnReverse}>
            <Text style={styles.item}>1</Text>
            <Text style={styles.item}>2</Text>
            <Text style={styles.item}>3</Text>
        </View>
    </View>

    样式代码:

    row: { backgroundColor: '#ffe289', flexDirection: 'row' }, rowReverse: { flexDirection: 'row-reverse' }, column: { backgroundColor: '#ffe289', flexDirection: 'column' }, columnReverse: { flexDirection: 'column-reverse' },

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    row: {
    backgroundColor: '#ffe289',
    flexDirection: 'row'
    },
    rowReverse: {
    flexDirection: 'row-reverse'
    },
    column: {
    backgroundColor: '#ffe289',
    flexDirection: 'column'
    },
    columnReverse: {
    flexDirection: 'column-reverse'
    },

    图片 6

    图5. flexDirection

    由于网上关于flex布局讲解的资源挺丰富的,读者可以参考最后给出的连接,或者自行上网搜索,CSS中的和RN是相通的。

    这里主要分享个人在学习过程中,觉得容易引起混淆的两个小点。

    首先,justify-content和align-content这两个属性,可能比较容易搞错它们作用的方向。

    其中,justify-content是设置items沿着主轴上是如何分布的。align-content是设置items沿着侧轴如何对齐的。

    还是拿之前的例子,默认情况下,flex的方向是column(这个与移动端与web页面不同,在web页面用CSS设置flex布局,默认的fiex-direction是row,即水平从左往右)。

    在移动端,主轴默认是垂直方向,从上往下。让我们把它的高度设置高一点,放3个item在里面:

    结构代码:

    <View> <View style={styles.defaultFlex}> <Text style={styles.item}>1</Text> <Text style={styles.item}>2</Text> <Text style={styles.item}>3</Text> </View> </View>

    1
    2
    3
    4
    5
    6
    7
    <View>
        <View style={styles.defaultFlex}>
            <Text style={styles.item}>1</Text>
            <Text style={styles.item}>2</Text>
            <Text style={styles.item}>3</Text>
        </View>
    </View>

    样式代码:

    defaultFlex: { height: 300, backgroundColor: '#ffe289', display: 'flex' }

    1
    2
    3
    4
    5
    defaultFlex: {
    height: 300,
    backgroundColor: '#ffe289',
    display: 'flex'
    }

    图片 7

    图6. 默认的flex

    justify-content设置items在主轴方向的如何分布,比如,如果我们加上justifyContent: ‘space-between’

    defaultFlex: { height: 300, backgroundColor: '#ffe289', display: 'flex', justifyContent: 'space-between' }

    1
    2
    3
    4
    5
    6
    defaultFlex: {
    height: 300,
    backgroundColor: '#ffe289',
    display: 'flex',
    justifyContent: 'space-between'
    }

    items就沿主轴分开了。

    图片 8

    图7. justifyContent: ‘space-between’

    如果我们设置alignItems: ‘center’,项目就沿侧轴(这里就是水平轴)居中了。注意这两个属性是可以同时起作用的。

    图片 9

    图8. justifyContent: ‘space-between’ 以及 alignItems: ‘center’

    然后,值得指出的是,flex这个属性,其实是flexGrow, flexShrink, flexBasis(对应的CSS属性flex-grow, flex-shrink和flex-basis)三个属性的结合。

    我们通常在移动端看到的flex:1这个设置,其实是对flex-grow的设置。后者的默认值为0。使用把flex-grow设置为正整数的方法,可以让item按比例分布,或者在其他item为固定大小时撑满剩余的盒子空间,就仿佛具有弹性一样。

    结构代码:

    <View style={styles.container}> <View style={styles.flex1}></View> <View style={styles.flex2}></View> <View style={styles.flex3}></View> </View>

    1
    2
    3
    4
    5
    <View style={styles.container}>
        <View style={styles.flex1}></View>
        <View style={styles.flex2}></View>
        <View style={styles.flex3}></View>
    </View>

    样式代码:

    container: { flex: 1 }, flex1: { // height: 99, flexGrow: 1, backgroundColor: 'orange', }, flex2: { flexGrow: 2, backgroundColor: 'lightblue', }, flex3: { flexGrow: 3, backgroundColor: 'green', },

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    container: {
    flex: 1
    },
    flex1: {
    // height: 99,
    flexGrow: 1,
    backgroundColor: 'orange',
    },
    flex2: {
    flexGrow: 2,
    backgroundColor: 'lightblue',
    },
    flex3: {
    flexGrow: 3,
    backgroundColor: 'green',
    },

    图片 10

    图9. 按比例分布

    需要注意的是,如果父容器的尺寸为零(即没有设置宽高,或者没有设定flex),即使子组件如果使用了flex,也是无法显示的。

    所以这里最外层的使用了flex布局的,flex:1,表示让它占据了垂直的整个空间。

    三、小小实战演练

    让我们来简单使用flex布局,对之前的例子稍加调整,实现一个头部,底部固定高度,中间内容占满剩下的屏幕的布局:

    第一步,调整结构:

    <View style={styles.container}> <View style={styles.header}></View> <View style={styles.body}></View> <View style={styles.footer}></View> </View>

    1
    2
    3
    4
    5
    <View style={styles.container}>
        <View style={styles.header}></View>
        <View style={styles.body}></View>
        <View style={styles.footer}></View>
    </View>

    调整样式:

    container: { flex: 1 }, header: { height: 60, backgroundColor: 'orange', }, body: { flexGrow: 1, backgroundColor: 'lightblue', }, footer: { height: 60, backgroundColor: 'green', }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    container: {
    flex: 1
    },
    header: {
    height: 60,
    backgroundColor: 'orange',
    },
    body: {
    flexGrow: 1,
    backgroundColor: 'lightblue',
    },
    footer: {
    height: 60,
    backgroundColor: 'green',
    }

    图片 11

    图10. 有头尾的布局

    第二部,给header添加标题。

    我们让头部的分成3部分,左边模拟一个返回按钮,中间显示标题文字,右边模拟一把小叉:

    <View style={styles.header}> <Text style={styles.back}>返回</Text> <Text style={styles.title}>这是一个标题</Text> <Text style={styles.exit}>×</Text> </View>

    1
    2
    3
    4
    5
    <View style={styles.header}>
        <Text style={styles.back}>返回</Text>
        <Text style={styles.title}>这是一个标题</Text>
        <Text style={styles.exit}>×</Text>
    </View>

    需要把header的flexDirection设置为水平方向:

    header: { height: 60, backgroundColor: 'orange', flexDirection: 'row', alignItems: 'center' }, back: { color: 'white', marginLeft: 15 }, title: { flexGrow: 1, fontSize: 20, color: 'white', textAlign: 'center' }, exit: { marginRight: 20, fontSize: 20, color: 'white' }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    header: {
    height: 60,
    backgroundColor: 'orange',
    flexDirection: 'row',
    alignItems: 'center'
    },
    back: {
    color: 'white',
    marginLeft: 15
    },
    title: {
    flexGrow: 1,
    fontSize: 20,
    color: 'white',
    textAlign: 'center'
    },
    exit: {
    marginRight: 20,
    fontSize: 20,
    color: 'white'
    }

    图片 12

    图11. header有了标题

    第三步,我们可以把footer三等分,模拟成菜单的样子:

    <View style={styles.footer}> <Text style={styles.firstMenu}>添加</Text> <Text style={styles.menu}>删除</Text> <Text style={styles.menu}>修改</Text> </View>

    1
    2
    3
    4
    5
    <View style={styles.footer}>
        <Text style={styles.firstMenu}>添加</Text>
        <Text style={styles.menu}>删除</Text>
        <Text style={styles.menu}>修改</Text>
    </View>

    添加样式:

    footer: { height: 60, backgroundColor: 'green', flexDirection: 'row', alignItems: 'center' }, menu: { flexGrow: 1, textAlign: 'center', borderColor: 'white', borderLeftWidth: 1, color: 'white' }, firstMenu: { flexGrow: 1, textAlign: 'center', color: 'white' },

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    footer: {
    height: 60,
    backgroundColor: 'green',
    flexDirection: 'row',
    alignItems: 'center'
    },
    menu: {
    flexGrow: 1,
    textAlign: 'center',
    borderColor: 'white',
    borderLeftWidth: 1,
    color: 'white'
    },
    firstMenu: {
    flexGrow: 1,
    textAlign: 'center',
    color: 'white'
    },

    图片 13

    图12. footer三等分 模拟菜单

    最后,让我们在body里也填入几个带按钮的输入框。

    引入TextInput和Button组件,然后把它们分三组放入body中,

    JavaScript

    <View style={styles.body}> <View style={styles.inputRow}> <TextInput style={styles.textInput}></TextInput> <Button style={styles.btn} onPress={() => {}} title="确定"></Button> </View> <View style={styles.inputRow}> <TextInput style={styles.textInput}></TextInput> <Button style={styles.btn} onPress={() => {}} title="非常确定"></Button> </View> <View style={styles.inputRow}> <TextInput style={styles.textInput}></TextInput> <Button style={styles.btn} onPress={() => {}} title="确定一定以及肯定"></Button> </View> </View>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <View style={styles.body}>
        <View style={styles.inputRow}>
            <TextInput style={styles.textInput}></TextInput>
            <Button style={styles.btn} onPress={() => {}} title="确定"></Button>
        </View>
        <View style={styles.inputRow}>
            <TextInput style={styles.textInput}></TextInput>
            <Button style={styles.btn} onPress={() => {}} title="非常确定"></Button>
        </View>
        <View style={styles.inputRow}>
            <TextInput style={styles.textInput}></TextInput>
            <Button style={styles.btn} onPress={() => {}} title="确定一定以及肯定"></Button>
        </View>
    </View>

    添加样式:

    body: { flexGrow: 1, backgroundColor: 'lightblue', }, inputRow: { flexDirection: 'row', alignItems: 'center', marginLeft: 10, marginRight: 10 }, textInput: { flex: 1 }, btn: { minWidth: 60 }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    body: {
    flexGrow: 1,
    backgroundColor: 'lightblue',
    },
    inputRow: {
    flexDirection: 'row',
    alignItems: 'center',
    marginLeft: 10,
    marginRight: 10
    },
    textInput: {
    flex: 1
    },
    btn: {
    minWidth: 60
    }

    图片 14

    flex布局的一个常用实践是,部分内容固定宽高,让剩下的内容自适应。

    像上面这样,我们给Button有一个最小宽度,且TextInput的flexGrow为1,这样的做法可以实现,TextInput总是占满剩下的宽度,且可伸缩。

    看了上面的例子,是否觉得在React Native中使用Flexbox布局也挺简单呢?

    希望这是个不错的开始。

    1 赞 收藏 评论

    图片 15

    推荐7本不错的HTML5书籍

    2011/08/01 · HTML5 · 3 评论 · HTML5

    HTML5是HTML的下一代。HTML5引进了各种新元素,无论是针对内容结构还是媒体。

    你可以找到很多关于HTML5信息的网站,包括介绍、教程以及使用技巧。但市面上也有一些好的书籍,集中介绍了HTML5特性,Amin Riazi搜集并重点推荐了7本的书目,它们确实是学习HTML5的好帮手。 (编注:《Web开发人员应有的15本免费电子书》这篇文章也有5本HTML5电子书。)

    1. Pro HTML 5 Programming 《HTML5高级程序设计》

    作者:Peter Lubbers, Brian Albers, Frank Salim

    图片 16

    这本书适合有丰富编程经验的Web应用开发者。换言之,我们不会在这本书中介绍互联网发展的基础知识。这本书中有许多现成的资源可以加快学习Web编程原理。

     

    2. HTML5: Up and Running 《HTML5揭秘》

    作者:Mark Pilgrim

    图片 17

    书中的8个重点主题:

    ●新的元素,如<Header>,<footer>和<section>(第3章)

    ●Canvas元素,使用 JavaScript 在网页上绘制图像。(第4章)

    ●你可以在网页中嵌入视频,而不使用第三方插件(第5章)。

    ●Geolocation,借助它,浏览者可以在你的Web应用中分享自己的地理位置(第6章)。

    ●永久的本地存储,而不用使用第三方插件(第7章)。

    ●离线Web应用,即使网络中断也能工作(第8章)。

    ●HTML网页窗体的改进(第9章)。

    ●Microdata,让你创造属于自己的词汇表,并使用自定义的语言来扩展你的网页。(第10章)

     

    3. Foundation HTML5 Canvas: For Games and Entertainment | 《 HTML5 Canvas基础教程》

    作者:Rob Hawkes

    图片 18

    关于作者:Rob Hawkes擅长通过代码解决问题。他沉迷于可视化编程,而不仅仅局限于HTML5以及其他令人兴奋的Web新功能的研究。

     

    4. The Essential Guide to HTML5: Using Games to learn HTML5 and JavaScript  |《 HTML5游戏开发 》

    作者:Jeanine Meyer

    图片 19

    这本书适合那些想通过HTML5建立充满活力、令人兴奋的网站的开发者。如果你了解编程的相关知识,并希望知道HTML5能带给你什么,或者你没 有任何编程经验,这本书都很适合你。这本书将展示HTML5的新功能和神秘的编程艺术。编程是一门艺术,而开发有趣的游戏和其它应用程序则需要天赋。

     

    5. Sergey’s HTML5 & CSS3 Quick Reference (尚无中文版)

    作者: Sergey Mavrody.

    图片 20

    这本书是适合于专业网页设计师和开发人员的技术字典,它总结了超过3000页的HTML5和CSS3规则,涵盖了最常见的基本概念和规则,包括标签、属性、值、对象、属性、方法、事件和API。

    主题包括:

    ●HTML 5介绍。

    ●HTML5和XTML5语法规则。

    ●文档的语义结构。

    ●HTML5元素、属性、Web 2.0的完整参考。

    ●全局属性和事件。

    ●一个完整的CSS3属性总结。

    ●HTML5 API,包括Canvas、SVG、Video、Audio、Web Workers、Web Sockets、Microdata、Geolocation和Web Stroage等。

     

    6. HTML5 For Dummies Quick Reference(尚无中文版)

    出版社:Wiley Publishing Inc

    图片 21

    HTML是网页制作的首选编程语言,而HTML5拥有全新的特性。从本书中你会了解丰富的媒体应用、地理位置、数据库、移动能力、CSS和JavaScript的新应用,以及如何使用新的canvas标签。

    本书概览:

    ●浏览器支持的新工具。

    ●媒体原理,包括视频标签。

    ●CSS中附加的伪类。

    ●新的表单输入类型。

    ●如何添加阴影和丰富多彩的形状。

    ●创建Web套接字连接的提示。

    ●Web工作者如何提高工作效率。

    ●创建动画的步骤。

     

    7. HTML5 Canvas (中文版)

    作者:Steve Fulron 、Jeff Fulron

    图片 22

    HTML5 Canvas,为开发者提供了在普通的Web浏览器中使用常用的HTML和JavaScript创造动画图形的机会。Canvas是HTML5的最明显的 特性之一,它提供了极大的视觉效果和交互性。然而,它不同于典型的JavaScript、Flash、Silverlight开发,需要认真的去探索!

    本书分为11章,前四章,主要通过实例介绍HTML Canvas API,所涵盖的主题包括文本、图像和绘图。接下来的六章主要介绍了Canvase API的扩展应用,在这些章节中,我们讨论了数学和物理的应用、视频、音频、游戏和移动应用。最后一章介绍了3D和multiplayer的实验领域。

     

    原文:Amin Riazi  译文:iteye

     

    赞 2 收藏 3 评论

    图片 23

    本文由金沙国际官网发布于web前端,转载请注明出处:关于HTML5的11个让人难以接受的事实,推荐7本不错

    关键词:

上一篇:没有了

下一篇:没有了