不要变笨 | Don’t to be stupid

换permalink页面404的错误

Tags: , ,

以前博客的链接地址是以参数的形式存在的,这样用户的体验并不好,然后打算把他设成日期加文章名的形式,这样也更具有REST风格.但是问题来了,一设成固定链接,则所有的链接都失效了.和这篇文章是同样的问题,通过设置/index.php/%year%/%monthnum%/%postname%/也能访问,但这篇文章并不能解决我的问题.最后花了半天时间把问题解决了,这里总结一下.

rewrite模块

重定向需要用到rewrite模块,所以首先可以在phpinfo里查看rewrite模块是否已经打开.如果没有需要去http.conf将以下代码的注释去掉.

1
#LoadModule rewrite_module modules/mod_rewrite.so

AllowOverride

这个可能很多人没注意,我就是遇到这个问题.要让apache能够解析.htaccess文件,就必须设置AllowOverride参数.如果设为none,那么文件就不会生效.我偷懒设置为all,更多参数可以看这里.

1
2
3
<Directory />
AllowOverride None
</Directory>

.htaccess

这个比较重要,如何重定向主要就看这个文件,在这里提供一个模板好了.

1
2
3
4
5
6
7
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

纯CSS解决ie6下position:fixed问题

Tags: , , , ,

前不久做一个网页,需要做一个分页始终位于底部,不会因为窗口的缩放和滚动条的滚动而变化.那么一开始想到的肯定是position:fixed,只要设置这个CSS属性就能达到刚刚说的目的,但世界永远不是这么完美的,因为有IE6的存在.IE6不支持这个属性,所以问题就来了.

需要解决的问题

  1. 当页面内容比较少时,分页也要位于底部,不会随着内容的多少而移动.这里设置absolute就能解决问题,但当有滚动条出现时分页确会随着移动,这就是要解决的第二个问题.
  2. 当页面内容比较多时,会出现滚动条,当页面滚动时,分页也必须不会随着一起移动.
  3. 窗口变化时也会影响到上面两个方面

JS的解决方案

JS是我最不愿使用的解决方案,因为这种纯样式的bug用JS来解决有点大材小用,而且JS需要DOM载入后才执行,有可能会出现闪屏的现象.

JS的解决方案很简单,通过设置一个top来实现,top是指分页的上边距离document的上边的长度,可以被分解成下面几项(并不是完整的代码)

top = scrollTop + clientHeight - height(分页的高度)

scrollTop和clientHeight分别用来解决上面两个问题,滚动条的滚动会影响到scrollTop,而窗口的变化会影响到clientHeight,所以当这两个事件被触发时必须重置top,于是就形成类似下面的代码,但这段脚本的刷新率会非常高,估计有性能问题.

window.onresize = window.onscroll = function(){
    //reset top
};

CSS Expression的解决方案

上面这段脚本可以直接搬到CSS上来,因为CSS支持expression,可以通过JS代码来实现,不用事件监听,具体就不多说了,但这个也存在性能问题.

top:expreesion(scrollTop + clientHeight - height);

纯CSS的解决方案

这里提供一种纯CSS的解决方案,其实也挺简单的,这里是demo.先贴些代码

<body>
  <div id="container"></div>
  <div id="bottom"></div>
</body>
html, body {
 margin: 0;
 padding: 0;
 height: 100%;
 width: 100%;
 _overflow: hidden;
}

#container {
 _width: 100%;
 _height: 100%;
 _overflow-y: scroll;
}

#bottom {
 background-color: #0ff;
 height: 30px;
 width: 100%;
 position: fixed;
 bottom: 0;
 z-index: 999;

 /* ie6 fixed */
 _position: absolute;
 _bottom:-1px;
 _right: 17px;
}

将要固定的bottom和容器container放在并列的位置,将html,body,container都设为100%,那么可以把container当成body来使,将html和body设成overflow:hidden,而让container滚动,这时当文本溢出时只是container内部滚动,而bottom是放在container的外部,不会受其影响.

问题已经解决了,但是由于bottom是盖在container上面的,所以也会盖住滚动条,设置一个right就能使各浏览器显示相同.

上面几种方案我之前都有用过,所以我建议大家纯样式问题最好不要动用JS,能用CSS解决的还是用CSS.

小谈手机支付

Tags: ,

本人刚进入支付行业没多久,最近在做一些手机方面的东西,想谈一下手机支付,小弟拙见请大家见谅。

————————————————–我是谦虚的分割线—————————————————————–

首先有一个问题,我们为什么需要用手机进行支付,这东西的好处在哪里?

人是偷懒的动物,那么越省时省力的方式,他们越喜欢,手机就提供了这种便捷,一种通讯的便捷,一种移动的便捷。对我来说,最好的服务是有多接口的,那我在任何地方任何场景都可以使用,并且这些接口要让人感觉在使用同一样东西,这就有点难了。像我使用gmail,web版的,mail客户端,G2手机客户端,但这几者的体验是不同的,好在mail的核心功能是邮件并不是体验。像我使用dropbox,mac,xp,ubuntu都装了,可以同步资料,最好手机也有一个。多接口化使人愿意使用你的服务,使不同习惯的人都来尝试使用你的服务,而不是见了就跑(我用ubuntu,支付宝一边去)。

