存档

‘Css code’ 分类的存档

前端工程师常用工具

2010年1月5日

虽然有一段时间不做前端工程师,但还是免不了做前端的思维,碰到了很好的前端实用工具帖还是忍不住转了过来。这个帖子被转了好多次了,也不知道原本的作者是谁,但无论是谁都是万分的感谢,没有您的整理也没有大家的方便。
帖子整理了前端工程师常用的工具手册以及一些著名的相关博客,是工作中不可缺少的资料。

概要:

在线工具集

阅读全文…

Css code, 网页前端优化, 软件工具 , , ,

前端工程师

2009年9月25日

下午要面试一个前端工程师,想了半天不知道出些什么样的题目,除了基础知识的应用,猫嗔觉得还应该考察一下前端对于没有遇到的问题的解决能力。于是上网想搜罗一些复杂而又不常见的题目。(其实面试的时候一下子解决不了问题没关系,因为大家自己做事的时候也知道,不过多n的人,都有可能需要google的时候,关键是看在解决问题中运用的基础知识方向是否正确和处理的方法。)

最终确定的题目就不多说了,但是在搜索中我觉得几个大家广为流传的面试题真的是很不错的,这里整理贴出,算是给去面试的朋友们一个参考。同时也想说,这几个面试题真的也是看基础是不是扎实了。

