三星多窗口手机上任何页面均无空间,但我的页面没满

503 Service Temporarily Unavailable
503 Service Temporarily Unavailable你们都被忽悠了! 其实可用内存大才有用
  【PConline 杂谈】随着这几年安卓手机的硬件快速升级,手机的运行内存(本文后续页面将&运行内存&简称为内存或者RAM)也越来越大,从最初的512M到1GB,再到现在主流的2GB、3GB。在CES2015上,已经有4GB内存的新机出现,可以看出内存已然成为手机硬件比拼的重要内容之一。那么大内存会给手机带来什么好处,大内存的手机扣除系统程序占用的内存后是否还够大,是否还能够运行流畅?笔者带大家聊聊手机内存的运行机制,简单盘点下市售大内存手机,看看它们真正可用的内存大小究竟如何。内存RAM越大越靠谱吗?  手机系统虽然安装在手机的ROM中,但是在开机使用后,会有大量的系统后台程序运行。所以,通常情况下,即使不打开任何软件,系统的剩余运存也要比总运存RAM小上不少。热门手机内存状况一览型号Z9 Max荣耀6锤子T1内存3GB3GB2GB可用内存1.78GB2.06GB1.18GB  因此原本2GB或者3GB的内存,即使开机后不打开任何应用,内存也会被后台系统应用占据掉不少。对于一些手机&小白&来说,如果安装应用过多,且默认开机后台启动,那即使有2GB的运存,在不使用任何程序的情况下,可能也只会剩下1GB。因此,对于大多数手机来说,大内存只是一个方面,更重要的是看,在开启一定应用后,剩下的空闲可用内存有多少,理论上空闲内存越大,手机流畅度才会越高。内存运行机制  可能很多用户会抱怨,为什么安卓如此&吃硬件&,苹果1GB的内存从不卡顿,就连&半死不活&的WP系统512MB也能十分流畅的运行。这里简单聊聊安卓的内存运行机制。  我们先来说说,普通的电脑是怎么运行程序。通常情况下,电脑执行一个程序,CPU开始计算,通过内存缓存,再到硬盘去读取,由此电脑的计算方式大家明白是非常简单的。安卓系统与苹果系统到底分别在哪里呢?安卓系统在运行一个程序时,CPU开始计算,内存开始缓存,再读取目标文件开始计算,结束程序时,CPU计算完毕,内存仍然有部分缓存。苹果系统运行一个程序时,CPU开始计算,内存全部集齐对计算程序进行缓存,再读取目标文件,开始计算,结束程序时,CPU计算完毕,内存得到全部释放。  再举个简单的例子,安卓系统比如打开3个程序,一个QQ,一个优酷,一个游戏,看着优酷,突然收到QQ好友信息,准备切换去QQ回复信息,但这时候,会有卡的现象,这是为什么,这因为你打开了3个程序,CPU会为这3个程序在计算,3个程序都分配有内存,切换时,由于CPU在计算其他程序,内存在缓存其他的程序,所以没法及时反应过来,造成了卡顿。良好的内存使用习惯  大多数的安卓用户,通常会碰到这样的情况。手机刚买回来时顺畅无比,但是用了一段时间后,就卡的不行,寻求刷机或者格式化。这种卡顿的来源主要有两方面,一是手机程序安装越来越多,手机APP功能越来越强大,对于ROM和RAM的需求也越来越强大。另一方面,众多手机用户没有形成良好的手机使用习惯。对于前者,我们一般用户无能无力,对于后者,我们可以尽量做好,使手机尽量长久的保持流畅。  首先,拿到新手机后,很多人会安装各类APP,这时候就要注意,哪些程序是会开机自启动,长期占据在后台,对于不必要的APP进行卸载或者关闭其在后台的运行。现有的安卓系统中,都会加入后台应用管理的功能,可以关掉当前不需要使用的程序或者选择一键清理。其次,针对爱刷机的用户,通常情况下,系统的精简度和流畅度是成正比的,选择官方精简的系统ROM,总体使用下来会更加流畅。总结  随着手机全面进入64位时代,手机芯片工艺的不断提升,尤其是用户需求的提升,相信内存还将不断上升,8GB、16GB是迟早的事。对于大众消费者,尤其对于安卓用户来说,选用手机时不能单看内存的绝对大小,更需要关注手机的可用空闲内存大小,不要被商家打出的大内存卖点所忽悠,需要擦亮眼睛。
