Posts Tagged ‘css’

Stupid IE6

Tuesday, May 25th, 2010

我负责的一个网站的访问者中, IE6 用户仍占 6.2%,这个比例不尴不尬。改版初期对他们照顾不够,今天下狠心花了时间去测试 IE6 下的兼容性。几小时之后,IE6 下都能完全正常显示了,我也多了一些心得。

  1. 如果要加层,先设置该层 text-align:left,否则 IE6 下与层有点关系的元素,不管它是在层内还是层外,位置会摆置得莫名其妙。特别是当看到层外元素整体摆错位置,我更莫名其妙,实在搞不懂 IE6 对层的理解是什么。如果一开始就对层进行初始化({ text-align:left; position:relative; })就会节省很多时间。
  2. 避免使用高级的 css 语法,比如多 class 的连贯,.class-a.class-b { color:red; }。本希望该样式只应用于同时具有 class-a 和 class-b 元素,结果 IE6 不理解。如果 IE6 对不理解的 selector 作忽略处理倒还好,可是 IE6 把该样式应用到了所有 class-b 元素(只具有 class-a、不具有 class-b 的元素未受影响),IE6 是不是显得不懂装懂?祸害很大,害我多花了一小时在找被错误影响了的 class-b 元素的原因。如果实在想要多 class 的连贯的 selector,那比较可行的办法是用 jquery 来保证跨浏览器的兼容性,即 $jquery(’.class-a.class-b’) 。

题外话:很久前我写过一篇Cross-browser CSS。今天多了两点心得,本想直接写入以前的文章。转念一想不对,今天的心得是今天的,以前的心得是以前的,以后万一我来翻看自己的文章,我也想从中看出我的成长历程,混在一起就看不出历程了。但从心得角度讲,最好把所有 cross-browser css 的内容写在一起,否则,若干年后我再看Cross-browser CSS那一页时不一定想起今天补充的两点。似乎没什么好办法(即使用 related posts 也比较勉强)。

Use zoom:1 as a generic IE css fix

Friday, May 21st, 2010

我用“拉门”的方法做了个两端圆弧背景,宽度不固定的按钮,简言之就是用两个嵌套的 span,应用了以下 css


span { background:url(round-corner.gif) 0 50% no-repeat; padding:0 0 0 12px; }
span span { background-position:100% 50%; padding:0 12px 0 0; }

但是在 IE6 下,按钮左边界是圆弧,右边界仍是直角。如果我在 span 上增加 width:100%,左右倒都是圆弧,但由于 IE6 对 width 的定义不同于其他浏览器,按钮的宽度被改变了。

在没有 width 可用的情况下,怎么办?用


span {zoom:1; }

延伸阅读的话,在 IE6 下某些元素没有 layout,用 {zoom:1; } 可以让这些没有 layout 的元素表现得象有 layout (我这么表述可能不准确),从而改善低版本 IE 对 css 标准的理解。{zoom:1; } 是 IE fix 的一个捷径,目前没有发现对其他浏览器带来副作用。

No way to control inline elements’ height

Thursday, March 25th, 2010

今天在 css 里遇上一个以前不曾注意的细节:
假设<a>和<img>的 border, margin 和 padding均为0,一个被<a> wrapped 的 <img> (<a><img/></a>) 比单独一个 <img/> 在 Firefox 中 render 要高 3px,在 chrome 和 ie 下也会高一些(但我未测量数值)。

实例代码


<style type="text/css">
a { text-decoration:none; }
a, img { border:0; padding:0; margin:0; }
.col-1 { float:left; text-align:right; width:49%; }
.col-2 { float:right; text-align:left; width:49%; }
.line { height:1px; border-top:1px solid orange; }
</style>

<div class='col-set'>
<div class='col-1'>
<a href="#">
<img src="not-lineup.jpg"/>
</a>
<div class='line'>&nbsp;</div>
</div>
<div class='col-2'>
<img src="not-lineup.jpg"/>
<div class='line'>&nbsp;</div>
</div>
</div>
Inline elements 不等高实例截图

Inline elements 不等高实例截图

我想了很久才知道这都是因为<a>和<img>是inline elements。Inline elements 有一些特性

  • they flow with text.
  • they have line-height.
  • the element height and width is dependent on the content and will not collapse to the borders of the parent element.

Inline elements 没有 height,在上例中也无法用 line-height 去控制高度:<a>的底部与<img>的底部有 3px 间距,我试遍我能想到的所有 css 属性都无法消除这个间距,除非——

将<a>设为display:block!Block elements 的 border, margin 和 padding 都是有效的,控制高度就不是问题了。

Style Magento checkout form fields without touching the core code

Thursday, February 4th, 2010

Although I can change css complete restyle the checkout forms, this is not what I want to discuss today. What I want to achieve are:

  1. fix City required asterisk not showing bug
  2. change Address lines from full width to half width as City

The City required asterisk is hidden by a javascript wrongly. I found City and State/County/Province are put into one li, i.e. <li><div></div></li>. It might be something should happen on State/County/Province but happens on City. If I close li after City, and reopen it before State/County/Province, bug is fixed. By the way, I hide State/County/Province.

To show a field in full length, Magento uses
<li><label><span></span></label><input/></li>
To show a field in half length, Magento uses
<li><div><label><span></span></label><input/></div></li>

So just find the right place to insert <div> and close it for Address lines, I easily style them to the same length of City.

Make best use of Godaddy Free Products

Saturday, December 5th, 2009

