IE6动态改变DIV尺寸后,内层绝对定位的问题 [ 12月 26th, 2008 ] Posted in » CSS

先看IE6的问题页面

这是一个自适应的圆角DIV。底部的两个圆角是由两个绝对定位的DIV分别设置{left:0;bottom:0;}和{right:0;bottom:0}做成的。所以不管DIV内的文字如何增减,它们始终定位在底部。

但是当内容通过程序动态增加时,但IE6无法响应到外层尺寸出现的变化,原先的绝对定位还是停留在原处。导致DIV被撑破。

解决后的页面 

解决方法:在底部绝对定位的DIV外面套一个position:relative。

代码如下
Read More …

瞬间必杀50技–型男讲座

image001
Read More …

12月 26th, 2008 | Leave a Comment

可愛い小さい動物

dsc02402

先日、野生動物園で撮ったものだ。好き

12月 12th, 2008 | Leave a Comment

左侧固定宽度,右侧自适应宽度的CSS布局

一边固定宽度,另一边根据浏览器窗口大小自动缩放宽度是这种很常用的布局。特别是在BS项目的界面设计中,几乎都会用到。BI上有高手专门讨论了这种布局方法,但他用了较多的hack,还回避了IE6的dtd。我在实际使用中,发现回避掉IE6的dtd定义后,会导致ajax模态框无法居中(VS的一个控件,自动生成的代码,很难修改)。 于是自己写了个简单的左右两列的布局,没用到什么hack,很简单,只是练手用用。

