【疯狂的菊花系列】全CSS3制作Loading动画

Under: CSS

话说上三回, 我们用css3的animation让png图片动起来了.

但是美中不足的是, 还要画一张图片. 如果要求做几个不同大小的菊花, 或者要换个颜色, 又或者要不同的地方用不同的颜色和大小的菊花, 得找到原图(psd之类的)再导出一个不同的size, 个人感觉蛋疼死了.

这次咱们用css3来画那几个点, 让它能大能小能色, 嘿嘿~~(邪恶了).

先看看效果吧, 用鼠标左键狠狠的砸这里.

菊花上有12个点, 我们用12个span标签来做, 宽高使用百分比, 用来自适应外层容器的变化, 圆角设置为100%,就可以保证显示成一个圆了.

接下来的事情就比较痛苦, 需要一个个摆到正确的位置. 但是为了以后的幸福生活哇, 咱也得硬着头皮的上是吧.

好在有了css3的选择器,我们也不用一个个给这些span起名字了,span:nth-child(1)就表示第一个span, nth-child的值是从1开始的,感觉有点怪异.

定位的话用绝对定位, 然后用负的margin把圆心偏移回去, 位置要自己算好, 具体可以看 demo.

css代码我就不贴全了,避免凑字数的嫌疑, 关键代码如下:

.loading{
    width: 50px;
    height: 50px;
}
.loading div{
    position: relative;
    width: 100%;
    height: 100%;
    -webkit-animation: auto-circle 1s linear infinite ;
    -moz-animation: auto-circle 1s linear infinite ;
}
.loading div span{
    display: block;
    background: #04AED9;
    -webkit-border-radius: 100%;
    -moz-border-radius: 100%;
    position: absolute;
}
.loading div span:nth-child(1){
    width: 18%;
    height: 18%;
    left: 50%;
    top: 0%;
    margin-left: -9%;
}
/* ... */

除了loading的外框, 全部值都是用百分比, 这样12个小点的大小和位置都能随着外框的大小改变而改变了, 连颜色都能随便改, 爽了吧.

后传:

某产品: 这个菊花改成16px的, 那个换成红色的.

苦逼代码男: 32px改成16px是吧, 蓝色换成红色是吧,  嗯, 改完了, 吃饭~~

某产品: …… 

【疯狂的菊花系列】使用CSS3制作PNG Loading图

Under: CSS

Loading图, 也就是俗称的菊花, 大部分网站都会用到, 而一般情况用的都是gif动画, 但是gif能保存的颜色太少, 导致有渐变的图导出来后有毛边, 很不美观.

不过随着html5和css3的出炉, 我们终于可以把loading做的更加美观啦.

之前用png制作loading动画并不是没有, 但是需要使用js以及制作一张包含所有动作的png图片(就像跑马灯一样), 咱不熟ps, 画起来相当吃力.

而在html5/css3的带领下, 我们又有了两个新的方法: canvas和css动画.

但是我是相当讨厌用js代替css本身就可以实现的功能, 而且本人觉得在cavas上画图太累( 这不就是把ps搬到网页么…), 所以就把魔爪伸向了css3, 嘿嘿~~

Read More »

子节点的margin溢出问题

Under: CSS

我们知道, css margin是会合并的, 有时会导致一些布局问题.

事实上margin还有存在一个溢出的问题: 当其父节点没设置宽高的时候, 子节点的margin超出父节点而存在, 会导致父节点的left/top产生了偏移, 导致position:absolute的节点定位不准确.

我们先看下面这个例子:
Read More »

高度超过4096像素的元素边框消失

Under: CSS

一个游戏群里的同事提到一个Bug, 在他的页面里, 实际内容是超过了6000px的, 而且给包含内容的容器加了个border: 1px dotted #fff, 这时在chrome中就发现左右边框消失了!!!

如果你的是chrome, 点击这里查看demo. 这个问题相当诡异, 如下:

1. 改成2px, border出来了!

2. 改成solid, 又出来了!

3. 高度低于4096, 呃, 又出来了…不过还是少了一些点, 改成4095就很正常了…

暂时还没有找到解决办法, chrome处理超过2的40次方之后的数字溢出了, chromium的项目里已经看到有人提了bug, 但是到目前为止(chrome 12.0.733.0)依然如此. 也许某天google大神心情好了, 会fix它吧. ╮(╯_╰)╭

使用CSS3的Linear Gradients (线性渐变)制作渐变背景按钮

Under: CSS

该方法用到主要特性是gradient

gradient只有ff和webkit内核的浏览器有支持,不过目前都还是私有的,不知道何时才能标准化

在ff和webkit的调用方式都还不一样,具体可以看这里这里,说明的很清楚了

ie可以用滤镜达到效果,一如既往的无视它

来看看效果先:

Read More »

用CSS3的transform垂直排列日期

Under: CSS

废话少说,先上图:

当然了,transform属性目前的ie不支持,但那不关我事.

传说也可以用滤镜解决,具体办法到google搜”css 垂直排列日期”就有了. Read More »

纯CSS多级菜单

Under: CSS

下午在看《ajax权威指南》,看了多级菜单部分,想了想,觉得可以用纯CSS做一个。

用了CSS2的子对象选择符“>”和伪类“hover”,可以IE6不支持子对象选择符,除A之外的标签页不支持hover,所以无视IE6,咱们做web前端的已经被IE6害的够惨的了。

兜远了……直接上图,想要多少级就多少级。

Read More »

关于reset.css的必要性

Under: CSS

通常开始写css的时候,我都会先link一个reset.css

所谓reset,就是将html标签的样式都去掉,变成普通的标签的样子如<span>。

要reset的根本原因就是不同的浏览器对同一个标签样式的解析不一致,导致有些css在一个浏览器显示明明没问题,可是到了另一个浏览器则产生多多少少的错位等问题。加入了reset,就要对很多样式重写,即使你想让他保持原来的样子。

但是对于用户产生内容的网站来说,比如Blog,都用到了富文本可视化编辑器,而大部分编辑器都使用了execCommand来实现格式化的。execCommand在不同的浏览器会生成不同的代码,如“粗体”,执行execCommand(‘bold’,null,false);之后,ie会生成<strong>,ff则生成<span style=”font-weight: bold;”></span>,还有浏览器会生成<b>,如果使用了reset,则在ie等浏览器的富文本格式化会变成看起来无效的样子。

另一种情况就是要做对搜索引擎友好的网页时,像<strong>这些标签是很有用的。从语义上就知道<strong>是表示强调内容,一般粗体显示。但是如果reset了,则需要让<strong>里面填充style,或者用个带有style的span把strong里面的内容包括起来,无疑是自找麻烦。

对于这些情况,有两个解决方法:

  1. 去掉reset,哪个标签在哪个浏览器除了问题,再改相应的标签,但是可能会造成相同的代码在不同浏览器表现不完全一致;
  2. 使用reset,然后在要用到的地方使用css模拟回原来的样式

具体要怎么做就看个人喜好了。

附录:我自己使用的reset.css 跟据YUI库的reset.css和网上一些介绍以及自己的经验改写的。

blog