再谈谈960

2024-04-29 03:48
文章标签 谈谈 960

本文主要是介绍再谈谈960,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

早上看见腾讯兄弟的这篇文章网格(UED所谓栅格化)方案生成器。初略一看,心里窃喜,以为有数学高人给出了严格的证明。晚上回来仔细一研究,心内沮丧,颇为失望,有几点想说明一下。

选用960,其实很简单,因为960能够被很多数整除,同时又很接近1024,因此很多网站选用了这个宽度。

我在960的秘密一文中,只是想从数学的角度上指出对栅格系统来说,960是个很灵活的宽度而已。这只是一个引子,想激发大家对栅格系统的兴趣,之后的文章才是重点。

我的数学分析

在将960分解质因数后,我最初的结论确实有不妥之处。这点小奎指出来了,720比960的约数更多,还有1440的约数也很多。从数学上,可以简化为以下问题:

W = 2^m * 3^n * 5
N(W) = (m + 1) * (n + 1) * 2 - 2

mn是整数,现在要使得N(W)尽量大,同时W的值最接近1024. 简单分析质因数可以得到:

...
N(480) = N(2^5 * 3 * 5) = 22
N(960) = N(2^6 * 3 * 5) = 26
N(1920) = N(2^7 * 3 * 5) = 30
...
N(360) = N(2^3 * 3^2 * 5) = 22
N(720) = N(2^4 * 3^2 * 5) = 28
N(1440) = N(2^5 * 3^2 * 5) = 34
...

就这两个系列的的N值最大(稍加分析,能够比较明显地“看”出来,我相信数学系的学生能严格证明)。

很明显,上面最接近1024的就是960.

国外同行的依据

960不是新鲜玩意,国外同行们已经有过很多讨论,比如:Optimal width for 1024px resolution?, 作者选用960的原因是:

I’ve been using 960 for some time now, as it’s slightly smaller than full width, and it’s divisible by 3, 4, 5, 6, 8, 10, 12, 15, and 16 (imagine the grid possibilities). I’d love to hear what all of you are wrestling with.

再来看看960.gs作者的解释:

All modern monitors support at least 1024 × 768 pixel resolution. 960 is divisible by 2, 3, 4, 5, 6, 8, 10, 12, 15, 16, 20, 24, 30, 32, 40, 48, 60, 64, 80, 96, 120, 160, 192, 240, 320 and 480. This makes it a highly flexible base number to work with.

关于苹果系统下浏览器的默认宽度为960,国外也早有人谈及,看看这个ppt:Grids Are Good

一个有意思的巧合

上周去阿里中文站交流CMS系统的设计,中文站选用了960的宽度。他们调研了很多显示设备,发现320是很多显示设备屏幕的最小单位。因此在Web浏览器上,选用了3个320组成的960布局。这个思路蛮有意思。

关于10像素的间距

选用10px的理由非常简单:写CSS时,比较容易计算各种padding和margin. 淘宝的设计有个潜规则:间距最好都是5px的倍数。5的倍数容易计算,对人友好。Blueprint的设计中,也是把间距定位10px, 类似的例子有很多。就这么简单。

值得一提的是,阿里中文站采用了8px, 原因是8是2的立方,计算机在渲染时,能减少性能开支。不过这个性能影响实在太小了。在软件工程中,人的成本是最大的,感觉对计算机友好不如对人更友好。

关于Grid的翻译

个人觉得“网格”太偏设计领域,而且“网格”的外延很多,不容易让读者立刻领悟要表达的意思。不如“栅格”,一看就很明了。当然,每个译者都可以保留自己的意见,就如“优雅降级”和“平稳退化”一样,存在的不一定是最好的。既然是翻译,就应该有自己的思考和选择。

关于腾讯兄弟的数学证明

w = x * n + (n - 1) * y

上面这个公式和我说的是一样的,x是我说的c, y是槽距g, 对于950, 我的公式是:

W = c * N + g * (N - 1)

至于后面的,

w=z*Math.floor(n/m)+(Math.floor(n/m)-(n%m-1))*y+x*(n%m)

实在不敢苟同。何必引入z来让问题复杂化?小模块划分好了,大模块也就有了。本质上都是穷举,没必要这样折腾。

其它的,比如黄金分割,不想说什么。如果腾讯兄弟认为1px的栅格有意义,我实在佩服。

很重要的一点

栅格并不会限制设计师们的设计,这个在《超越CSS》一书里有很好的阐述和例子。若认为栅格化后,设计师们只能定定颜色、画画小图,实在让我汗流浃背无语凝噎。

栅格化对前端开发工程师更是一种解放,从每天的重复性劳动中解脱出来,多些时间来研究新应用,无论对公司还是对个人都是好的。

最后,提前公布下工具

我不会Photoshop, 原文章中的那些图,其实都是用自己写的一个小工具生成的。放在线上好久了,只是想着等完善后再公布:

http://lifesinger.org/lab/2008/grid_design_tool.html

这个工具借鉴了老外的 Grid Designer 2. 功能如下:

  1. 可以测试各种蛋糕的切法^o^
  2. 公式中,带灰色小箭头的表示是计算值,可以在三种计算值之间切换
  3. 注意那个Add Box按钮,添加的Box,可以拖动,鼠标放到边框附近,还可以调整大小
  4. 还有一些方便截图的小功能,折腾折腾应该就会用