第一个是迅雷的面试题:
请用css实现下列要求的效果:
1.一个列表包含标题和时间
2.列表宽度固定,高度自由设置
3.时间紧跟标题,但标题过长时需要隐藏。

 
<!--
ul{list-style:none;}
#t1{float:left;overflow:hidden;height:24px; font-size:12px;}
ul li{overflow:hidden;line-height:24px;width:200px;}
.date{padding-left:10px; font-size:12px; color:#ccc;line-height:24px; position:absolute;}
-->
<ul>
	<li>
<div id="t1"><a href="#">世界上头发最长的美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的世界上头发最长的美世界上头发最长的美世界上头发最长的美世界上头发最长的美世界上头发最长的美美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的世界上头发最长的美世界上头发最长的美世界上头发最长的美世界上头发最长的美世界上头发最长的美美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的美女</a></div>
<span class="date">2009-06-16</span></li>
	<li>
<div id="t1"><a href="#">世界上头发最长的美女</a></div>
<span class="date">2009-06-16</span></li>
</ul>
 
<!--
ul, li {margin:0;padding:0;list-style:none;}
ul {float:left; background:#CCC; width:300px;}
li {font-size:12px;line-height:1.5em;padding-left:10px;position:relative;height:20px;overflow:hidden;padding-right:65px;}
li a {position:relative;left:0px;height:20px;float:left;text-decoration:none;}
span {position:absolute;top:0px;right:-65px;}
-->
<ul>
	<li><a href="#">天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场<span>2008-08-27</span> </a></li>
	<li><a href="#">天空一声巨响,超越闪亮全场<span>2008-08-27</span></a></li>
	<li><a href="#">天空一声巨响,闪亮全场空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场<span>2008-08-27</span></a></li>
	<li><a href="#">天空一声巨响,超越闪亮全场<span>2008-08-27</span></a></li>
	<li><a href="#">天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场<span>2008-08-27</span></a></li>
	<li><a href="#">哈哈哈哈哈哈<span>2008-08-27</span></a></li>
	<li><a href="#">哈哈哈哈哈哈哈哈哈<span>2008-08-27</span></a></li>
	<li><a href="#">天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场哈哈哈哈<span>2008-08-27</span></a></li>
	<li><a href="#">哈哈哈哈哈哈哈哈哈哈<span>2008-08-27</span></a></li>
	<li><a href="#">天空一声巨响,超越闪亮全场天空一声巨响,超越闪亮全场哈哈哈哈哈哈哈哈<span>2008-08-27</span></a></li>
</ul>
 
<!--
  *{margin:0;padding:0;}
  #muem ul{background:#FFC;width:310px;}
  #muem ul li{margin:5px;height:30px;line-height:30px;text-align:left;list-style:none;width:300px;overflow:hidden;display:inline-block;}
  #muem ul li a{font-size:12px;float:left;padding-right:60px;}
  #muem ul li span{color:#CCCCCC; font-family:Tahoma, Geneva, sans-serif; font-size:12px;display:inline-block;float:left;margin-left:-50px;}
-->
<div>
<div id="muem">
<ul>
	<li><a>杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练杂技团美女演员的训练</a><span>2008-07-14</span></li>
	<li><a>最昂贵内衣惊艳出炉</a><span>2008-07-14</span></li>
	<li><a>[组图]让人喷饭的日喷饭的日</a><span>2008-07-14</span></li>
	<li><a>世界上头发最长的美女:人惊奇的</a><span>2008-07-14</span></li>
	<li><a>世界八大最喜欢吃人的的虹顺利产</a><span>2008-07-14</span></li>
	<li><a>亿万富翁的超级奢侈</a><span>2008-07-14</span></li>
	<li><a>日本小姐选美</a><span>2008-07-14</span></li>
	<li><a>素面朝天吓坏人,化妆虹顺利产</a><span>2008-07-14</span></li>
</ul>
</div>
</div>

Css code, JavaScript&JQuery, 网页前端优化, 软件工具 ,

一些IE浏览器不支持的很有用CSS属性

2009年7月16日

让我们看看一些可能非常有用但是在IE浏览器中(主要是IE6和IE7)却不能使用的CSS属性。本文发表时尚未测试这些属性在IE8中的表现。我稍后会做一个测试页面,用来测试这些属性在所以IE浏览器中的表现。

其中注意clip属性IE其实是支持,但是写法不一样,这个属性在处理不同尺寸图片的时候是挺有用的。

  1、Outline

  在调试CSS问题的时候,我常常在指定元素上添加border来精确的查看该元素会发生什么并帮助确定问题的来源。这常常是有效的,因为它可以在布局上给我更加具体的可视性。但是如果是块级元素,这可能会发生某些错误——在任何块级元素上添加1px的边框很可能会影响到布局,它会让这个元素的宽度额外增加2px。

  outline属性是完美的替代者,因为它可以在不影响文档流的情况下呈现该对象。但是IE6 和IE7不支持outline属性,所以,它不能在这两个浏览器中用于调试。

  2、Inherit(值)

  在CSS开发中有很多这样的例子:通过在特定元素上设置某些样式来告诉该元素来“继承”它父级元素的所有已添加的属性,这样你就可以避免相当多的键盘输入。

  这可以通过设置inherit来很容易的实现。这可能很有用。比如,当重写background属性的时候,常常会有很多的文字在该属性中(色彩、图片的URL地址、位置等)。所以,与其重新写这些值,你可能仅仅想要考虑中的元素和其父级元素有相同的背景属性,一个inherit值就可以搞定一切——这显然大大的节省了键盘输入。

  不幸的是,inherit值在IE6和IE7不被支持(除了用于direction(文字方向)和visibility属性)。

  某人说,代码就像女人的裙子——越短越好,看来IE会阻碍我们这个愿望的实现。

  3、Empty-Cells

  该属性只用于table或者”display”属性被设置为”table-cell”的元素。如果你动态的为一个table添加内容,就可能会遇到某个单元格的内容为空的情况,然后你又不希望这个空的单元格的边框、背景色、背景图片等隐藏掉。

  使用“empty-cells: hide”就能解决这个问题,它会将可能出现这种情况的单元格完全隐藏掉。

  Internet Explorer不支持empty-cells属性。

  4、Caption-Side

  说到table的属性,这个属性用于声明显示在表格的侧栏的表格标题。它接受top、bottom、left 和right 四个值。Internet Exporer不支持这个属性,table的标题在IE6和IE7中将总是出现在表格的顶部。

  5、Counter-Increment/Counter-Reset

  有序列表(<ol>)非常方便,因为它可以省去你手工添加递增数字的麻烦,而且它允许你不用更改数字就能改变列表的序列。

  CSS 拥有counter-increment和counter-reset属性,它允许你用来自动生成递增数字到几乎所有的HTML元素上,就像有序列表的效果一样。

  这里有个示例:

1
2
h2 {counter-increment: headers;}
h2:before {content: counter(headers) ".";}

  上面的样式将在所有的<h2>标签前面自动添加递增的数字,而且允许你在h2标签上实现和li标签同样的的效果。

  但是IE6,IE7甚至Safari(直到3.x版本)还不支持这些属性。当然,IE6也不支持:before伪元素。

  6、Min-Height

  有时,一个网站的设计或布局结构需要一个有固定高度的内容区域,否则特定的视觉效果就会丢掉。这可能会因为一个渐变背景、一个独特的下拉列表、或者可能是因为PS出来的很酷的发光效果。但是有的时候,页面中的内容会比较多,而页面却不能像预期那样展开。

  这个时候就需要用到min-height属性了,因为它可以告诉浏览器在一个特定的块级元素上渲染最小的高度,不管内容的实际高度是否达到了这个最小高度。然后呢,如果内容超出了最小高度,该元素就会适度的扩展开。

  使用min-height唯一需要注意到的是它在IE6中不被支持。我们都知道IE6在(缓慢的)退出历史舞台,但是有的客户可能仍然要求他们的网站支持这个该死的浏览器。

  不过令人高兴的是,IE6渲染height的值的方法正好和其它浏览器渲染“min-height”的方式一样,所以你只需要一个针对IE6的hack或独立的样式表来为该元素添加特定的height,这个问题就解决了。

  IE6同样无视min-width、max-height和max-width,但是上述方法在这些属性上也是可行的。

  7、:hover

  从技术上来说,:hover只是一个伪类,但是它在IE6中不被支持(IE7和IE8支持)。:hover伪类允许你在元素上添加任何的鼠标经过样式。这非常有用,可以避免(至少在某种程度上)使用JavaScript。

  但是如果你的网站,需要完全支持IE6,特别是在中国这种IE6一手遮天的情况下,那么你就必须考虑取消使用这个伪类,除非相关的标签有个”hred”属性,比如<a>标签。而且如果要实现这种效果,可能必须借助于javascript和额外的样式。

  8、Display

  Display通常被设置为这三个值中的一个:block、inline和none。“得益于”IE,Display的其它值很少被用到。这些值包括inline-block、table、inline-table和table-cell等,这些属性对于解决一些特殊的布局问题时,是很有用的。

  所以,尽管IE确实支持Display的这三个基本属性,但是它基本上不支持其它属性。

  其实,IE8对display的属性支持已经相当完整了。不过,对于inline-block属性,IE6/7只支持本身为inline的元素。

  9、Clip

  这是一个在特殊情况下能派上用场的很有趣的CSS属性。它可能和不可预知的、动态生成的内容结合起来。简单来说,这个属性允许你在一个特定的元素上指定隐藏区域——也可以理解为,在一个绝对定位的元素中,按照一定的设置来裁剪该元素的显示区域,超出该区域的内容会被隐藏掉。语法看起来像这样的:

1
2
3
4
5
6
7
div.clipped {
 padding: 20px;
 width: 400px;
 height: 400px;
 clip: rect(20px, 300px, 200px, 100px);
 position: absolute;
 }

  
修剪只能用于一个绝对定位的元素,而且只用使用矩形区域。括号内的数字划出的区域(200px*180px大小)为可见区域,该区域以外的内容不可见或者被剪切掉。

  技术上来讲,clip属性被IE支持,但是只支持无逗号的语法,比如

1
2
3
4
5
6
7
div.clipped {
 padding: 20px;
 width: 400px;
 height: 400px;
 clip: rect(20px 300px 200px 100px);
 position: absolute;
 }

 
  上面的样式(rect后面括号里的属性没有用逗号隔开)在大多数浏览器下都可运行,但是可能不会通过CSS验证,因为语句没有用逗号隔开。

  10、:focus

  这是另外一个伪类需要在这里被提及的,因为所有的非IE浏览器,都支持这个属性。:focus伪类允许你声明一个特别的样式,当一个页面元素成为键盘(鼠标)焦点的时候,将该样式动态的应用到该元素上。这在表单元素上非常有用,因为你可以在一个输入框被选中的时候给它添加一个边框。

  下面的样式将在输入框成为键盘焦点的时候添加一个红色的边框:

1
2
3
input:focus {
 border: 1px solid #f00;
 }

Css code

IE 7下页面白屏的解决方法

2009年6月18日

今天在做网页的时候发现一个问题:一个网页在ie 7下是白屏。我查看了源码,发现内容完好,并且ie6、其他的浏览器、以及非原生态的ie7(ieTester下)都没问题。

一开始我怀疑是页面结构问题等。在修改了css、js等后发现仍没有起色,疑惑间我想到是不是出了编码问题。毕竟编码问题经常会导致页面的解析错误。

最终发现:

如果你的编码信息在title之后就可能导致上述问题的发生:
<title>Long Step</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />

解决方式很简单,只要交换一下顺序
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
<title>Long Step</title>

分析原因:
那么为什么只有ie7会出现这样的问题呢?这是由于ie7解析网页编码时以html内的标签优先,而后才是http header内的讯息,而mozilla系列的浏览器则刚刚相反。
由于utf-8编码的页面为3个字节表示一个汉字,而普通的gb2313或big5是两个。页面输出时,由于上述原因,使浏览器解析、输出<title></title>的内容时,如果在</title>前有奇数个全角字符时,ie7把utf-8当作两个字节解析时出现半个汉字的情况,这时该半个汉字会和</title>的”<”结合成一个乱码字,导致ie7无法读完<title>部分,使整个页面为空百输出。而这个时候如果察看源文件的话,会发现实际上整个叶面全部已经输出了。
因此最简单的解决办法是在网页文件的<head></head>标签中一定要把字符定义<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />放在<title></title>之前。
实际上,其他编码版本的也存在类似的问题,只是我们大家的浏览器默认编码都是 GBK 所以更不容易被察觉罢了。

其实说到底,注意标签的顺序也是我们需要注意的好习惯。

Css code

如何让ie和firefox 2.0-支持inline-block

2009年4月28日

我们经常会碰到需要让块元素自动紧跟的布局方式,从功能上讲inline-block是最适合不过的display属性。但是很遗憾的是各个浏览器对这个属性的支持都不是很完善。所以我们常用float方式来替代,但是在有些时候我们却不得不用这个属性,如何的保证各个浏览器能有相同的表现形式就是本文要讨论的内容。

如何让ie和firefox 2.0-支持inline-block

display:inline-block的作用是将对象呈递为内联对象,但是对象本身的的内容作为块对象呈递。同时其旁边的内联对象会被呈递在同一行内,并且允许空格。

这个属性目前支持的浏览器有:Opera、Safari以及firefox 3.0+。

那么问题就来了,IE和Firefox 2.0不支持这个属性。

解决Firefox 2.0的不兼容:
Firefox 下有私有属性 -moz-inline-box 和inline-block 形似,为什么是”形似”而不是”神似”呢?这是因为使用 -moz-inline-box 会带来很多意想不到的后遗症,比如使用这一属性后,text-align 有时候就会有问题,还得改用 Firefox 的私有属性 -moz-box-align 来解决。

建议:最好不要使用 Firefox 私有属性 -moz-inline-box。

许多朋友会对IE不支持display:inline-block属性表示质疑,因为通常时候在IE中对a或者span 等内联元素使用 display:inline-block是有效的。

其实不然,在IE中对内联元素使用display:inline-block,IE是不识别的,但使用 display:inline-block 在 IE 下会触发 layout(如果你对 layout 感觉到陌生,可以参看 蓝色理想中《On having layout》一文),从而使内联元素拥有了display:inline-block 属性的表像。

从上面的这个分析,也不难理解为什么 IE 下,对块元素设置 display:inline-block 属性无法实现 inline-block 的效果。这时块元素仅仅是被 display:inline-block 触发了 layout,而它本就是行布局,所以触发后,块元素依然还是行布局,而不会如 Opera 中块元素呈递为内联对象。

那问题就来了,如何真正的实现IE下块元素的display:inline-block效果

下面提供两种方法:

  • 1、先使用 display:inline-block 属性触发块元素,然后再定义 display:inline,让块元素呈递为内联对象(两个display 要先后放在两个 CSS 声明中才有效果,这是 IE 的一个经典 bug ,如果先定义了 display:inline-block,然后再将 display 设回 inline 或 block,layout 不会消失)。代码如下:
    1
    2
    
    div {display:inline-block;}
    div {display:inline;}
  • 2、直接让块元素设置为内联对象呈递(设置属性 display:inline),然后触发块元素的 layout(如:zoom:1 等)。代码如下:
    1
    
    div {display:inline; zoom:1;}

Css code