Skip to content


display:inline-block 额外产生的4px margin

今天在做一个Timeline的模块的时候遇到一个棘手的问题: 给元素添加display:inline-block 属性的时候会产生额外的4px的margin-right。

原始代码

.YP_timelineChart_box li{
display:-moz-inline-stack;
display:inline-block;
zoom:1;
*display:inline;
text-indent:-3000px;
width:5px;
vertical-align:bottom;
background-color:#00FF00;
position:relative;
}

页面渲染结果:

每一列都会向右产生外边距4px,苦思不得其解,尝试负的外边距,但是涉及到其他的问题:每个li标签会重叠1-2个px,妨碍到鼠标hover状态的事件。尝试修改doctype类型也不见效果。后来尝试了另外一个方法:

把原来的HTML 代码结构:

更改为:

这样就不会产生额外的外边距,也弄不清楚为什么会出现这种问题。先暂时记下,以后再研究研究。

Posted in 前端开发.

Zen Coding- 一个书写HTML跟CSS代码的方法

Zen Coding 是一个高速书写HTML XML XSL(或者其他结构化代码格式)的编辑器插件,核心功能是功能强大的“缩写引擎” 可以根据你输入的公式自动生成HTML代码,

例子:

输入zen coding 代码公式 : div#page>div.logo+ul#navigation>li*3>a

在textmate下的执行快捷键是 ⌘+E

执行后为:

点击查看全部内容

Posted in 前端开发.

JS 的nextSibling属性(The built-in Javascript property nextSibling)

今天做项目的时候遇到一个变态的问题,CKEditor 嵌入ROR 的时候出现了 一个回车产生2个br 标签的问题(2个回车产生4个br……),使段落之前的间距变大一倍。
CKeditor本身应该没有问题,为解决此问题,想了一个笨方法: 用JS的nextSibling 属性来查找是否有相邻的2个或者以上的br,有的话直接remove。 (用的是jQuery)。
初始代码:

var brs = $('.format_markdown_text br').size();
var fbr = $('.format_markdown_text br');
for(i=brs-1;i>=0;i--){
if(fbr[i].nextSibling.nodeName == "BR"){
$(fbr[i]).remove();
}
}

发现只取到部分的br,查资料发现,firefox、opera、safari会把诸如空格换行之类的排版元素视作节点读取,所以在这些浏览器下只读取了部分br。

改进的代码:

var brs = $('.format_markdown_text br').size();
var fbr = $('.format_markdown_text br');
for(i=brs-1;i>=0;i--){
if(fbr[i].nextSibling.nodeName == "BR" || ($(fbr[i].nextSibling).val().match(/^[\s\r\n]*$/) && fbr[i].nextSibling.nextSibling && fbr[i].nextSibling.nextSibling.nodeName == 'BR')){
$(fbr[i]).remove();
}
}

这样就圆满解决了 空格(或者多个)、回车等产生的问题。

Posted in 前端开发.

CSS inline-block 属性

如果你有CSS编程经验的话,那么你对 inline-block 这个CSS属性应该不会陌生,inline-block 是 displaly 属性的一个值,但是这个属性IE6还不支持。在IE6下,对制定了float的元素增加margin 或者padding 属性的时候(margin或者padding的方向跟float一样,比如元素同时拥有float:left和margin-left 属性),会使margin或者padding的距离加倍(双边距bug)。当然你可以使用ie hack 来解决这个问题,在ie6下设置有原始值的一半。如果你用inline-block来代替float的话,就能很好的解决这个问题(大多数情况下)

使用inline-block 来代替float 的解决方案或或许是最有效的方法来实现内联块的价值。

inline-block的定义:

一下是来自一些网站关于inline-block的定义

Sitepoint’s

inline-block makes the element generate a block box that’s laid out as if it were an inline box.

QuirksMode:

An inline block is placed inline (ie. on the same line as adjacent content), but it behaves as a block.

Robert Nyman:

Basically, it’s a way to make elements inline, but preserving their block capabilities such as setting width and height, top and bottom margins and paddings etc.

可以理解为:将对象作为内联来显示,但是里面的内容作为块对象来呈现。(周围元素与其保持同一行,但可以设置宽度跟高度的属性)

