Loading...

Posts Tagged ‘ css ’

登陆框在站点中的应用应该算最多的了, 设计中有很多种方案, 近日应用到一种输入框前面没有 label 的.
如果单纯去掉 label 将没有任何说明, 用户很可能不知道两个文本框是干嘛用的, 所以还要有提示, 怎么提示呢?
最先想到的一种方法是设置 input 的默认 value 属性, 然后在输入框获得焦点后清空 value, 失去焦点且 value 为空时恢复默认 value, 这种设计很容易实现, 但有几个弊病:

  1. 需要判断用户输入值是否与默认值相同, 不相同则失去焦点后不能清除 value;
  2. 这样带来另一个问题, 如果用户名,尤其是密码刚好与默认值相同怎么办?
  3. 还有个问题就是密码输入框的type属性, 如果用文字提示, 显示文字的时候密码输入框的 type 就不能是 password, 否则提示文字也会变成掩码, 那么就带来了额外的工作, 就是要转换输入框的type属性, 在我测试中貌似有兼容问题, 有的浏览器不能修改这个属性.

于是想到另外一个解决方案 ------ 背景图, 就是把提示文本做成背景, 通过控制输入框的样式来实现提示的显示与隐藏:

PLAIN TEXT >> HTML:
  1. <script type="text/javascript">
  2. function setbg(obj, cname){
  3.   if(obj.value != ''){
  4.       obj.className = '';
  5.   }else{
  6.       obj.className = cname;
  7.   }
  8. }
  9. </script>
  10. <style type="text/css">
  11. input {
  12.   font: 12px "Courier New", Courier, monospace;
  13.   border: 1px solid #666666;
  14.   padding: 3px;
  15.   height: 23px;
  16. }
  17. .un_bg {
  18.   background: url(input_background.png) no-repeat 0px 0px;
  19. }
  20. .pw_bg {
  21.   background: url(input_background.png) no-repeat 0px -30px;
  22. }
  23. </style>
  24.     <p>
  25.         <input type="text" class="un_bg" onfocus="setbg(this, '');" onblur="setbg(this, 'un_bg');" />
  26.     </p>
  27.     <p>
  28.         <input type="password" class="pw_bg" onfocus="setbg(this, '');" onblur="setbg(this, 'pw_bg');" />
  29.     </p>
  30. </form>

看看演示效果 :D

扩展一下, 获得更好的效果 ;)

PLAIN TEXT >> HTML:
  1. <script type="text/javascript">
  2. function setbg(obj, cname, isfocus){
  3.     if(obj.value != ''){
  4.         obj.className = isfocus?'fc_bg':'';
  5.     }else{
  6.         obj.className = cname;
  7.     }
  8. }
  9. </script>
  10. <style type="text/css">
  11. input {
  12.     font: 12px "Courier New", Courier, monospace;
  13.     border: 1px solid #666666;
  14.     padding: 3px;
  15.     height: 23px;
  16. }
  17. .un_bg {
  18.     background: url(input_background.png) no-repeat 0px 0px;
  19. }
  20. .pw_bg {
  21.     background: url(input_background.png) no-repeat 0px -30px;
  22. }
  23. .fc_bg {
  24.     background: url(input_background.png) repeat-x 0px -60px;
  25. }
  26. </style>
  27.     <p>
  28.         <input type="text" class="un_bg" onfocus="setbg(this, 'fc_bg', 1);" onblur="setbg(this, 'un_bg', 0);" />
  29.     </p>
  30.     <p>
  31.         <input type="password" class="pw_bg" onfocus="setbg(this, 'fc_bg', 1);" onblur="setbg(this, 'pw_bg', 0);" />
  32.     </p>
  33. </form>

看看演示效果 :D

PLAIN TEXT >> HTML:
  1. <style type="text/css">
  2. <!--
  3. td {
  4.     border-bottom: 1px solid #000000;
  5.     border-left: 1px solid #000000;
  6. }
  7. table {
  8.     border-collapse: collapse;
  9.     border-top: 1px solid #000000;
  10.     border-right: 1px solid #000000;
  11. }
  12. -->
  13. </style>
  14. <table width="100">
  15.     <tr>
  16.         <td>&nbsp;</td>
  17.         <td>&nbsp;</td>
  18.         <td>&nbsp;</td>
  19.     </tr>
  20.     <tr>
  21.         <td>&nbsp;</td>
  22.         <td>&nbsp;</td>
  23.         <td>&nbsp;</td>
  24.     </tr>
  25.     <tr>
  26.         <td>&nbsp;</td>
  27.         <td>&nbsp;</td>
  28.         <td>&nbsp;</td>
  29.     </tr>
  30.     <tr>
  31.         <td>&nbsp;</td>
  32.         <td>&nbsp;</td>
  33.         <td>&nbsp;</td>
  34.     </tr>
  35. </table>

通常的我们在读取文章标题的时候,遇到字符过多,都是通过程序在SERVER端截取一定的字符数,然后添加...来实现标题长度截取的。其实我们也可以通过CSS来控制。

PLAIN TEXT >> CSS:
  1. .title {
  2.     width:200px;
  3.     /* 禁止自动换行 */
  4.     white-space:nowrap;
  5.     /* 隐藏超出部分 */
  6.     overflow:hidden;
  7.     /* 用省略号代替结尾, 只对 IE 有效 */
  8.     text-overflow:ellipsis;
  9. }

测试了一下, 可以用的标签有 p, div, li 等.

IE 不支持 max-height 样式的问题一直困扰着我, 尤其困扰着我 blog 中的 code 标签, 这使一些长代码看上去十分恐怖, 但一般还都能忍受. 但是, 当我转了上篇日志《金山词霸 每日一句(完整版)》后, 该发生的还是发生了, 我脆弱的神经彻底崩溃了!!

痛定思痛, 我决定寻求拯救 blog 的新出路!! 我上网搜, 虽然找到一些解决方案, 但都不大实用, 有的只针对 IE6, 有的很麻烦. 经过多方考察, 研究, 今天终于找到了一个简单方便的解决方法 ------ 利用 IE 独有的 expression 属性! 下面是 CSS 文件中 code 部分的代码:

code {
...
min-height: 7em;
max-height: 20em;
...
height: expression(this.offsetHeight>205?205:'');
}

但这种方法也有两点不足: 一是只支持 IE5.5+, 二是消耗浏览器资源! 只能先凑合用了, 有时间再找更佳方案 :D

这次真的理解了, 明白了, 记住了 :D
原来 padding 会算在 width 和 height 中的, 呵呵 :lol:
CSS 尽在掌握, 值得庆祝, hoho

烂 IE 连max-width这么帅的样式都不支持, 简直太失败了!! 没办法, 为了照顾大多数 IE 用户来编一段脚本吧~~~

PLAIN TEXT >> JAVASCRIPT:
  1. // Java Script
  2. function changeImageSize(){
  3.     var i;
  4.     for(i=0; i <document.images.length; i++){
  5.         if (document.images[i].width>450){
  6.             document.images[i].width=450;
  7.         }
  8.     }
  9. }
  10. changeImageSize();