手机论坛帖子排行
最新资讯离线随时看
聊天吐槽赢奖品请输入要查找的产品名称
当前位置:
三星手机报价
三星手机报价
屏幕尺寸:
选机热点:
屏幕分辨率:
已选条件:
共174款产品
共174款产品
三星S9采用5.8寸18.5:9全视曲面屏,分辨率为像素;搭载高通骁龙845处理器,辅以4GB+64/128/256GB内存组合;前置800W,后置1200像素摄像头;解锁方式支持指纹识别、面部和虹膜识别三种。
三星Galaxy S9+采用6.2英寸18.5:9的Surper AMOLED屏幕,分辨率为像素;搭载骁龙845处理器,辅以6GB+64/128/256GB内存组合;前置800万摄像头,后置1200万双摄像头,可实现f/1.5-2.4变焦;电池容量3500mAh。
像素;6GB;后置摄像头1200万像素
三星S8搭载了高通最强芯骁龙835CPU,辅以4+64G的存储组合,配备了一块5.8英寸18.5:9的全视双曲面屏,前置800万像素的F1.7大光圈摄像头,后置1200万像素的F1.7大光圈摄像头,支持Dual Pixel以及OIS防抖。
三星S8 plus采用自家的6.2英寸AMOLED屏幕,正面高屏占比,支持虹膜识别和防水功能,售价6188元
双侧面曲面屏,后置镜头采用独有的双核全像素技术,支持Samsung Pay
三星C9 pro的处理器升级为高通骁龙653,6GB+64GB存储空间,1600万像素前置(后置)摄像头,上市价格3199元
窄边框+6英寸2.5D大屏,外观相当不错,搭载的骁龙652处理器性能不俗,支持指纹和快充
取消了塑料材质,采用金属边框+双面玻璃设计,并且加入了按压式指纹识别功能
暂无经销商报价
像素(FHD);4GB;后置摄像头1200万像素
暂无经销商报价
三星S7机身整体观感更加圆润,防水达到IP68级别,支持Samsung Pay,国行采用高通骁龙820处理器
三星W2017整机采用了弧面玻璃材质,延续了翻盖双屏幕的设计,配备高通骁龙820处理器
三星 Galaxy C8拥有5.5英寸,后置双摄像头,面部识别+指纹识别!
三星C7采用了金属机身,5.7英寸1080P大屏幕,4GB大运行内存,支持三星Pay支付
三星Galaxy Note7采用双曲面屏幕,配备更精准的S Pen,支持三星Pay,加入虹膜识别解锁
像素;4GB;后置摄像头1600万像素
暂无经销商报价
三星W系列电信4G商务旗舰,翻盖双屏设计,并加入心率监测等功能
暂无经销商报价
主打超薄时尚,采用双面2.5D玻璃+金属材质,运行内存升级到了4GB,支持Samsung Pay
5.2英寸1080P屏幕,金属机身,4GB大运行内存,伪基站屏蔽,支持Samsung Pay,上市价格2199
金属机身,背部双曲面设计能显著提升手感,配备了S Pen触控笔,支持Samsung Pay
暂无经销商报价
像素;4GB;后置摄像头1600万像素
暂无经销商报价
像素(720P);1.5GB
暂无经销商报价
针对精英商务人士推出的高端商务产品,独特双屏设计,后置摄像头支持光学防抖
480×800像素(WVGA),像素;2GB;后置摄像头1600万像素
三星s6edge+屏幕增大至5.7英寸,金属机身全网通,延续双曲面屏幕设计,支持Samsung Pay
共 7 页,到第
热门三星手机系列
三星手机最新评测
在手机拍照领域,三星的新机型总是很擅长给我们带来惊喜。从早年媲美相机变焦的Galaxy Zoom系列,到最近首款三星双摄Note 8便搭载的双OIS光学防抖,在一步一脚印的努力下,三星旗舰为自己赢得了“夜视仪”的口碑。
曾几何时,我们也会幻想自己成为电影中的主人公,在枪林弹雨中凝固时间,灵活地躲避、自由穿梭…这不是15年前那部红爆一时的《黑客帝国》系列,而是三星Galaxy S9/S9+搭载的凝时拍摄功能,让你瞬间成为憧憬已久的电影主角。
什么叫做机皇?机皇,就是远超乎你所需要的强大,完爆同级别产品的性能…甚至带来从未有过的,颠覆过去的体验。今年3月,安卓阵营中备受瞩目的三星Galaxy S9/S9+系列如约而至,它能否顺利继承机皇宝座,这篇评测有你要的答案。
作为一个善于网上冲浪的青年,你是否拥有自己珍藏多年的表情图包,无论是活跃气氛还是陷入尬聊,你的斗图技能总是可以在重要的时候拍上用场。但再多的表情包也有重复的时候,当整个群聊都和你刷一样的表情,手上再多图,也不能成为最突出那位“斗图小能手”了。
为了弥补国内网友没有第一时间目睹三星S9全球发布会的盛况,三星将在盖乐世S9系列中国发布会上完美还原全球发布会的现场,足可见三星对于中国市场的高度重视。现在,三星盖乐世S9系列中国发布会定在3月6日广州海心沙广场举办,笔者有幸能够前往现场一睹真容,感受三星旗舰新机的全屏实力,并且接下来也将为大家奉上有关于三星Galaxy S9/S9+的现场真机体验。
北京时间2月26日凌晨1点,三星在MWC 2018展会上正式发布三星Galaxy S9系列手机。作为三星Galaxy S系列的最新旗舰机型,PConline在第一时间拿到了真机,下面跟着我们的视角去把玩一下吧。
每年大家都听到很多号称要秒杀iPhone的安卓手机厂商,然而只有两款产品被冠上“安卓机皇”美誉,它们分别是三星上半年的旗舰S系列和下半年的Note系列。今年的三星Galaxy S9/S9+在MWC2018上面如约而至,产品重点提升拍照体验(集合960帧视频拍摄,F1.5/2.4可变光圈,极速对焦),还有更快的运行速度,可以说是公认2018年上半年最重磅的手机产品。
三星Galaxy Note系列一直是每年最让人期待的安卓旗舰之一,而这次的三星Note8是三星的第二款双曲全面屏手机,拥有S8系列上面广受好评的震撼视觉体验,并首次在三星手机当中加入双摄功能(全球首创长焦+广角双防抖)。同时延续前辈机型Galaxy Note系列的标志性优势,在S Pen体验上面也有更高的追求。
高通在12月份的美国夏威夷骁龙技术峰会正式发布了旗下最新的旗舰平台骁龙845,作为每年的压轴大戏,其必将成为2018年智能手机首选的旗舰平台。在发布之后,高通组织了媒体进行一场关于CPU和GPU方面的测试活动,接下来一起看看骁龙845的基准跑分成绩如何。
就这样,我跟他变为陌生人了,昨天本来还好好的,真是莫名奇妙!尽管已经变回了单身狗,但是我却似乎没有觉得有任何的不适应,甚至还有点小开心,到底是为什么呢?看完你就知道了。
把手机和历史剧情相结合,可以说这是一出创意十足的广告花絮,也是我们之前较为少见的营销案例。而三星Note8伴随着这部电视剧的热播,在关注度上也更加高涨。三星Note8最大的看点除了那块采用18.5:9比例的6.3英寸全视曲面屏外,后置1200万像素双光学防抖摄像头也是其独门绝技,接下来小编就为大家浅析一下三星Note8的双摄特点。
为了让喜欢玩《王者荣耀》的网友找到适合的上分神器,我们此前策划了9款旗舰手机的王者荣耀对比大横评。在前面几期内容,我们已经完成流畅性﹑网络稳定性的测试,以及详细讲解全面屏的视野问题。那么,我们现在就来聊聊这款游戏的手柄等外设配件吧。
三星(SAMSUNG)手机新品
手机品牌报价大全
全国三星手机经销商促销
您看过的产品
热门城市:
甘肃省兰州
H湖南省长沙
湖北省武汉
海南省海口
河南省郑州
河北省石家庄保定邯郸邢台唐山
黑龙江哈尔滨大庆
J江西省南昌赣州
江苏省南京苏州无锡
吉林省长春
L辽宁省沈阳大连
N内蒙古呼和浩特
S上海市上海
四川省成都
陕西省西安
山东省 济南青岛烟台
山西省太原
T天津市天津
X新疆乌鲁木齐
Y云南省昆明
Z浙江省杭州宁波温州
加载中,请稍候...
热门三星手机点评
机器很好用,就是屏幕容易破
6288元‘刚上市就买’
3500元手机还行用两年,就是这会不知怎么了充不了电
三星s9颜值非常棒,朋友都说漂亮,屏幕非常清晰,手感更是没得说。指纹、虹膜、面部识别都非常灵敏。845的处理器很高端,基本秒开。拍照方面,还没怎么对比,不过S系列作为旗舰,表现一直都很抢眼的。续航方面,目前感觉还行。其实,最让我满意的还是音质,配合新版的over the horizon真好听,每次有来电都恨不得多听会儿呢
好用我已经用了两三年了
还没有买,看参数不怎么样,和17差不多,没有什么改进,像素太低,内存太小
你用这好就好&&你用这不好就是不好&反正我用SANXING&s8&可以&没啥问题&&&不要乱喷我&
我2月份到天猫购买了一部三星手机,用了不到3个月,突然手机屏幕坏掉了,一半白屏一半正常的,如果这样子的,不知道怎么回事,早上还好好的。已经去修理,说是自己的原因的,不在保修范围,在我记忆力就不小心摔了一次还在很低的地方不到30CM处,摔的当时没有什么事情,过了几天才出现这个情况,我都无语了,是一次性的吗,我买过很多部智能机就这个牌子的最差,就摔了一次就这样了,还是最贵的,维修一次要了我900多,说是要换屏的,我都无语了才购买了3个月,当时还花了3千多的,3千多的手机还比不过1千多的手机,我1千多的手机已经摔过很多次都没有出现这个问题,差评,我是看拍照像素好的才买的,一摔就坏,也太那个吧,以后在也不买三星了,有不是陶瓷,还不如买相机了,维修之后还发现手机上有一个功能没有了&,真的是原装屏吗
7388入手国行,显示是三星的看家本领不用多说,拍照与IPHONE一样是站在金字塔尖的产品,要吐槽的就是及其平庸的电池及快充,估计还是有点一年被蛇咬十年怕井绳的意思,性价比吗,这个其实从产品的细节上来说我觉得还行!
最满意:三星S9+颜值够高,某些朋友说的没有s8好看,边框割手的问题我都没感觉到,也许是我要求不高,但跟朋友的ip8p放一起是明显秒杀,总结出一些优缺点供大家参考。&优点:一是颜值够高,这个毋庸置疑,买s9的大半都是冲着颜值来的。二是配置,作为当前唯一一部骁龙845的旗舰,可以流畅运行目前所有游戏软件。三是屏幕很好,色彩艳丽不晃眼。四是系统人机交互不错,以往三星系统不够人性化的问题有很大改善
最不满意:三星S9+续航一般,只能说是平均水准,想要重度使用一天不充基本不可能,所以度游戏玩家最高随身携带充电宝,还有前后玻璃太沾指纹,手汗多的朋友会很郁闷,还有就是三星应用商店程序不够丰富,比华为应用市场差了不少,望改进
三星手机行情
三星Galaxy S8是一款高人气手机,拥有出众的外观和不俗的性能。其拥有一块5.8英寸的像素屏幕,搭载了高通骁龙835 2.45GHz(8核)处理器,后置1200万像素/前置800万像素摄像头,内置3000mAH电池。现有商家报价4580元,喜欢的朋友不要错过了。
三星Galaxy S8+搭载骁龙835处理器、全新的高屏占比曲面屏(三星称作全视曲面屏)、Bixby智慧型语音助手以及新的配色,配备了6.2英寸的屏幕,像素的Super AMOLED显示屏,无论是在静态或者动态,呈现的视觉方面都非常的不错。4GB运存配合全新Android 7.0系统,使它运行速度方面比之前版本更为显著。摄像头方面三星采用了后置1200万像素,前置800万像素的设计,让我们轻松拍出好的照片。现有商家报价5050元,喜欢的朋友不用错过了。
三星S8是三星2017年的旗舰机型,主打全视曲面屏,感官惊艳,配置方面也属顶级。其配备了5.8英寸像素的Super AMOLED显示屏,无论是在静态或者动态,呈现的视觉方面都非常的不错。4GB使它运行速度方面比之前版本更为显著。摄像头方面三星采用了后置1200万像素,前置800万像素的设计,让我们轻松拍出好的照片。现在商家韶关好兄弟手机连锁报价5480元,感兴趣的朋友不妨关注一下。
三星S8拥有出众的外观和性能,其拥有一块5.8英寸英寸的像素屏幕,超高屏占比,搭载了高通骁龙835 2.45GHz(8核)处理器,后置1200万像素/前置800万像素摄像头,内置3000mAH电池。目前三星 Galaxy S8在济南新机汇数码旗舰店报价5499元,感兴趣的朋友不妨关注一下。
三星Galaxy S8一体成型的设计,突破边框限制,以流畅圆润的线条,融进金属边框。使用的10nm制程处理器,无论数据下载,还是应用切换,一切进程都速度惊人。现有商家报价4950元,喜欢的朋友不要错过了。&figure&&img src=&https://pic2.zhimg.com/v2-b03aaf3f689f6a65d4ed2d2_b.jpg& data-rawwidth=&4032& data-rawheight=&3024& class=&origin_image zh-lightbox-thumb& width=&4032& data-original=&https://pic2.zhimg.com/v2-b03aaf3f689f6a65d4ed2d2_r.jpg&&&/figure&&p&(题图照片:2017年10月摄于丹佛共享办公楼SPACES。)&/p&&p&&br&&/p&&p&日到6日,&b&Node.js北美互动会&/b&在温哥华胜利召开。在这次团结的大会上,&b&谷歌&/b&正式成为Node.js基金会的白金会员。此前的白金会员包括&b&微软、IBM、英特尔、红帽&/b&和三星旗下的&b&Joyent&/b&。&/p&&p&这个Node.js是一位&b&华罗庚式的茶馆儿店小二&/b&,它是一种开源的、服务器端的、非阻断I/O、事件驱动的JavaScript运行环境。它能提高网络服务器的用户容量和响应速度。具体细节请参考:&a href=&https://www.zhihu.com/question//answer/& class=&internal&&张戎:Node.js是用来做什么的?&/a&和该问题下的其它答案。&/p&&p&总而言之,Node.js这个店小二现在是越来越招人待见了。你熟悉的很多公司都在用它,包括谷歌、苹果、宝马、airbnb等等。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-f6d6ae53d3a634e926a919eb4bc62dfa_b.jpg& data-size=&normal& data-rawwidth=&978& data-rawheight=&1067& class=&origin_image zh-lightbox-thumb& width=&978& data-original=&https://pic3.zhimg.com/v2-f6d6ae53d3a634e926a919eb4bc62dfa_r.jpg&&&figcaption&在使用Node.js的公司(来源:lullabot.com)&/figcaption&&/figure&&p&因为Node.js依赖于谷歌的V8 JavaScript引擎,所以这次在温哥华&b&谷歌&/b&能成为白金会员,对于整个Node.js社区都是个积极的消息。(参考:&a href=&https://link.zhihu.com/?target=https%3A//medium.com/%40nodejs/node-js-foundation-welcomes-google-as-platinum-member-5a30f1ef7451& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Node.js Foundation welcomes Google as Platinum Member&/a&)&/p&&p&有趣的是,在会议上设立展台的除了几大白金会员公司和利用Node.js搞托管、包裹管理、安全、云计算的相关公司以外,&b&还有一条狗&/b&,这是为什么呢?&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ebe13b1fc4fd1f4975bc0b_b.jpg& data-size=&normal& data-rawwidth=&400& data-rawheight=&400& class=&content_image& width=&400&&&figcaption&丹佛初创公司HarperDB的图标(来源:HarperDB.io)&/figcaption&&/figure&&p&这条狗是&b&丹佛初创公司HarperDB&/b&的图标。HarperDB从事的不是宠物行业,而是数据库。&/p&&p&用大白话说吧,&b&HarperDB自认为给数据库的几大头疼病找到了止疼片儿,而Node.js是这种止疼片儿最合适的糖衣。&/b&&/p&&p&先举个例子说说数据库几大头疼病吧。2016年据腾讯网报道,京东当时已有6万快递小哥。&/p&&blockquote&&a href=&https://link.zhihu.com/?target=http%3A//tech.qq.com/a/513.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&刘强东爆料:京东配送条线员工总数已达6万人_科技_腾讯网&/a&&/blockquote&&p&我们知道小哥们的手持POS机(「把枪」)有客户和订单信息,可以实时处理收货等交易操作,这是目前就有的。但是,假如京东想同时对几万小哥的实时数据进行汇总,同时结合线上用户反馈,随时进行分析出报表以供实时决策,比如重新规划路线、临时处理客户投诉、动态改变送货任务,这个头疼的要求可能会把数据工程师逼疯。&/p&&p&&b&头疼有几点。&/b&&/p&&p&首先,&b&边收钱还要边算账&/b&很头疼。传统的数据库,要不擅长&b&交易操作&/b&,要不擅长&b&分析操作&/b&。如果要求同时进行交易和分析(HTAP:Hybrid Transaction and Analytical Processing),需要数据库同时支持&b&在线交易处理&/b&(OLTP)和&b&在线分析处理&/b&(OLAP),这就涉及到完全不同的数据库架构和解决方案,两者的整合不仅涉及姿态各异的软硬件,工程浩大,而且造成不可避免的分析延迟,很难实现真正的混合式交易分析处理。&/p&&p&其次,&b&要长得快还要长得齐&/b&很头疼&b&。&/b&结构严谨的关系型数据库SQL保障交易强于分析,但需要事先实现定义好数据架构,灵活性差。典型场景是电商和网上银行。结构灵活的NoSQL支持数据的快速增长,缩放自如,但交易和分析严谨性差。典型场景是社交网络和客户管理。在用户、产品、订单、业务模式迅速灵活增长时又要求结构严谨,使数据库选择常常在SQL和NoSQL之间陷入两难。&/p&&p&还有,&b&要花钱少还要算得快&/b&很头疼。随着业务量的增长,企业如果有全局实时分析能力的需求,通常只能投资建造更强大的计算中心,购买更快的网络带宽。&/p&&p&&b&那么,HarperDB这家刚刚成立8个月的初创公司拿来了什么止疼片呢?&/b&&/p&&p&这个止疼片点就是一个新型的数据库。啰嗦点说,是一个轻体、SQL/NoSQL兼容、无架构、跨平台、全索引的新型数据库。它主要有仨绝活儿:&/p&&p&&b&1. 「剁碎了」:&/b&&/p&&p&关系型数据库依赖于事先定义好的表及表之间的关系;非关系型数据库依赖于文档或列数据。而HarperDB的基本结构既不是表,也不是列,而是剁碎成单个的数据单元,然后再通过索引保持这些单个数据之间的行、列、表间关系。&/p&&p&这就好像图书馆里的书,既不按类别也不按作者首字母,而是按照入库顺序混乱地摆放在一起,然后依赖RFID索引到每一本书的具体位置。&/p&&p&或者说像亚马逊收购的Kiva Systems库房机器人,完全打乱固定货架,每一个方形立柱货架作为一个独立的存货单元,然后全面索引,需要哪个单元就由举重机器人把那个单元抬过来。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-0cbe6fe1d7d4ff37b0c52e_b.jpg& data-size=&normal& data-rawwidth=&1400& data-rawheight=&787& class=&origin_image zh-lightbox-thumb& width=&1400& data-original=&https://pic4.zhimg.com/v2-0cbe6fe1d7d4ff37b0c52e_r.jpg&&&figcaption&亚马逊库房机器人系统把货架剁碎成单个方形立柱货架。来源:NPR&/figcaption&&/figure&&p&在HarperDB自己的网站上是这样展示的:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-facbc8c923dd07a802da_b.jpg& data-size=&normal& data-rawwidth=&1604& data-rawheight=&1206& class=&origin_image zh-lightbox-thumb& width=&1604& data-original=&https://pic4.zhimg.com/v2-facbc8c923dd07a802da_r.jpg&&&figcaption&最右侧的数据单元就是剁碎了的数据库。来源:harperdb.io&/figcaption&&/figure&&p&&b&2. 「靠边站」:&/b&&/p&&p&对比把数据集中到云端用中央服务器来运算的传统方案,HarperDB致力于支持&b&边缘计算,&/b&这在&b&物联网&/b&的场景下既可能又必要。&/p&&p&依赖于中央服务器来计算,就好像老师在黑板上演算100道题,20个小朋友坐在课堂里看着。边缘计算能够把计算负担推到移动设备上,就好像老师把100道题分了一人5道大家一起算。&/p&&p&HarperDB的设计思路面向边缘计算。设计意图是让企业不必动辄投资在计算中心,而是充分利用已经拥有的移动设备包括手机、笔记本、和嵌入式计算设备。&/p&&p&&b&3. 「讲普通话」:&/b&&/p&&p&分布式边缘计算的一大挑战是各地方言不通。特别是在OLTP/OLAP并重,SQL/NoSQL并存,各种缓存、插件纷繁复杂的情况下,这个矛盾尤其突出。好在从2000年&a href=&https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Roy_Fielding& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Roy Fielding&/a&的博士论文开始,我们有了一种连接网络上不同平台的「普通话」,即REST或RESTful标准。为了保证HarperDB不为方言所困,HarperDB提供原生的REST API接口。&/p&&p&那好吧,这个有着三大药效的止疼片听着不错。怎么把这个止疼片包装起来呢?&/p&&p&Node.js。&/p&&p&大家从HarperDB边缘计算和面向物联网的路子听出来了,不管这个数据库用什么语言写,对这个语言的要求和对女装模特的要求是一样的:&b&轻体、混搭、流行。&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f8dab57d048fabd69ea16c67e1615b86_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1843& data-rawheight=&1129& class=&origin_image zh-lightbox-thumb& width=&1843& data-original=&https://pic2.zhimg.com/v2-f8dab57d048fabd69ea16c67e1615b86_r.jpg&&&/figure&&p&而Node.js这个店小二就有这三个特点。&/p&&ul&&li&&b&首先,轻体&/b&:Node.js在不工作的情况下几乎不占用资源;其次用Node.js写的程序可以很小。HarperDB目前的发布整个软件才65MB,甚至能够部署到像Raspberry Pi这样的单板机上。&/li&&li&&b&其次,混搭:&/b&Node.js是跨平台的。HarperDB在第一版发布时就可以同步上映在各大影院上,包括Linux, Mac, ARM6, ARM7, 和ARM8上。&/li&&li&&b&另外,流行:&/b&Node.js近年的盛行使得代码包丰富,新人济济,帮HarperDB这样的初创企业提高开发速度,降低招聘门槛。Node.js的程序包管理系统npm现在就有35万个包,号称「当前世界上最大的软件包管理解决方案」。比如,HarperDB公司的CTO找到的async库手到擒来地解决了HarperDB本来需要自己开发编程的问题。所以流行也是优点,只要不是感冒。当然,开源系统的风险在于,有些包的开发维护会因为开发者的个人原因而突然中断,因此得优先选择有大公司大组织站台的。&/li&&/ul&&p&综上三点,HarperDB选择了Node.js作为糖衣包装自己的止疼片儿。而Node.js也欢迎自己在新型数据库上的应用,而且是目前在数据库上的唯一应用。这就是为什么微软、IBM、英特尔、三星、红帽在温哥华欢迎谷歌入Node.js群,来了一条狗。&/p&&p&不开玩笑,&b&Harper真的是一只狗&/b&。它是创始人Stephen的爱犬。好了,发福利了:本文得到Stephen的许可,&b&让知乎成为Harper靓照的全球互联网首发平台&/b&。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-b579e5a26e19dc97f8df6b10033b5bbc_b.jpg& data-size=&normal& data-rawwidth=&1280& data-rawheight=&960& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-b579e5a26e19dc97f8df6b10033b5bbc_r.jpg&&&figcaption&HarperDB创始人Stephen Goldberg的爱犬Harper本尊。Stephen Goldberg授权使用。&/figcaption&&/figure&&p&本文试图从一个外行的视角来了解HarperDB和他们自己选用Node.js的理由,得到了CEO Stephen Goldberg和CTO Kyle Bernhardy的帮助。这是跟他们团队的合影,右二是Stephen,左一是Kyle。韩裔为Fred Yoon,COO。女生为Kaylan Stock,战略总监。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-0caf4a00cbf_b.jpg& data-size=&normal& data-rawwidth=&4032& data-rawheight=&1960& class=&origin_image zh-lightbox-thumb& width=&4032& data-original=&https://pic1.zhimg.com/v2-0caf4a00cbf_r.jpg&&&figcaption&日跟HarperDB「狗仔队」在丹佛共享办公楼SPACES&/figcaption&&/figure&&p&本文基于跟他们哥儿俩的聊天及查阅相关网站,尚未找到HarperDB应用实例的资料,也没有来得及将其产品及技术和其它竞品进行对比。&/p&&ul&&li&&b&满足物联网边缘计算、交易分析同步、缩放自如的数据库还有哪些选择?&/b&&/li&&li&&b&有什么需要转告狗主人的表扬和批评?&/b&&/li&&/ul&&p&恳请懂行知友在评论区留言以助学习冰山水下那一大坨。&/p&&p&&br&&/p&&p&&b&参考资料:&/b&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.harperdb.io/blog/why-choose-nodejs& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Why Choose Node.js?&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=http%3A//www.harperdb.io/solution/overview& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NoSQL
and SQL Application Database&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Hybrid_transactional/analytical_processing_%28HTAP%29& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hybrid transactional/analytical processing (HTAP)&/a&&/p&&p&&a href=&https://link.zhihu.com/?target=https%3A//www.lullabot.com/articles/nodejs-interactive-north-america-2017-key-takeaways& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Node.js Interactive North America 2017: Key Takeaways&/a&&/p&&p&&br&&/p&&p&(以上日原帖)&/p&&hr&&p&日更新:&/p&&p&收到HarperDB的创始人Stephen Goldberg对本文评论区 &a class=&member_mention& href=&https://www.zhihu.com/people/2ecef563ffed0cb45a418b& data-hash=&2ecef563ffed0cb45a418b& data-hovercard=&p$b$2ecef563ffed0cb45a418b&&@王文武&/a& 同学批语的回复。懒得看英文的跳过引用块中文见。&/p&&blockquote&Rong, &br&&br&Thanks again for posting the article!
We had two downloads, and one contact last night as a result!
I have used google translate to read several of the comments and they seem to be positive for the most part.
&br&&br&I noticed one person suggested Mongodb instead of HarperDB.
MongoDB utilizes multimodel which means that resources must be duplicated in order to search.
MongoDB also doesn't support full ANSI SQL, and it is much larger then 65mb so it cannot run directly on the edge. &br&&br&SG&/blockquote&&p&他昨晚收到(来自中国的)两次下载和一次(电邮)联系。同时他借助Google翻译看了几条评论大体是积极的。(按咱知乎砖头垫拍两用的风格,他应该过两天再回来看看。)&/p&&p&他特别注意到一名读者(是不是拿不准读「王文武」还是「王斌」?)建议用MongoDB而不是HarperDB。他解释说「MongoDB用的是多模型方法,需要重复占用资源才能支持搜索。另外MongoDB不支持全套ANSI SQL,而且远远大于65MB所以没法直接在边缘上运行」。&/p&&p&&br&&/p&&p&&b&更多回答,请看:&a href=&https://www.zhihu.com/people/rong_zhang/answers& class=&internal&&张戎的回答&/a&&/b&&/p&&p&&b&更多文章,请看:&a href=&https://zhuanlan.zhihu.com/hemingke& class=&internal&&数据冰山&/a&&/b&&/p&
(题图照片:2017年10月摄于丹佛共享办公楼SPACES。) 日到6日,Node.js北美互动会在温哥华胜利召开。在这次团结的大会上,谷歌正式成为Node.js基金会的白金会员。此前的白金会员包括微软、IBM、英特尔、红帽和三星旗下的Joyent。这个Node.js是…
&figure&&img src=&https://pic1.zhimg.com/v2-fdaf98f59edc981e02ca522d0a135432_b.jpg& data-rawwidth=&1000& data-rawheight=&501& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&https://pic1.zhimg.com/v2-fdaf98f59edc981e02ca522d0a135432_r.jpg&&&/figure&&blockquote&简评:使用 SVG 作为占位符不但可以减少数据大小还可以达到不错的显示效果。&/blockquote&&h2&不同类型的图片 placehold&/h2&&figure&&img src=&https://pic3.zhimg.com/v2-5ee5c4bffe40d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1600& data-rawheight=&819& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&https://pic3.zhimg.com/v2-5ee5c4bffe40d_r.jpg&&&/figure&&p&对于图片占位符,通常我们会使用以下几种处理方式。&/p&&ul&&li&保持图像为空:这样可以保证内容不会出现跳动。&/li&&li&默认占位符:比如说用户想要查看个人资料显示头像内容,如果请求失败或者没有上传过图片,那么通常会使用默认占位符(这种占位符一般会使用 SVG 资源)。&/li&&li&纯色:从图像中获取颜色,并作为背景颜色。图片在过度是时候回显得比较平滑(&a href=&https://link.zhihu.com/?target=https%3A//www.pinterest.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&pinterest&/a& 就是使用这种方式)。&/li&&li&模糊的图像:这种方式会获取原图的缩略图并对其进行渲染,等图片加载完成再过度到原图。&/li&&/ul&&p&以上是我们比较常见的处理图片 placehold 的方法。还有另外一种方式是使用 SVG。&/p&&h2&基于 SVG 的 placehold&/h2&&p&SVG 是矢量图像的理想选择,但是大部分情况是需要显示位图,我们需要考虑的是如何将位图转换成矢量图,下面提供几种转换方案。&/p&&ol&&li&使用矢量绘制原图的轮廓,具体代码可以参考 &a href=&https://link.zhihu.com/?target=https%3A//codepen.io/jmperez/pen/oogqdp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&demo&/a&。&/li&&/ol&&figure&&img src=&https://pic1.zhimg.com/v2-bfe912fcf8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&345& data-rawheight=&380& data-thumbnail=&https://pic1.zhimg.com/v2-bfe912fcf8_b.jpg& class=&content_image& width=&345&&&/figure&&p&2. 将原图转换为色块图,具体代码可以参考 &a href=&https://link.zhihu.com/?target=https%3A//codepen.io/jmperez/pen/BmaWmQ& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&demo&/a&。&/p&&a class=&video-box& href=&https://link.zhihu.com/?target=https%3A//www.zhihu.com/video/924992& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic1.zhimg.com/80/v2-692a4f01dafa_b.jpg& data-lens-id=&924992&&
&img class=&thumbnail& src=&https://pic1.zhimg.com/80/v2-692a4f01dafa_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/924992&/span&
&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/fogleman/primitive& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Primitive&/a&&/li&&/ul&&p&这里推荐 &a href=&https://link.zhihu.com/?target=https%3A//github.com/fogleman/primitive& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Primitive&/a& 这个库,这个库可以将位图生成矢量图,我们来看看效果。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-5fccf34e2c3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1642& data-rawheight=&1192& class=&origin_image zh-lightbox-thumb& width=&1642& data-original=&https://pic4.zhimg.com/v2-5fccf34e2c3_r.jpg&&&/figure&&p&上图分别使用不同数量的形状来绘制原图。使用矢量图作为 placehold 有一个很好的优点是小,例如上图 10 个图形的矢量图仅仅只占了 1030 个字节,当通过 SVGO 来传输时,代码还能减少到 640 个字节。&/p&&div class=&highlight&&&pre&&code class=&language-abap&&&span&&/span&&span class=&o&&&&/span&&span class=&nv&&svg&/span& &span class=&nv&&xmlns&/span& &span class=&o&&=&/span&&span class=&err&&“&/span&&span class=&nv&&http&/span&&span class=&p&&://&/span&&span class=&nv&&www&/span&&span class=&p&&.&/span&&span class=&nv&&w3&/span&&span class=&p&&.&/span&&span class=&nv&&org&/span&&span class=&p&&/&/span&&span class=&mi&&2000&/span&&span class=&p&&/&/span&&span class=&nv&&svg&/span&&span class=&err&&”&/span&&span class=&nv&&width&/span& &span class=&o&&=&/span&&span class=&err&&“&/span&&span class=&mi&&1024&/span&&span class=&err&&”&/span&&span class=&nv&&height&/span& &span class=&o&&=&/span&&span class=&err&&“&/span&&span class=&mi&&1024&/span&&span class=&err&&”&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&nv&&path&/span& &span class=&nv&&fill&/span& &span class=&o&&=&/span&&span class=&err&&“#&/span&&span class=&mi&&817&/span&&span class=&nv&&c70&/span&&span class=&err&&”&/span&&span class=&nv&&d&/span& &span class=&o&&=&/span&&span class=&err&&“&/span&&span class=&nv&&M0&/span& &span class=&mi&&0&/span&&span class=&nv&&hz&/span&&span class=&err&&”&/span&&span class=&p&&/&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&nv&&g&/span& &span class=&nv&&fill&/span&&span class=&o&&-&/span& &span class=&nv&&opacity&/span& &span class=&o&&=&/span&&span class=&err&&“。&/span&&span class=&mi&&502&/span&&span class=&err&&”&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&nv&&path&/span& &span class=&nv&&fill&/span& &span class=&o&&=&/span&&span class=&err&&“#&/span&&span class=&mi&&03020&/span&&span class=&nv&&f&/span&&span class=&err&&”&/span&&span class=&nv&&d&/span& &span class=&o&&=&/span&&span class=&err&&“&/span&&span class=&nv&&M178&/span& &span class=&mi&&994&/span&&span class=&nv&&l580&/span& &span class=&mi&&92&/span&&span class=&nv&&L402&/span&&span class=&o&&-&/span&&span class=&mi&&62&/span&&span class=&err&&”&/span&&span class=&p&&/&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&nv&&path&/span& &span class=&nv&&fill&/span& &span class=&o&&=&/span&&span class=&err&&“#&/span&&span class=&nv&&f2e2ba&/span&&span class=&err&&”&/span&&span class=&nv&&d&/span& &span class=&o&&=&/span&&span class=&err&&“&/span&&span class=&nv&&M638&/span& &span class=&mi&&894&/span&&span class=&nv&&L614&/span& &span class=&mi&&6&/span&&span class=&nv&&l472&/span& &span class=&mi&&440&/span&&span class=&err&&”&/span&&span class=&p&&/&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&nv&&path&/span& &span class=&nv&&fill&/span& &span class=&o&&=&/span&&span class=&err&&“#&/span& &span class=&nv&&fff8be&/span&&span class=&err&&“&/span&&span class=&nv&&d&/span& &span class=&o&&=&/span&&span class=&err&&”&/span&&span class=&nv&&M&/span&&span class=&o&&-&/span&&span class=&mi&&62&/span& &span class=&mi&&854&/span&&span class=&nv&&h300L138&/span&&span class=&o&&-&/span&&span class=&mi&&62&/span&&span class=&err&&“&/span&&span class=&p&&/&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&err&&路径填充&/span&&span class=&o&&=&/span&&span class=&err&&”#&/span&&span class=&mi&&76&/span&&span class=&nv&&c2d9&/span&&span class=&err&&“&/span&&span class=&nv&&d&/span& &span class=&o&&=&/span&&span class=&err&&”&/span&&span class=&nv&&M410&/span&&span class=&o&&-&/span&&span class=&mi&&62&/span&&span class=&nv&&L154&/span& &span class=&mi&&530&/span&&span class=&o&&-&/span&&span class=&mi&&62&/span& &span class=&mi&&38&/span&&span class=&err&&“&/span&&span class=&p&&/&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&err&&路径填充&/span&&span class=&o&&=&/span&&span class=&err&&”#&/span&&span class=&mi&&62&/span&&span class=&nv&&b4cf&/span&&span class=&err&&“&/span&&span class=&nv&&d&/span& &span class=&o&&=&/span&&span class=&err&&”&/span&&span class=&nv&&M1086&/span&&span class=&o&&-&/span&&span class=&mi&&2&/span&&span class=&nv&&L498&/span&&span class=&o&&-&/span& &span class=&mi&&305148&/span& &span class=&mi&&508&/span&&span class=&err&&“&/span&&span class=&p&&/&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&nv&&path&/span& &span class=&nv&&fill&/span& &span class=&o&&=&/span&&span class=&err&&”#&/span&&span class=&mi&&010412&/span&&span class=&err&&“&/span&&span class=&nv&&d&/span& &span class=&o&&=&/span&&span class=&err&&”&/span&&span class=&nv&&M430&/span&&span class=&o&&-&/span&&span class=&mi&&2&/span&&span class=&nv&&l196&/span& &span class=&mi&&52&/span&&span class=&o&&-&/span&&span class=&mi&&76&/span& &span class=&mi&&356&/span&&span class=&err&&“&/span&&span class=&p&&/&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&nv&&path&/span& &span class=&nv&&fill&/span& &span class=&o&&=&/span&&span class=&err&&”#&/span&&span class=&nv&&eb7d3f&/span&&span class=&err&&“&/span&&span class=&nv&&d&/span& &span class=&o&&=&/span&&span class=&err&&”&/span&&span class=&nv&&M598&/span& &span class=&mi&&594&/span&&span class=&nv&&l488&/span&&span class=&o&&-&/span&&span class=&mi&&32&/span&&span class=&o&&-&/span&&span class=&mi&&308&/span& &span class=&mi&&520&/span&&span class=&err&&“&/span&&span class=&p&&/&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&nv&&path&/span& &span class=&nv&&fill&/span& &span class=&o&&=&/span&&span class=&err&&“#&/span&&span class=&mi&&080&/span&&span class=&nv&&a18&/span&&span class=&err&&”&/span&&span class=&nv&&d&/span& &span class=&o&&=&/span&&span class=&err&&“&/span&&span class=&nv&&M198&/span& &span class=&mi&&418&/span&&span class=&nv&&l32&/span& &span class=&mi&&304&/span& &span class=&mi&&116&/span&&span class=&o&&-&/span&&span class=&mi&&448&/span&&span class=&err&&”&/span&&span class=&p&&/&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&nv&&path&/span& &span class=&nv&&fill&/span& &span class=&o&&=&/span&&span class=&err&&“#&/span&&span class=&mi&&3&/span&&span class=&nv&&f201d&/span&&span class=&err&&”&/span&&span class=&nv&&d&/span& &span class=&o&&=&/span&&span class=&err&&“&/span&&span class=&nv&&M1086&/span& &span class=&mi&&1062&/span&&span class=&nv&&l&/span&&span class=&o&&-&/span&&span class=&mi&&344&/span&&span class=&o&&-&/span&&span class=&mi&&52&/span& &span class=&mi&&248&/span&&span class=&o&&-&/span&&span class=&mi&&148&/span&&span class=&err&&”&/span&&span class=&p&&/&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&nv&&path&/span& &span class=&nv&&fill&/span& &span class=&o&&=&/span&&span class=&err&&“#&/span&&span class=&nv&&ebd29f&/span&&span class=&err&&”&/span&&span class=&nv&&d&/span& &span class=&o&&=&/span& &span class=&err&&“&/span&&span class=&nv&&M630&/span& &span class=&mi&&658&/span&&span class=&nv&&l&/span&&span class=&o&&-&/span&&span class=&mi&&60&/span&&span class=&o&&-&/span&&span class=&mi&&372&/span& &span class=&mi&&516&/span& &span class=&mi&&320&/span&&span class=&err&&”&/span&&span class=&p&&/&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&p&&/&/span& &span class=&nv&&g&/span&&span class=&o&&&&/span& &span class=&o&&&&/span&&span class=&p&&/&/span& &span class=&nv&&svg&/span&&span class=&o&&&&/span&
&/code&&/pre&&/div&&p&要达到满意的效我们就必须使用更多的图形来绘制它,如果用 100 个图形来绘制位图,生成的 SVG 大概有 8kB(SVGO 大概 5KB)。随着图形数量的增加,大小也会随之增加。&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/technopagan/sqip& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SQIP&/a&&/li&&/ul&&p&这是一种折中处理方式,我们可以理解为 Primitive 和高斯模糊的简单叠加,这种方式我可以使用少量的图形块就能达到我们满意的效果。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-7cd39bb484f869b9e5b815a00c741860_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1666& data-rawheight=&888& class=&origin_image zh-lightbox-thumb& width=&1666& data-original=&https://pic4.zhimg.com/v2-7cd39bb484f869b9e5b815a00c741860_r.jpg&&&/figure&&p&上图输出的 SVG 大小为 900 字节。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&&svg xmlns =“ http://www.w3.org/2000/svg ”viewBox =“0 0 ”& &filter id =“b”& &feGaussianBlur stdDeviation =“12”/& &/ filter& &路径填充=“#817c70”d =“M0 0hz”/& &g filter =“ url(#b)“transform =”translate(4 4)scale(7.8125)“fill-opacity =”。5“& &ellipse fill =”#000210“rx =”1“ry =”1“transform =”matrix(50.41 11.886 107 194.6)“/& &ellipse fill =”#eee3bb“rx =”1“ry =”1“transform =”matrix(-56. -24.484 205 110.1)“/& &ellipse fill =”#fff4bd “rx =”1“ry =”1“transform =”matrix(35.419 14.37 16.4 123.6)“/& &ellipse fill =”#79c7db“cx =”21“cy =”39“rx =”65“ ry =“65”/& &ellipse fill =“#0c1320”cx =“117”cy =“38”rx =“34”ry =“47”/& &ellipse fill =“#5cb0cd”rx =“1” ry =“1”transform =“矩阵(-39.76 -54.553 219.2 7.9)“/& &path fill =”#e57339“d =”M271 159l-123-16 43 128z“/& &ellipse fill =”#47332f“cx =”214“ cy =“237”rx =“242”ry =“19”/& &/ g& &/ svg&
&/code&&/pre&&/div&&ul&&li&剪影&/li&&/ul&&p&&a href=&https://link.zhihu.com/?target=https%3A//twitter.com/mikaelainalem& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mikael Ainalem&/a& 分享了一个 &a href=&https://link.zhihu.com/?target=https%3A//codepen.io/ainalem/full/aLKxjm/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&codepen&/a&,使用双色轮廓作为 placehold,结果效果非常好:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-c1eee94d443db2c75943c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&531& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/v2-c1eee94d443db2c75943c_r.jpg&&&/figure&&p&上面这种 SVG 是通过手绘得到的,不过我们也可以使用自动化工具自动生成。&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/tooolbox/node-potrace& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&node-potrace&/a& (js)可以将原图转换成矢量图。&/li&&/ul&&figure&&img src=&https://pic4.zhimg.com/v2-a3af32a4e2ae39be2beabee_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&593& data-rawheight=&316& class=&origin_image zh-lightbox-thumb& width=&593& data-original=&https://pic4.zhimg.com/v2-a3af32a4e2ae39be2beabee_r.jpg&&&/figure&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//craftcms.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Craft 3 CMS&/a& 也添加了对剪影的支持 —— &a href=&https://link.zhihu.com/?target=https%3A//github.com/nystudio107/craft3-imageoptimize/blob/master/src/lib/Potracio.php& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Potracio&/a& (php)。&/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/EmilTholin/image-trace-loader& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&image-trace-loader&/a& 可以追踪图片资源,然后导入生成的 img/svg+xml URL&/li&&/ul&&blockquote&原文:&a href=&https://link.zhihu.com/?target=https%3A//medium.freecodecamp.org/using-svg-as-placeholders-more-image-loading-techniques-bed1b810ab2c& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&How to use SVG as a Placeholder, and Other Image Loading Techniques&/a&&br&&br&推荐阅读:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&前端开发备忘录(合集)&/a&&/blockquote&&p&欢迎关注:知乎专栏「&a href=&https://zhuanlan.zhihu.com/jiguang-daily& class=&internal&&极光日报&/a&」,每天为 Makers 导读三篇优质英文文章。&/p&
简评:使用 SVG 作为占位符不但可以减少数据大小还可以达到不错的显示效果。不同类型的图片 placehold对于图片占位符,通常我们会使用以下几种处理方式。保持图像为空:这样可以保证内容不会出现跳动。默认占位符:比如说用户想要查看个人资料显示头像内容…
&figure&&img src=&https://pic1.zhimg.com/v2-f3f42a6e01ba5cb178a2_b.jpg& data-rawwidth=&700& data-rawheight=&700& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&https://pic1.zhimg.com/v2-f3f42a6e01ba5cb178a2_r.jpg&&&/figure&&p&&b&伪元素能做什么?我们要他有何用?它能为我们解决什么问题?和其他的方法相比她有什么有点?我们为什么要使用它?&/b&&/p&&p&&i&伪元素和伪类一样,添加到选择器,但是不是描述状态,他允许我们为元素某些部分设置样式;利用伪元素,我们可以简化页面的html标签,同时用起来也很方便,善于使用伪元素可以让你的页面更加地简洁优雅。之所以叫伪元素,是因为他修饰不在文档树中的部分;不是真实存在的;&/i&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-bfc2cc6a05e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1242& data-rawheight=&394& class=&origin_image zh-lightbox-thumb& width=&1242& data-original=&https://pic1.zhimg.com/v2-bfc2cc6a05e_r.jpg&&&/figure&&p&伪元素实用小技巧 &/p&&figure&&img src=&https://pic3.zhimg.com/v2-ee_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&991& data-rawheight=&510& class=&origin_image zh-lightbox-thumb& width=&991& data-original=&https://pic3.zhimg.com/v2-ee_r.jpg&&&/figure&&h2&1.清除浮动&/h2&&p&何谓清除浮动—?一个父元素的所有子元素如果都是浮动的,那么这个父元素是没有高度的;父元素并没有脱离正常的文档流,仍然占据正常文档流的空间; & 1. 如果这个父元素的相邻元素是行内元素,那么这个行内元素将会在这个父元素的区域内见缝插针,找到一块放得下它的地方 & 2. 如果相邻的元素是一个块级元素,那么设置这个块级元素的margin-top将会以这个父元素的起始位置作为起点。&/p&&p&问题:如何解决高度塌陷?&/p&&p&方法:把父容器的高度撑起来,考虑到浮动了的元素并没有脱离正常文档流,而其它元素会围绕着它环绕,所以清除浮动简单有效的办法就是让环绕的元素不可环绕,把它变成一把尺子,放在最后面,把所有浮动的元素顶起来,而这把尺子就是一个设置了clear的块级元素。因为块级元素会换行,并且设置它两边不能跟着浮动的元素,所以它就跑到浮动元素的下面去,就像一把尺子把浮动元素的内容给顶起来了。而这个可以用一个after实现,因为after就是最后一个子元素:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&.clearfix:after{
content: &&;
&/code&&/pre&&/div&&h2&2.画分割线&/h2&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-e28c310fbfcd99bb45e4b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&453& data-rawheight=&67& class=&origin_image zh-lightbox-thumb& width=&453& data-original=&https://pic2.zhimg.com/v2-e28c310fbfcd99bb45e4b_r.jpg&&&/figure&&p&&br&&/p&&p&&i&在开发中如果我们遇到类似这样的需求我们?我们应该如何只用一个简单的css元素去实现他?&/i&&/p&&p&&b&方案:一个p标签,左右两条线用before和after画出来:&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-b259be08837bec7dc0dc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1139& data-rawheight=&429& class=&origin_image zh-lightbox-thumb& width=&1139& data-original=&https://pic3.zhimg.com/v2-b259be08837bec7dc0dc_r.jpg&&&/figure&&h2&3.计数器&/h2&&p&&i&动态的计算商品的数量,我们经常会借用js来实现;我想告诉css也能实现这个效果,他比js用起来简单多了&/i&&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-180b5cad3b3dbdc001ef5d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&426& data-rawheight=&84& class=&origin_image zh-lightbox-thumb& width=&426& data-original=&https://pic3.zhimg.com/v2-180b5cad3b3dbdc001ef5d_r.jpg&&&/figure&&p&&br&&/p&&blockquote&1.counter-reset: 属性创建或者重置一个或多个计数器;&br&2.counter-increment: 属性递增一个或多个计数器值;&br&3.content: 与:before 及:after 伪元素配合使用,来插入生成内容。&/blockquote&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-34a6d811f06d30f15e2a26ef125ff4a4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&925& data-rawheight=&413& class=&origin_image zh-lightbox-thumb& width=&925& data-original=&https://pic1.zhimg.com/v2-34a6d811f06d30f15e2a26ef125ff4a4_r.jpg&&&/figure&&p&&br&&/p&&p&没有用到一行js代码,你可以试一试;这个主要是结合:checked和counter,用before/after纯CSS实现的,这种纯粹是炫技;&/p&&h2&4.平行四边形&/h2&&p&&i&有没有办法只让容器的形状倾斜而保持其内容不变呢?或许你会想到嵌套两层元素,外层skew(),对内容在应用一次反相skew变形,从而抵消变形的效果。但是意味着我们不得不使用一层额外的HTML元素包裹内容.有些累赘&/i&&/p&&p&解决方案:&b&伪元素,把样式应用到伪元素上,对伪元素进行变形,再把伪元素定位+层级放到到住宿元素下面&/b&&/p&&p&光说不练,假把式&b&&a href=&https://link.zhihu.com/?target=http%3A//dabblet.com/gist/f2d9b238aa9& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&试一试&/a&&/b&&/p&&h2&5. 梯形标签页&/h2&&p&&i&在网页中我们经常见到梯形形状的标签页,常见的技巧都是比较杂乱,或者说难以维护的,那他们是如何实现的呢?&/i&&/p&&p&解决方案: &b&三维世界中旋转一个矩形,由于透视关系,我们在二维图像上看到一个梯形,再结合平行四边实现的方法便能实现&/b&&/p&&blockquote&perspective: 观察者与z=0平面的距离;&/blockquote&&p&对元素使用了3D变形之后,其内部的变形效应是&不可逆转的&,和2D变形不同(2D变形内部的逆向变形可以抵消外部的变形效应);&/p&&p&为了让他的尺寸更好掌握,我们可以为他指定transform-origin:也可用scale()对他在进行美观操作;&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-d3d01a3340cdd32486e9afa38b6e03f9_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&776& data-rawheight=&365& class=&origin_image zh-lightbox-thumb& width=&776& data-original=&https://pic4.zhimg.com/v2-d3d01a3340cdd32486e9afa38b6e03f9_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-2ece7db5cde9be5e3f6f16f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&686& data-rawheight=&89& class=&origin_image zh-lightbox-thumb& width=&686& data-original=&https://pic3.zhimg.com/v2-2ece7db5cde9be5e3f6f16f_r.jpg&&&/figure&&p&&br&&/p&&p&&b&&a href=&https://link.zhihu.com/?target=http%3A//dabblet.com/gist/dc8e794502& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&试一试&/a&&/b&&/p&&h2&6 多列均匀布局&/h2&&p&如何实现下列这种多列均匀布局:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-ccc8ab00ad5e2b642f2a1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&468& data-rawheight=&141& class=&origin_image zh-lightbox-thumb& width=&468& data-original=&https://pic2.zhimg.com/v2-ccc8ab00ad5e2b642f2a1_r.jpg&&&/figure&&p&&br&&/p&&p&通过给伪元素 :after 设置 inline-block 设置宽度 100% ,配合容器的 text-align: justify 就可以轻松实现多列均匀布局了。&/p&&p&那么为什么使用了 :after 伪元素之后就可以实现对齐了呢?&/p&&p&原因在于 justify 只有在存在第二行的情况下,第一行才两端对齐,所以在这里,我们需要制造一个假的第二行,而 :after 伪元素正好再适合不过。 &/p&&figure&&img src=&https://pic2.zhimg.com/v2-d145ec834fb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&436& data-rawheight=&474& class=&origin_image zh-lightbox-thumb& width=&436& data-original=&https://pic2.zhimg.com/v2-d145ec834fb_r.jpg&&&/figure&&p&&br&&/p&&p&&b&需要注意的是img/input等单标签是没有before/after伪元素的,因为它们本身是不可以有子元素,如果你给img添加一个before,那么会被浏览器忽略。&/b&&/p&&p&伪元素能实现的功能很多!欢迎大家在评论底下一一补充&/p&
伪元素能做什么?我们要他有何用?它能为我们解决什么问题?和其他的方法相比她有什么有点?我们为什么要使用它?伪元素和伪类一样,添加到选择器,但是不是描述状态,他允许我们为元素某些部分设置样式;利用伪元素,我们可以简化页面的html标签,同时用起…
&figure&&img src=&https://pic4.zhimg.com/v2-e7eebef2e_b.jpg& data-rawwidth=&378& data-rawheight=&298& class=&content_image& width=&378&&&/figure&&blockquote&之前一直在博客园写作,最近几天才开的知乎专栏,这段时间我会每天从博客园搬运一篇博客到知乎上来。才疏学浅, 谬误之处请不吝于评论区指教,谢谢大家。我的博客园博客地址: &a href=&https://link.zhihu.com/?target=http%3A//www.cnblogs.com/penghuwan/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&外婆的彭湖湾 - 博客园&/a&&/blockquote&&p&&br&&/p&&p&文章目录&/p&&ul&&li&&i&单行文本溢出的省略&/i&&/li&&li&&i&从单行文本溢出省略到多行文本溢出省略&/i&&/li&&li&&i&多行文本溢出的省略(...)方案一 ---简单方便的解决方案&/i&&/li&&li&&i&多行文本溢出的省略(...)方案二 ---简单粗暴的解决方案&/i&&/li&&li&&i&多行文本溢出的省略(...)方案三 --简洁优雅的解决方案&/i&&/li&&/ul&&p&&br&&/p&&p&写前端UI的朋友们也许都遇到过这样的问题:我们需要实现这样一个需求,在一个父级元素中隐藏一个可能过长的文本&/p&&p&&br&&/p&&p&&i&这个文本可能是单行的:&/i&&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-a8c3d23b4fd8e_b.jpg& data-caption=&& data-rawwidth=&530& data-rawheight=&330& class=&origin_image zh-lightbox-thumb& width=&530& data-original=&https://pic1.zhimg.com/v2-a8c3d23b4fd8e_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&i&也可能是多行的:&/i&&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-de051dd5e0_b.jpg& data-caption=&& data-rawwidth=&412& data-rawheight=&150& class=&content_image& width=&412&&&/figure&&p&&br&&/p&&p&下面我就给大家展示如何简单或优雅地实现这种需求&/p&&p&&br&&/p&&blockquote&&b&单行文本溢出的省略&/b&&/blockquote&&p&&br&&/p&&p&先上代码&/p&&div class=&highlight&&&pre&&code class=&language-html&&&span&&/span&&span class=&p&&&&/span&&span class=&nt&&div&/span& &span class=&na&&style &/span&&span class=&o&&=&/span&
&span class=&s&&'width:400&/span&
&span class=&s&&
height:40&/span&
&span class=&s&&
border:1'&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&p&/span& &span class=&na&&style&/span&&span class=&o&&=&/span&
&span class=&s&&'overflow:&/span&
&span class=&s&&
text-overflow:&/span&
&span class=&s&&
white-space:'&/span&&span class=&p&&&&/span&
这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本
这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本
&span class=&p&&&/&/span&&span class=&nt&&p&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&/code&&/pre&&/div&&p&&br&&/p&&p&demo:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-b1a054cb7ba80affaa8ff11_b.jpg& data-caption=&& data-rawwidth=&904& data-rawheight=&166& class=&origin_image zh-lightbox-thumb& width=&904& data-original=&https://pic1.zhimg.com/v2-b1a054cb7ba80affaa8ff11_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&b&&i&关于overflow: hidden&/i&&/b&&/p&&p&这里我们需要注意到一点:这里的overflow并不是设置为父级元素div的属性,而是p标签的属性,需要和overflow的普通用法区分开来&/p&&ol&&li&overflow:hidden的普通用法:用在块级元素(例如div)的外层隐藏内部溢出元素&/li&&li&overflow: hidden的特殊用法:在上述例子中配合text-overflow:white-space:实现p元素隐藏自身的溢出并设置(...)的效果&/li&&/ol&&p&&br&&/p&&p&&b&&i&关于text-overflow:&/i&&/b&&/p&&p&这一属性依赖于overflow: hidden存在,只有设置了overflow:hidden它才是能够生效的,你可以把它看作overflow对于文本溢出隐藏的一种‘特殊样式’&/p&&p&&br&&/p&&p&&b&&i&关于white-space: nowrap&/i&&/b&&/p&&p&它的作用是让文本不换行,这是overflow:hidden和text-overflow:ellipsis生效的基础!没有它overflow:hidden和text-overflow:ellipsis无法生效!(在单行文本溢出省略这一案例中)&/p&&p&&br&&/p&&blockquote&&b&从单行文本溢出省略到多行文本溢出省略&/b&&/blockquote&&p&许多同学可能会这样想:怎么实现多行文本省略呢?不是只要把white-space:nowrap去掉就可以了吗?( _(:3 」∠)_ 要是这么简单就好了...)&/p&&p&实践出真知,让我们来试一下,&b&去掉CSS样式中的white-space:nowrap&/b&&/p&&p&&br&&/p&&p&demo:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-aae7acb0933dca_b.jpg& data-caption=&& data-rawwidth=&930& data-rawheight=&282& class=&origin_image zh-lightbox-thumb& width=&930& data-original=&https://pic1.zhimg.com/v2-aae7acb0933dca_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&这次,没能隐藏成功,那如果我们overflow:hidden是设在父级元素div中呢?&/p&&p&得到demo:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-f9a4f49a14845fcecc753d1_b.jpg& data-caption=&& data-rawwidth=&914& data-rawheight=&274& class=&origin_image zh-lightbox-thumb& width=&914& data-original=&https://pic3.zhimg.com/v2-f9a4f49a14845fcecc753d1_r.jpg&&&/figure&&p&&br&&/p&&p&隐藏成功了,&b&可你仍然看不到你想看到的那三个点&/b&&/p&&p&&br&&/p&&p&妥妥地失败了,嗯,没错,所以对于多行文本溢出的省略我们需要另辟蹊径了&/p&&p&&br&&/p&&blockquote&&b&多行文本溢出的省略(...)方案一 ---简单方便的解决方案&/b&&/blockquote&&p&&br&&/p&&p&我们可以借助&b&webkit的CSS扩展属性&/b&实现这一点:&/p&&div class=&highlight&&&pre&&code class=&language-html&&&span&&/span&&span class=&p&&&&/span&&span class=&nt&&div&/span& &span class=&na&&style &/span&&span class=&o&&=&/span&
&span class=&s&&'width:400&/span&
&span class=&s&&
height:70&/span&
&span class=&s&&
border:1'&/span&&span class=&p&&&&/span&
&span class=&p&&&&/span&&span class=&nt&&p&/span& &span class=&na&&style&/span&&span class=&o&&=&/span&
&span class=&s&&'display: -webkit-//对象作为弹性伸缩盒子模型显示 &/span&
&span class=&s&&
-webkit-box-orient://设置或检索伸缩盒对象的子元素的排列方式 &/span&
&span class=&s&&
-webkit-line-clamp: 2;//溢出省略的界限&/span&
&span class=&s&&
overflow:'&/span&&span class=&err&&//设置隐藏溢出元素&/span&
&span class=&p&&&&/span&
这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本
这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本
&span class=&p&&&/&/span&&span class=&nt&&p&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&/code&&/pre&&/div&&p&&br&&/p&&p&demo:&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-b05e1ed5b747dcb9fcf3542_b.jpg& data-caption=&& data-rawwidth=&826& data-rawheight=&190& class=&origin_image zh-lightbox-thumb& width=&826& data-original=&https://pic2.zhimg.com/v2-b05e1ed5b747dcb9fcf3542_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&【注意】&/p&&ol&&li&四行CSS缺一不可!&/li&&li&因为这是webkit的CSS属性扩展,所以兼容浏览器范围是PC端的webkit内核的浏览器:chrome/safari/QQ浏览器/360/猎豹等以及绝大多数的移动端浏览器&/li&&/ol&&p&&br&&/p&&blockquote&&b&多行文本溢出的省略(...)方案二 ---简单粗暴的解决方案&/b&&/blockquote&&p&&br&&/p&&p&&b&方案一固然最为简单,但其还存在着跨浏览器兼容的问题&/b&,于是人民群众们提出了一种简单粗暴的方式去实现通用的解决方案:给div固定高和宽,同时采用相对定位,与此同时对在div内放一个&p&...&/p&对其使用绝对定位,定在右下角,同时设其背景颜色为白色就可以了:&/p&&div class=&highlight&&&pre&&code class=&language-html&&&span&&/span&&span class=&p&&&&/span&&span class=&nt&&div&/span& &span class=&na&&style &/span&&span class=&o&&=&/span&
&span class=&s&&'position:&/span&
&span class=&s&&
width:400&/span&
&span class=&s&&
height:45&/span&
&span class=&s&&
border:1&/span&
&span class=&s&&
overflow:'&/span&&span class=&p&&&&/span&
这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本
这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本
&span class=&p&&&&/span&&span class=&nt&&p&/span& &span class=&na&&style &/span&&span class=&o&&=&/span& &span class=&s&&'position:right:0;bottom:6margin:0;background:white'&/span&&span class=&p&&&&/span&...&span class=&p&&&/&/span&&span class=&nt&&p&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&/code&&/pre&&/div&&p&demo:&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-3cde1d1fe04dcf4d4d79b69a3cca185d_b.jpg& data-caption=&& data-rawwidth=&834& data-rawheight=&156& class=&origin_image zh-lightbox-thumb& width=&834& data-original=&https://pic2.zhimg.com/v2-3cde1d1fe04dcf4d4d79b69a3cca185d_r.jpg&&&/figure&&p&&br&&/p&&p&但方案二也有一些问题&/p&&p&1在文本没有溢出父级元素时也同样显示省略号:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-2c6cf32decbe8bc9adbd3aa_b.jpg& data-caption=&& data-rawwidth=&886& data-rawheight=&196& class=&origin_image zh-lightbox-thumb& width=&886& data-original=&https://pic3.zhimg.com/v2-2c6cf32decbe8bc9adbd3aa_r.jpg&&&/figure&&p&&br&&/p&&p&2末尾处文本可能有被“裁剪”的副效果:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-cec3af63b50e574b05522_b.jpg& data-caption=&& data-rawwidth=&936& data-rawheight=&214& class=&origin_image zh-lightbox-thumb& width=&936& data-original=&https://pic4.zhimg.com/v2-cec3af63b50e574b05522_r.jpg&&&/figure&&p&&br&&/p&&blockquote&&b&多行文本溢出的省略(...)方案三 --简洁优雅的解决方案&/b&&/blockquote&&p&&br&&/p&&p&那么有没有更加优雅的解决方案,在没有溢出的时候不显示省略号(...),在溢出的时候隐藏并显示省略号呢?答案是有的!先看看我们最终实现的demo:&/p&&p&&br&&/p&&p&在文本没有溢出父级元素时:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-8b4cf126e5ae49a5be4e0_b.jpg& data-caption=&& data-rawwidth=&468& data-rawheight=&202& class=&origin_image zh-lightbox-thumb& width=&468& data-original=&https://pic1.zhimg.com/v2-8b4cf126e5ae49a5be4e0_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&文本溢出父级元素时:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-fb246f02dbdef698f5847cbfc02dab05_b.jpg& data-caption=&& data-rawwidth=&460& data-rawheight=&196& class=&origin_image zh-lightbox-thumb& width=&460& data-original=&https://pic1.zhimg.com/v2-fb246f02dbdef698f5847cbfc02dab05_r.jpg&&&/figure&&p&&br&&/p&&p&下面是HTML和JS代码:&/p&&div class=&highlight&&&pre&&code class=&language-html&&&span&&/span&&span class=&p&&&&/span&&span class=&nt&&div&/span& &span class=&na&&id&/span&&span class=&o&&=&/span&&span class=&s&&'view'&/span&
&span class=&na&&style&/span&&span class=&o&&=&/span&&span class=&s&&'border:1&/span&
&span class=&s&&
width:200&/span&
&span class=&s&&
height:70&/span&
&span class=&s&&
overflow:auto'&/span&&span class=&p&&&&/span&
&span class=&p&&&/&/span&&span class=&nt&&div&/span&&span class=&p&&&&/span&
&/code&&/pre&&/div&&p&&br&&/p&&p&JS代码&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&nx&&s&/span& &span class=&o&&=&/span& &span class=&s1&&'这是一个文本这是一个文本这是一个文本这是一个文本这是一个文本这是一个文本'&/span&
&span class=&nx&&el&/span& &span class=&o&&=&/span& &span class=&nb&&document&/span&&span class=&p&&.&/span&&span class=&nx&&getElementById&/span&&span class=&p&&(&/span&&span class=&s1&&'view'&/span&&span class=&p&&);&/span&
&span class=&nx&&n&/span& &span class=&o&&=&/span& &span class=&nx&&el&/span&&span class=&p&&.&/span&&span class=&nx&&offsetHeight&/span&&span class=&p&&;&/span&
&span class=&k&&for&/span&&span class=&p&&(&/span&&span class=&nx&&i&/span&&span class=&o&&=&/span&&span class=&mi&&0&/span&&span class=&p&&;&/span& &span class=&nx&&i&/span&&span class=&o&&&&/span&&span class=&nx&&s&/span&&span class=&p&&.&/span&&span class=&nx&&length&/span&&span class=&p&&;&/span& &span class=&nx&&i&/span&&span class=&o&&++&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&el&/span&&span class=&p&&.&/span&&span class=&nx&&innerHTML&/span& &span class=&o&&=&/span& &span class=&nx&&s&/span&&span class=&p&&.&/span&&span class=&nx&&substr&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&nx&&i&/span&&span class=&p&&);&/span&
&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&nx&&n&/span& &span class=&o&&&&/span& &span class=&nx&&el&/span&&span class=&p&&.&/span&&span class=&nx&&scrollHeight&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&nx&&el&/span&&span class=&p&&.&/span&&span class=&nx&&style&/span&&span class=&p&&.&/span&&span class=&nx&&overflow&/span& &span class=&o&&=&/span& &span class=&s1&&'hidden'&/span&&span class=&p&&;&/span&
&span class=&nx&&el&/span&&span class=&p&&.&/span&&span class=&nx&&innerHTML&/span& &span class=&o&&=&/span& &span class=&nx&&s&/span&&span class=&p&&.&/span&&span class=&nx&&substr&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&nx&&i&/span&&span class=&o&&-&/span&&span class=&mi&&3&/span&&span class=&p&&)&/span& &span class=&o&&+&/span& &span class=&s1&&'...'&/span&&span class=&p&&;&/span&
&span class=&k&&break&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&&br&&/p&&p&首先我们需要弄清楚offsetHeight和scrollHeight所表示的高度:&/p&&p&&br&&/p&&p&1溢出显示滚动条时:&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ee9d52e97c4eb8ccdf2a8_b.jpg& data-caption=&& data-rawwidth=&640& data-rawheight=&650& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&https://pic3.zhimg.com/v2-ee9d52e97c4eb8ccdf2a8_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&2没有溢出时:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-41b0b04f3de9ac1a3a1ac3_b.jpg& data-caption=&& data-rawwidth=&768& data-rawheight=&326& class=&origin_image zh-lightbox-thumb& width=&768& data-original=&https://pic1.zhimg.com/v2-41b0b04f3de9ac1a3a1ac3_r.jpg&&&/figure&&p&&br&&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&nx&&el&/span& &span class=&o&&=&/span& &span class=&nb&&document&/span&&span class=&p&&.&/span&&span class=&nx&&getElementById&/span&&span class=&p&&(&/span&&span class=&s1&&'view'&/span&&span class=&p&&);&/span&
&span class=&nx&&n&/span& &span class=&o&&=&/span& &span class=&nx&&el&/span&&span class=&p&&.&/span&&span class=&nx&&offsetHeight&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&&p&表示的是取到当前包裹文本的父级元素的高度&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&nx&&el&/span&&span class=&p&&.&/span&&span class=&nx&&innerHTML&/span& &span class=&o&&=&/span& &span class=&nx&&s&/span&&span class=&p&&.&/span&&span class=&nx&&substr&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&nx&&i&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&表示在for循环中取出长度递增的文段,例如:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&'这'   --& '这是'   --&   '这是一'
&/code&&/pre&&/div&&p&当n & el.scrollHeight也就是 当前文本高度&滚动条内的内容的高度,代表着刚好达到溢出的界限,此时执行if内的语句&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&nx&&el&/span&&span class=&p&&.&/span&&span class=&nx&&style&/span&&span class=&p&&.&/span&&span class=&nx&&overflow&/span& &span class=&o&&=&/span& &span class=&s1&&'hidden'&/span&&span class=&p&&;&/span&
&span class=&nx&&el&/span&&span class=&p&&.&/span&&span class=&nx&&innerHTML&/span& &span class=&o&&=&/span& &span class=&nx&&s&/span&&span class=&p&&.&/span&&span class=&nx&&substr&/span&&span class=&p&&(&/span&&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&nx&&i&/span&&span class=&o&&-&/span&&span class=&mi&&3&/span&&span class=&p&&)&/span& &span class=&o&&+&/span& &span class=&s1&&'...'&/span&&span class=&p&&;&/span&
&span class=&k&&break&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&&p&将父级元素view的overflow设置为hidden,并且将末尾的三个文字用...取代,同时跳出for循环&/p&&p&&br&&/p&&p&perfect!
这样我们就实现了优雅的解决方案&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-0aaa8e5e39faced1683b44c_b.jpg& data-caption=&& data-rawwidth=&1626& data-rawheight=&1508& class=&origin_image zh-lightbox-thumb& width=&1626& data-original=&https://pic4.zhimg.com/v2-0aaa8e5e39faced1683b44c_r.jpg&&&/figure&&p&&/p&
之前一直在博客园写作,最近几天才开的知乎专栏,这段时间我会每天从博客园搬运一篇博客到知乎上来。才疏学浅, 谬误之处请不吝于评论区指教,谢谢大家。我的博客园博客地址:
文章目录单行文本溢出的省略从单行文本溢出省略到多行文…
&figure&&img src=&https://pic2.zhimg.com/v2-e69af734e1b2d1f4aafa5_b.jpg& data-caption=&& data-rawwidth=&394& data-rawheight=&357& class=&content_image& width=&394&&&/figure&&p&所有的事件都会走一遍这个流程。&/p&&blockquote&事件委托(代理),这个地方一直不是特别明白,为什么可以在父元素上面安装addEventListener就可以监视管理它的子元素?&/blockquote&&p&如果点击了 (text) 那么在 div、body、……绑定的事件都会执行,除非有一个事件阻止了事件冒泡。&/p&&p&因此我们可以给父元素绑定一个事件,这样子元素的事件就会&b&冒泡&/b&到父元素。&/p&&p&----------------&/p&&p&当事件捕获和事件冒泡一起存在的情况,事件又是如何触发呢。这里记被点击的DOM节点为target节点&/p&&ol&&li&document 往 target节点,捕获前进,遇到注册的捕获事件立即触发执行&/li&&li&到达target节点,触发事件(对于target节点上,是先捕获还是先冒泡则捕获事件和冒泡事件的注册顺序,先注册先执行)&/li&&li&target节点 往 document 方向,冒泡前进,遇到注册的冒泡事件立即触发&/li&&/ol&&h2&总结下就是:&/h2&&ul&&li&对于非target节点则先执行捕获在执行冒泡&/li&&li&对于target节点则是先执行先注册的事件,无论冒泡还是捕获&/li&&/ul&
所有的事件都会走一遍这个流程。事件委托(代理),这个地方一直不是特别明白,为什么可以在父元素上面安装addEventListener就可以监视管理它的子元素?如果点击了 (text) 那么在 div、body、……绑定的事件都会执行,除非有一个事件阻止了事件冒泡。因此我们…
&figure&&img src=&https://pic1.zhimg.com/v2-4ea3fefcdec72f_b.jpg& data-rawwidth=&910& data-rawheight=&276& class=&origin_image zh-lightbox-thumb& width=&910& data-original=&https://pic1.zhimg.com/v2-4ea3fefcdec72f_r.jpg&&&/figure&&blockquote&本文基于Apple UI Design Resources-iOS 11 beta (Sketch)&/blockquote&&p&在产品视觉设计中,用英文命名图层是良好的习惯:对开发友好,而且方便配合一些设计工具(如Framer、Principle)。在ios设计中,苹果官方的图层命名较为完整,&b&虽然不是唯一答案&/b&,但很有参考价值。本文是系列第2篇,整理补充了一下思路,谢谢大家对我第1篇的的支持~&/p&&blockquote&第1篇的链接在此:&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&图层英文怎么写?来看看Apple官方写法(Bars篇)&/a&&/blockquote&&h2&&b&命名规则&/b&&/h2&&p&&b&1.顺序为大类/中类/小类+属性、状态描述(非必须,看情况),使用symbol&/b&&/p&&p&Sketch的Symbol会识别&/&进行归类,这个很多人都知道。特别是大型的UiKit,尤其需要这种系统的分类方法。而且,Sketch要正式推出的Libraries,其实也是基于Symbol进行协作哦,所以分类更能提高效率。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-62f34bcfce0dd_b.jpg& data-rawwidth=&946& data-rawheight=&164& class=&origin_image zh-lightbox-thumb& width=&946& data-original=&https://pic1.zhimg.com/v2-62f34bcfce0dd_r.jpg&&&/figure&&p&&br&&/p&&p&&b&Controls(控制器)&/b&&/p&&p&控制器包括以下组件(类名),有些是查找的翻译,有些是我自己试着翻译的。如有错误,希望大家多多指正,我会及时修改的。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-18f91f88e5a64b457cdfb5e_b.jpg& data-rawwidth=&484& data-rawheight=&378& class=&origin_image zh-lightbox-thumb& width=&484& data-original=&https

我要回帖

更多关于 三星多窗口 的文章

 

随机推荐