什么情况下使用:

  • 解决ie6双边距bug
  • 在横向类块元素上没有float属性
  • 使内联元素能设置宽度跟高度,但是同时保持内联显示
  • 使内联元素能设置margin和padding 属性

目前 ie6,ie7 不支持 inline-block。但是可以通过触发haslayout来实现inline-block.

实现方法:

display:-moz-inline-stack;
display:inline-block;
zoom:1;
*display:inline;

更多的关于这个实现方法可以参考这里

Posted in 前端开发.

让IE也支持CSS3

IE目前还不支持CSS3的一些属性,通过这个脚本可以实现部分CSS3属性,

脚本下载地址 http://www.keithclark.co.uk/labs/ie-css3/#supported-libaries

Posted in 前端开发. Tagged with .

Fix PNG image transparence in IE6

transparent PNG image in IE6 is very headache!
Here is a another solution called DD_belatedPNG. you can find it here.

Usage:

<!–[if IE 6]>

<script src=”DD_belatedPNG_0.0.8a-min.js” type=”text/javascript”></script>

<script type=”text/javascript”>

DD_belatedPNG.fix(‘ClassName1,ClassName2′);

</script>

<![endif]–>

Posted in 前端开发.

css 文字换行解决方案

word-wrap:break-word; overflow:hidden;

  这种最好的方式,在 IE 下没有任何问题,在 FF 下,长串英文会被遮住超出的内容。

  技术总结:

  word-wrap是控制换行的。

  使用break-word时,是将强制换行。中文没有任何问题,英文语句也没问题。但是对于长串的英文,就不起作用。

  break-word是控制是否断词的。

  normal是默认情况,英文单词不被拆开。

  break-all,是断开单词。在单词到边界时,下个字母自动到下一行。主要解决了长串英文的问题。

  keep-all,是指Chinese, Japanese, and Korean不断词。即只用此时,不用word-wrap,中文就不会换行了。(英文语句正常。)

  IE下:

  使用word-wrap:break-word;所有的都正常。

  FireFox下:

  如这2个都不用的话,中文不会出任何问题。英文语句也不会出问题。但是,长串英文会出问题。

  为了解决长串英文,一般用word-wrap:break-word;word- break:break-all;。但是,此方式会导致,普通的英文语句中的单词会被断开(IE下也是)。

  用:overflow:auto; IE下,长串会自动折行。FireFox下,长串会被遮盖。

  所以,我们用word-wrap:break- word;overflow:hidden;

Posted in 前端开发. Tagged with .

LiveScience Image Gallery

mood-color-wheel-100208-02

mood-color-wheel-100208-02

Posted in 视觉设计. Tagged with .

css小技巧(笔记一)

div自适应高度

方法1:______________________________
_zoom:1;
overflow:auto;
*overflow:visible;

方法2:______________________________________

Min-height是个很有用的属性,但并非所有浏览器都兼容的,当然主要问题出在IE6,这个不支持标准的浏览器偏偏占据很大的市场份额,实在让设计师无奈。好在IE6对于overflow的特殊实现,又给我们实现Min-height提供了一个思路,所以产生了以下兼容各个主流浏览器的Min -height写法:

min-height:100px;
height:auto !important;
height:100px;
overflow:auto;

通过IE6,IE7,FireFox2.0,Opera9.10,Safari3.03(For Win)检测。

———————————————–

css hack

区别IE6与FF:
background:orange;*background:blue;

区别IE6与IE7:
background:green !important;background:blue;

区别IE7与FF:
background:orange; *background:green;

区别FF,IE7,IE6:
background:orange;*background:green !important;*background:blue;

注:IE都能识别*;标准浏览器(如FF)不能识别*;
IE6能识别*,但不能识别 !important,
IE7能识别*,也能识别!important;
FF不能识别*,但能识别!important;

IE6     IE7      FF
*                  √          √         ×
!important   ×          √         √

——————————————————————————–
另外再补充一个,下划线”_”,
IE6支持下划线,IE7和firefox均不支持下划线。

于是大家还可以这样来区分IE6,IE7,firefox
: background:orange;*background:green;_background:blue;

注:不管是什么方法,书写的顺序都是firefox的写在前面,IE7的写在中间,IE6的写在最后面。