css代码:left和right都贴住左侧。设置left在right上面(z-index);在right内加个放内容的层(content);设置content距离right的左侧为200px,即刚巧等于left的宽度。

  1. * {margin:0; padding:0; list-style:none; }
  2. .wrapper {width: 100%}
  3. .left {width:200px;background:#fcc; position:absolute; left:0 ;z-index:1  }
  4. .right {width:100%;background:#ccc; position:absolute;left:0}
  5.     .content {margin-left:200px;background:#ffc;   }



完整代码

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title></title>
  6. <style type="text/css">
  7. * {margin:0; padding:0; list-style:none; }
  8. .wrapper {width: 100%;  }
  9. .left {width:200px; background:#fcc; position:absolute; left:0 ;z-index:1  }
  10. .right {width:100%; background:#ccc; position:absolute; left:0}
  11.     .content {margin-left:200px; background:#ffc;   }
  12.  
  13. </style>
  14. </head>
  15. <body>
  16. <div class="wrapper">
  17.     <div class="left">左侧固定宽度200px</div>
  18.     <div class="right">
  19.         <div class="content">
  20.             右侧宽度自动适应
  21.         </div>
  22.     </div>
  23. </div>
  24. </body>
  25. </html>
08月 20th, 2008 | Leave a Comment

BS项目中的CSS架构

先说下这套架构的优点:

1.可以方便的把繁重的CSS编写工作分配出去,而不会相互造成影响。

2.结构清晰,利于维护和修改。

3.每一张网页都仅加载自己需要的CSS。

总结下来就是:提高开发效率,提高维护效率,提高网页加载效率。

下面我解释一下上面这张CSS结构图:

图中间的5个黑色的图示表示网页,其中上面单独的一张是母版页,下面四张是子页。使用VS的人都知道母版页的作用,相当于asp中的include,把共通的部分作成母版,单独的部分作成子页,提高开发效率。

图上方绿色框内的是全局CSS部分,它们存放在styles文件夹中,由母版调用并作用到所有子页。

图上方蓝色虚线框是单一CSS部分,其中每一张子页都有对应的文件夹用来存放自己独有的CSS文件。它们存放在styles/x文件夹中。 由各自对应的C#文件控制:打开不同的子页时,母版加载当前页的CSS。

图左下角的红色框是主题部分,用来存放全局的样式和图片。作用和绿色框一样,只不过它是由子页加载的,并不是母版统一加载的。 这部分和绿色框合并也无大碍。

接下来我介绍一下那么多CSS文件都有什么用?

—Adm/styles
——Basic.css 全局基础样式
——Layout.css 全局布局样式 (尺寸,定位等)
——General.css 全局美观样式 (颜色,图片等)
—Adm/styles/GroupManager 文件夹(例子)
——Group_Layout.css  group页特有的布局样式
——Group_General.css group页特有的美观样式

调用这么多CSS会带来较多的服务器请求,下面附上解决办法。

08月 7th, 2008 | 1 Comment

不同页面传值的改进版

不同页面传值的老版本
改进点:支持同页面有多个文本框,可自动向不同的文本框传值。先看演示吧

其实原理也很简单。同样先通过getAttribute判断type属性,捕捉到按钮。然后在按钮onclick时把i通过url传入子页面。

  1. <h2>input1</h2>
  2. <input type="text" /><input type="submit" />
  3. <h2>input2</h2>
  4. <input type="text" /><input type="submit" />
  5.  
  6. <script type="text/javascript"><!--
  7. var aInput = document.getElementsByTagName("input");
  8. for (i = 0 ; i < aInput.length ; i++ )
  9. {
  10.         (
  11.             function (i){
  12.                 if (aInput[i].getAttribute("type") == "submit")
  13.                 {
  14.                         aInput[i].onclick = function (){
  15.                         window.open('b.html?'+i,'newwindow','height=100,width=400')
  16.                     }
  17.                 }
  18.             }
  19.         )(i)
  20. }
  21. // --></script>



子页面用slice方法对url进行切分。并使用window.opener方法捕捉到父页面的文本框,进行赋值。 一切就OK了

  1. <h2>openWindow</h2>
  2. <input type="text" /><input type="submit" />
  3.  
  4. <script type="text/javascript"><!--
  5. var aInput = document.getElementsByTagName("input");
  6.  
  7. for (i = 0 ; i < aInput.length ; i++ )
  8. {
  9.     if (aInput[i].getAttribute("type") == "text") var textboxB = new Object(aInput[i]);
  10.     if (aInput[i].getAttribute("type") == "submit") var btnB = new Object(aInput[i]);
  11. }
  12.  
  13. btnB.onclick = function(){
  14.     var sTextValue = textboxB.value
  15.     var aInput = window.opener.document.getElementsByTagName("input");
  16.     var sUrl = document.location;
  17.     var sNo = sUrl.toString().slice(-1)
  18.     window.opener.aInput[sNo-"1"].value = sTextValue
  19.     window.close();
  20. }
  21. // --></script>

还没明白的朋友看一下原理图就知道了

08月 7th, 2008 | Leave a Comment

Firefox网页截屏扩展

官方下载地址: http://screenshot-program.com/downloads.php

扩展名:Fireshot

支持Firefox3,同时也有IE版本。

专业版提供即时编辑功能,30天试用期。简装版没有编辑功能,但平时截个图也足够用了。

安装后会在状态栏上显示操作按钮。 左二的“半张纸”表示截取当前可视部分的网页,点一下后变成一整张纸,就可以截取完整的一张网页。

07月 30th, 2008 | Leave a Comment

window.onload的页面加载

大家仔细看下面两段代码,代码一的window.onload = doIt()函数后面有();而代码二的window.onload = doIt函数名后面没有括号。

把两段代码分别测试后发现不带括号的window.onload在页面加载后显示了正确的效果。 我想window.onload也相当于一个触发事件,如果函数加了括号那就直接先执行函数,再加载body。而不加括号,则相当于将一个函数当作变量赋值到window.onload上,并不立即加载。

代码一:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4.     <script>
  5.         window.onload = doIt();
  6.         function doIt() {
  7.                 var oDiv = document.getElementById("div1");
  8.             alert (oDiv);
  9.         }
  10.     </script>
  11. </head>
  12. <body>
  13.     <div id="div1"></div>
  14. </body>
  15. </html>



代码二:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4.     <script>
  5.         window.onload = doIt;
  6.         function doIt() {
  7.                 var oDiv = document.getElementById("div1");
  8.             alert (oDiv);
  9.         }
  10.     </script>
  11. </head>
  12. <body>
  13.     <div id="div1"></div>
  14. </body>
  15. </html>
07月 25th, 2008 | Leave a Comment

javascript显示隐藏层

这是一个Q&A的页面,设计师希望能够点击相关的问题后,在它下方显示对应的答案。这是一个比较常见功能,通常的解决办法是把“答案”当作整个问题容器的子元素,然后点击父元素上的按钮后展开对应的子元素。通过父子元素的对应关系来匹配标题和答案。

但是当初写html的时候并没有考虑到脚本编写(需求是后加的),所以,答案和标题没有父子关系可以对应。 html代码如下。

所以,这里需要用到另一种方法来匹配答案和标题。我们可以通过捕捉元素的位置来匹配它们。也就是说第一条标题,对应的肯定是整个序列中的第一条答案,第二条标题对应的肯定是第二条答案。 这样就可以无视html结构来控制它们的对应关系了。

  1. <ul class="qusetionList">
  2.     <li class="liHeader"><span class="colABC-A">編號</span><span class="colABC-B">標題</span><span  class="colABC-C">編輯者/發問者</span></li>
  3.  
  4.     <li class="liBody"><span class="colABC-A">1</span><span class="colABC-B">想要開小店需要付費嗎?</span><span  class="colABC-C"><a href="#" title="" class="openLink"></a> 客服</span></li>
  5.     <li class="answer"><span class="colABC-B">
  6.     現階段於策視其所以不收取任何費用,請使用者不用擔心。<BR>
  7.     除了加值服務的功能模組之外。</span><span  class="colABC-C"><a href="#" title="" class="closeLink"></a> 客服</span></li>
  8.  
  9.     <li class="liBody"><span class="colABC-A">2</span><span class="colABC-B">想要開小店需要付費嗎?</span><span  class="colABC-C"><a href="#" title="" class="openLink"></a> 客服</span></li>
  10.     <li class="answer"><span class="colABC-B">
  11.     現階段於策視其所以不收取任何費用,請使用者不用擔心。<BR>
  12.     除了加值服務的功能模組之外。</span><span  class="colABC-C"><a href="#" title="" class="closeLink"></a> 客服</span></li>
  13. </ul>



脚本解释:当点击openLink这个图标时,显示和openLink在序列中位置相同的answer。这里需要将onclick事件放在闭包里面,等到for循环结束后才被激活。如果没有这层闭包,那不管点击哪个openLink,显示的都将是openLink.length的值。

  1. document.getElementsByClassName = function(eleClassName)
  2. {
  3. var getEleClass = [];//定义一个数组
  4. var myclass = new RegExp("\\b"+eleClassName+"\\b");//创建一个正则表达式对像
  5. var elem = this.getElementsByTagName("*");//获取文档里所有的元素
  6. for(var h=0;h<elem.length;h++)
  7. {
  8. var classes = elem[h].className;//获取class对像
  9. if (myclass.test(classes)) getEleClass.push(elem[h]);//正则比较,取到想要的CLASS对像
  10. }
  11. return getEleClass;//返回数组
  12. }
  13. //上面这是捕捉class的方法,我一直用它,复制过来就OK。
  14.  
  15. var answer = document.getElementsByClassName("answer");
  16. var openLink = document.getElementsByClassName("openLink");
  17. var closeLink = document.getElementsByClassName("closeLink");
  18.  
  19. for (i = 0; i< openLink.length ; i++ )
  20. {
  21.         (
  22.         function(i){
  23.                 openLink[i].onclick = function (){
  24.                         var j = i;
  25.                         answer[j].style.display = "block"
  26.                 }
  27.                 closeLink[i].onclick = function (){
  28.                         var j = i;
  29.                         answer[j].style.display = "none"
  30.                 }
  31.         }
  32.         )(i);
  33. }

演示地址

07月 23rd, 2008 | Leave a Comment

针对Firefox区分所有IE的hack

*:lang(ja) .a {color:red !important;} //just for firefox

Firefox hack

*是通配符, 冒号后面跟的是lang伪类,IE(包括IE7)都不支持这个伪类。 注意要在html后面定义好语言,我这里定义的是ja(日文),中文的话是zh。

07月 14th, 2008 | 2 Comments

Powered by WordPress | Blue Weed by Blog Oh! Blog | Entries (RSS) and Comments (RSS).