我不算一个好顾客——很挑剔,但可以算是 Google, Godaddy 和 Tesco 的忠实顾客,因为他们的产品或服务几乎无可挑剔——又扯远了。

我要讲的是如何把 Godaddy 购买域名后的免费赠品用足用好。Godaddy Free Products 有 Free Hosting, Free Blogcast 和 Free Photo Album。虽然我另租 1&1 的服务器,但 Godaddy 这么客气,我想不要浪费了人家的热忱。再说,在  Godaddy Free Products 上搞搞实验,物理上跟生产服务器隔绝,用得也心安。

只是 Godaddy Free Products 既然是免费的,同时广告也来了。拿它来建商业站点肯定是不合适的,就是自己人搞实验对着广告也烦。有没有办法去掉?我稍作搜索就有答案:可爱的 css 发挥一下

#conash3D0 {display:none; }

因为答案来得太容易,没有我发挥的空间总不心甘。于是我又想,我每装一个软件都要去改 css,太烦;有些 一键安装的产品(比如 Free Blogcast 和 Free Photo Album)也不允许我改 css,怎么办?答案是 user css。以 Mozilla Firefox 3.5.5 for Fedora 11 为例,具体做法是:

打开 /home/{myusername}/.mozilla/profile.ini,看里面说的 profile path 是什么,通常是跟 profile.ini 同级的一个目录,名字是 {randomchars}.default。

在 /home/{myusername}/.mozilla/{randomchars}.default/chrome 目录下新建一个 userContent.css,内容是:

#conash3D0 {display:none !important; }

使用 !important 只是保证这条规则的优先权,对付目前 Godaddy 的广告条,不用也可以。因为不在服务器端动手脚,恐怕 Godaddy 到死也不会意识到它的广告被屏蔽了。万一它改进 javascript 来探测广告条的 display 状况,那 user 再换一条规则:

#conash3D0 {position:absolute !important; left:-10000px !important}

也是一样效果(你的显示器不会大于 10,000 pixels 吧)。不过 Godaddy 不会有时间整天琢磨这些玩意,所以有两条规则备用足以。

以此类推,对付 Godaddy Blogcast 广告,可以使用:

iframe.adFrame, div.adBanner { display:none !important; }

对付 Godaddy Photo Album 广告,可以使用:

div#wrapper div iframe { display:none !important; }

至于其他浏览器怎么建 user css,我摘抄一段前人讲的

Internet Explorer for Windows

1. Create a .css file in a convenient location using Notepad.
2. Tools menu, Internet Options, General tab, Accessibility button.

Opera

1. Create a .css file in a convenient location using Notepad.
2. File menu, Preferences, Page Style.

Cross-browser CSS

Monday, September 21st, 2009

Today I did something CSS cross-browser testing. Here are some of my findings today.

  • Validate Xhtml / Html before styling. I put form element between table and tr element which make it an invalid xhtml document and cause CSS rendering in a strange way in IE. (IE is generally bad in W3C standards but this time it is good – it reminds me to validate xhtml.)
  • -webkit-border-fit:lines

    is for Sarifi and Chrome only, making elements “shrink”, even block elements.
    > selector can’t be understand by IE6 and under.

  • Few people are using IE5.5 or under, so I decide not to bother about layout in IE5.5 or under.
  • Block elements have overflow by default to show in IE6, So if I want to set the height of a block element, I need also set
    overflow:hidden
  • Cleaning elements with
    clear:both

    to clear floating elements above better be placed inside the same parent element of floating elements, otherwise in IE6, the elements after cleaning elements will not align nicely. for example:

    
    <div class="parent-element">
        <div class="floating-element">...</div>
        <div class="floating-element">...</div>
        <div class="cleaning-element">&nbsp;</div>
    </div>

How to center the table

Wednesday, December 10th, 2008

在网页里,如何让整个表格居中?

我一开始想到的是把<table>嵌套在<div style=”text-align:center”>里,结果发现这样的代码在浏览器里查看表格确实是居中的,但是,同样的代码写成的html邮件表现的就是左对齐(似乎div style=”text-align:center”不起作用)。

为了保证html格式的邮件里的table能居中,我搜寻到了两种方式:

  • 直接用table的align属性:<table align=”center”> (但这不符合W3C XHTML 1.0 Strict规范)
  • 使用css margin:auto:<table style=”margin-left:auto; margin-right:auto”>

流式布局

Thursday, December 6th, 2007

自从读了Jakob Nielsen的«Homepage Usability»一书以后,我特别fancy fluid layout,这成了我做任何网站一定要达到的目标之一。经过一段时间的研究,我对fluid layout也算小有所成,最有心得的部分就是不借助table,不依赖javascript,在有不定宽度的图片情况下,做图文混排的fluid layout。

我也很在于其他层面的usability,因此每遇到user friendly的东西,我总要赞叹一番。新版本的wordpress,堪称website usability的典范,但它的default theme竟然没有采用fluid layout,不禁让我唏嘘。于是我准备发挥一下我的专长,同时也为open source贡献一份绵薄之力,就改掉它的fixed layout。

我花了点时间看了一下style.css,大致知道要怎么去改进它啦。现在大家看到的页面只是我搞了测试以后的中间产品,四个角都没对齐,莫怪。剩下的事情就是要裁减背景图片,做个拉门,然后就差不多了。但我有个毛病:难题在一团乱麻的状态我的战斗力很强,有了头绪以后反而懒得去落实了。 这个差不多了的style.css何时能变成最终成品,我也不知道。

要不,你来donate我一下?