最后,本文不欢迎任何侮辱性的留言评论。我非常期望国内的前端开发工程师们能向国外的同行们学习:开放真诚地讨论问题,互助学习、共同进步。

这篇关于再谈谈960的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/945040

相关文章

谈谈我的8年编程自学辛酸史

2008年:第一个脚印 2008年的一个周末,我一如既往读着最爱的《电脑迷》和《电脑爱好者》,不经意间看见一篇文章,教读者如何自己制作一个exe来说生日快乐,于是,或许是我一生的道路就从这里开始了。 当时已经痴迷于电脑软件,但是身为初中生的我并没有机会玩电脑,只能苦苦地看着杂志记录好玩的软件,并没有想过真的要自己去制作软件。直到去新华书店买辅导书的一次契机,我看见了一本《Java语言教程》

作为面试官的一点点感悟,谈谈技术人的成长之路

因为工作上的原因,做过几次面试官,面试的同学有应届生,也有工作3-5年的老技术人。最近也频繁作为面试官帮助筛选候选人,中间有很多值得深思的东西,我记录了下来分享给大家。 以下观点仅为个人观点,不代表任何公司的立场。        01 面试不是简单的你问我答 一般来讲,作为面试官和候选人进行沟通的第一个问题是一般是自我介绍,整个自我介绍的情况应该控制在2分钟左右,阐述自己的教育背景,项目经历

谈谈经典限流方法—漏桶、令牌桶与Guava RateLimiter的实现

大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! 高并发的业务系统经常要接受大流量的考验,为了保证系统的响应度和稳定性,往往都需要对有风险的接口实施限流(rate limiting),更高大上的说法则是“流量整形”(traffic shaping)。限流的思想最初来源于计算机网络,有两种经典的方法:漏桶和令牌桶。本文先来稍微研究一下它们。

uni-app 扫码优化:谈谈我是如何提升安卓 App 扫码准确率的

一. 前言 之前的一个项目遭到用户吐槽:“你们这个 App 扫码的正确率太低了,尤其是安卓的设备。经常性的扫码扫不出来,就算是扫出来了,也是错误的结果!” 由于之前是扫描二维码的需求,所以没有对扫描条形码做严格的测试,客户提示说是条形码扫描效率低下。随即,我用自己的手机测试了一下,在安卓手机上确实有这样的问题,扫码准确率确实是低,尤其是条形码,扫码效率慢且不准确。扫描二维码的的效率还算可以

谈谈singelton单例模式

 单例模式是一种常用设计模式。该类只有一个实例,而且该类自行创建实例。         很多时候,服务器都只需要一个全局对象,这样方便协调系统的整体行为。比如系统的配置文件,系统只需要一个单例对象读取加载,其他对象只需要通过该单例对象获取配置信息。这样方便在复杂模式下对系统配置的管理。          java中常用单例模式: public class Singleton(

谈谈函数返回值为什么不能重载

一、函数的定义:       函数将有效的输入值变换为唯一的输出值,同一输入总是对应同一输出。       计算机本质是对抽象数学公式的具体实现,并以此具体实现来解决现实生活中的实际问题。 注:wiki百科对 “函数” 的定义如图,图比较大,请点击打开详情,左右拖动查看 全部内容。 二、悖论      反过来设想一下,如果返回值的类型 能用来 重载,那么对于相同的输入值,程序怎么决定

谈谈分组:sql的group by+聚集函数 和 python的groupby+agg

直接举例子+分析例子+总结来说,我先给几个表: 学生表:student(学号,姓名,年龄,院系); 课程表:course(课程号,课程名,学分); 学生选课表:sc(学号,课程号,分数); 啥时候用分组呢? 我由简至深来谈。 1、比如让我们查询各个课程号及相应的选课人数。 首先定位到sc表上,“各个”很明显就是要按课程分组,group by出场了,分组后对每组去统计选课人数,聚集函数出场了。

谈谈你对 Java 平台的理解?

谈谈你对 Java 平台的理解? 先谈谈我的理解: 一次编译,永久执行。依赖于jre的运行环境,jdk提供核心类库,java源代码经过javac编译为.class文件,.class文件经过JVM解析或编译运行,无需过多关心不同操作系统的差异性。 典型回答 Java 本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运行”(Write once, run any

谈谈最近一段时间的工作

被原来的公司派出去做一个天津的项目,一个多月了,平均每天加班加到10点左右,周末都不休息,感觉好累啊。 最累的是心了,原来辛苦付出的四个月不是很被认可, 我是实习生,但是我不想一直做实习生, 这个月收获很多,把自己以前不敢尝试的后台狠狠的做了一次, 希望以后的日子自己能够越来越厉害! 近期打算辞职,过年以后向着北京出发!

谈谈nvm、nrm、pnpm的理解

谈一谈目前用的最多的也是主流的工具nvm、nrm以及pnpm的理解。 nvm 一般我们在公司开发,公司一般可能会有多个项目,可能有新项目也有老项目,不同的前端工程可能依赖的node版本不一样。这个时候就需要我们拥有多个node版本来开发不同的工程,如何安装多个node版本并可以随意的切换我们的node开发环境,这个时候nvm就能完美的发挥出自己的优势。nvm版本过低是不兼容vue3的项目的,我