上面虽是调侃,但对于支付行业来说,多接口是非常重要的。当然大家也是这么做的,支付宝有余额支付,网银支付,卡通支付,信用卡支付,邮政网汇e,啦卡拉,还有一些线下的便利商店等。多种渠道可以让生活在不同地区,拥有不同消费习惯的人都来尝试使用我们的服务。手机同样也是一种渠道,也同样只适用于一群人,如果所有渠道都想占满整个市场,那就没必要有这么多渠道了。手机支付一般针对高端的手机用户,如果只用手机来电话短信,更胜者使用早被淘汰的机型,别想让他用没有浏览器的机子给你掏钱。

那这些高端的手机用户想要何种服务呢?按我这智商估计揣摩不出这高端用户的心理,我只能揣摩下自己的心理。只有一个词,就是方便,怎么方便怎么好。手机既然便携了,当然不能白忙活,最好拿个手机一刷就支付了,比如买张报纸,一刷就可以了。支付宝里有个小卖部,是没人看管的,都是自己看着给钱,但他提供了很方便的付款方式,只要发数字到指定号码就可以支付了,这对我来说已经很方便了。

但在方便的同时也存在弊端,第一想到的就是安全问题,如果我手机被偷了怎么办呀,我还记住了密码。手机不像电脑,丢了是家常便饭,以后偷手机的第一件干的事就是看看你有没有支付宝账号。我手机绑定了支付宝,打电话支付宝的时候不用输密码就能自动登录,接着就能给人充钱了,这是多么可怕。所以最近在谈论的微支付也是一个解决办法,让用户了却了后顾之忧,如果给手机设个限额就安心多了。占据了这两边的市场就形成了支付的长尾,微支付也不可小觑。

还有从开发角度来说,现在手机主要是做客户端和wap的,客户端开发成本较高,因为不同机型的开放方式都不同,但是某些机型(如iphone)可以做出很炫的效果。wap方面浏览器的兼容性很差,只能做一些简单的视觉。

从设计角度来说,我觉得手机应用可以脱离设计web的传统理念,当在做一个web站点的信息架构的时候,我们考虑的是用户会先看什么地方,先点什么地方,把想要呈现给用户的东西放在那个地方。而手机只有那么小一块屏,用户一眼就能看完,所以我们需要尽量的减,把不需要的给删掉。而且手机页面不易做的太长,因为有些不是触摸屏的手机可能滚动的速度很慢,用户会不耐烦,宁可给用户多几个入口供选择。

今天就说这么多,睡觉!

twitter推出新功能lists

Tags:

今天用twhirl的时候感觉速度很忙,所以索性上twitter的网站逛逛,果然上天眷顾好心人,顶上告诉我你可以建一个list。

a

粗一看还以为是将我的推分分类,可以把愤青的话和技术的话分分开,免得引起误会,但是我的理解错的,twitter管理的不是推而是人。听某些同学说不是所有的人都有这个功能,看来被我撞到了。

新建

在twitter侧栏会多出list一项,其中会显示list,这里应该不会显示所有的,因为下面有view all,还有不知道是按什么顺序排列的。从这里新建一个list,现在也可以在刚才发图的地方新建。

b

添加

list被创建后就可以添加人了,在用户页面或者搜索结果的页面都会显示一个lists的widget,可以通过这个widget把用户加入到list中,从这种形式来看可以添加到多个list中。list中几乎能加所有的人,除了protected的,这就好比一个精简的public_timeline。

c

查看

任何人都可以查看这个公开链接,https://twitter.com/popomore/work,除非被设为私有。在这个页面可以显示所有的被添加的成员,以及所有的订阅者。

d

订阅

list创建后,任何人都可以订阅这个list,那么所有被添加到list中成员的推都会出现在这里。不过list不会出现在home中,来看第三方需要忙活一阵了。

干什么的?管理人?

那这个list是干什么的呢?看起来很像IM的群组 ,分门别类的把好友管理起来。不过别忘了,list中添加的不只是好友,也不只是following的,可以添加任何人。list就像一个精简的public_timeline,以前public_timeline的内容太过于繁杂,没有正对性,现在list就靠人为的来筛选,构成对某一方面用户有用的信息组。不过这种显示方式并不是那么的方便,我需要去每一个list查看,不知道有没有更好的方法。

list很好玩,让我们来挖掘它的价值吧。

input在strict mode下的bug

Tags: , , ,

今天师傅说起了button盒模型的bug,不管是在ie还是firefox下button的盒模型始终是传统模型,也就是width=content+padding+border,这个bug在ff下可以修复但ie下还是无法修复。但本文说的bug不是这个,在尝试寻找这个bug的过程中发现了另一个问题。

Firefox的bug

用div包着一个input的时候,input离容器的上边框总是会有一段距离,注意这里是firefox(IE存在其他问题,下文会介绍)。查看了下input的margin,border,padding都为0,那这是什么造成的呢。下图中蓝色边框为容器,绿色为容器的背景,红色为input的背景。

1

后来无意中发现使用的Doctype是

1
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;

更换成

1
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;

就没问题了。

第一个Doctype是strict的html4,促发的是Strict Mode,而第二个是transitional的xhtml1.0,促发的是Almost Strict Mode,那么这个问题就找到了。Firefox下Strict Mode会造成这个bug,而Almost Strict Mode则不会。但具体为什么会有这个bug,暂时还没有结果,如果遇到问题换个Doctype就能解决了。

我是测试页面

IE的bug

IE遇到的问题又有所不同,不管是Strict Mode还是Almost Strict Mode下,IE会离上下边框1像素的距离,同样可以点击上面的链接进行测试。

© 2009 不要变笨 | Don’t to be stupid. All Rights Reserved.

This blog is powered by Wordpress and Magatheme by Bryan Helmig.