CSS 文字截取 省略号替代

display:block;
width:310px;
white-space:nowrap;
overflow:hidden;
float:left;
-o-text-overflow: ellipsis;    /* for Opera */
text-overflow:ellipsis;        /* for IE */
}
div:after{content:”…”;padding-left:3px;font-size:12px;}  /* for Firefox */

用css来实现自动截取文字,不需要后台程序和JS的使用
好处是:有利于内容完整性,有利于SEO,无需后台程序处理,可以在前台随时调节要截取的长度。
不好的地方:不能自动判断截取长度,当字符很短的时候在Firefox中也会生成后面的省略符号。
另外在设置截取宽度的时候,要注意,尽量让文字截取完整

容器垂直居中

@如果高度不固定的话 直接padding:20px; 就可以了

@如果是高度高度的话  :( vertical-align属性只会对拥有valign特性的(X)HTML标签起作用)

在CSS中有一个display属性能够模拟<table>,所以我们可以使用这个属性来让<div>模拟<table>就可以使用vertical-align了。注意,display:table和display:table-cell的使用方法,前者必须设置在父元素上,后者必须设置在子元素上,因此我们要为需要定位的文本再增加一个<div>元素:

div#wrap {
height:400px;
display:table;
}
div#content {
vertical-align:middle;
display:table-cell;
border:1px solid #FF0099;
background-color:#FFCCFF;
width:760px;
}

不幸的是Internet Explorer 6 并不能正确地理解display:table和display:table-cell,因此这种方法在Internet Explorer 6及以下的版本中是无效的
解决方案:

在Internet Explorer 6及以下版本中,在高度的计算上存在着缺陷的。在Internet Explorer 6中对父元素进行定位后,如果再对子元素进行百分比计算时,计算的基础似乎是有继承性的(如果定位的数值是绝对数值没有这个问题,但是使用百分比计算的基础将不再是该元素的高度,而从父元素继承来的定位高度)。例如,我们有下面这样一个(X)HTML代码段:

<div id=”wrap”>
<div id=”subwrap”>
<div id=”content”>
</div>
</div>
</div>
如果我们对subwrap进行了绝对定位,那么content也会继承了这个这个属性,虽然它不会在页面中马上显示出来,但是如果再对content进行相对定位的时候,你使用的100%分比将不再是content原有的高度。例如,我们设定了subwrap的position为40%,我们如果想使content的上边缘和wrap重合的话就必须设置top:-80%;那么,如果我们设定subwrap的top:50%的话,我们必须使用100%才能使content回到原来的位置上去,但是如果我们把content也设置50%呢?那么它就正好垂直居中了。所以我们可以使用这中方法来实现Internet Explorer 6中的垂直居中

完美的解决方案:
div#wrap {
display:table;
border:1px solid #FF0099;
background-color:#FFCCFF;
width:760px;
height:400px;
_position:relative;
overflow:hidden;
}
div#subwrap {
vertical-align:middle;
display:table-cell;
_position:absolute;
_top:50%;
}
div#content {
_position:relative;
_top:-50%;
}

Posted in 前端开发.

IE 支持PNG图片透明 IE PNG Fix

IE6不支持PNG图片的透明效果,逛一个老外的网站的时候发现一个蛮不错的方法:

先下载文件       文件下载

该方法特点:

  • Automatic activation of transparency for PNGs in the page.
  • Support for <IMG SRC=”"> elements.
  • Support for background PNG images (unlike many other scripts!)
  • Background images can be defined inline or in external stylesheets.
  • Automatically handles changed SRC/background via normal JavaScript (e.g. mouseover rollovers) — no special coding needed.
  • Change support includes CSS ‘className’ changes on elements.
  • Incorporates automatic workaround for <a href=”"> elements within PNG-background elements.
  • Tiny script (for fast downloads).
  • Licensed under a Free Software license.

简单的一个应用:

#logo { background-image:url(images/logo.png); width:194px; height:83px; }

/* Fix up IE6 PNG Support  实现 img标签和ID为logo的 PNG图片的透明*/

img, #logo { behavior: url(scripts/iepngfix.htc); }

一些具体的注意事项,还有一些遇到的基本问题可以点击查看    点击预览页面

Posted in 前端开发.