图标库
  • DEMO:内容自适应、有层叠效果的滑动门实现

    前几天在CSS森林群中讨论问题时,遇到一位朋友提出的内容自适应的层叠式菜单(滑动门)问题,当时想得很简单,以为简单切图即可,随后发现自己的低级错误。由于以前还没有实际的项目做过这种菜单,故实际制作一例DEMO并附上解决思路,深刻地熟悉一下其中的特点。

    ====================滑动的分隔线(*^__^*) ====================

    要实现的效果如下(设计水平不行了,别笑话咱 ):


    默认时,各个菜单分别向前遮挡;悬停时,当前菜单需要移动到最上层并替换图像。

    HTML部分:
    1.第一次考虑的思路(失败方案):

    程序代码 程序代码
    <ul>
    <li><a /></li>
    </ul>

    li中放置向右对齐平铺的滑动背景(简称身体层),a中放置左侧不重复背景(简称头部层),由于a在li中,优先级高,其头部层将盖住身体层。因为头部层需要用透明png图片,为避免身体层透过来,头部层要向左移动一段距离,与身体层保持距离。接下来开始思考hover的时候,发现这种结构不能实现hover后的效果,因为身体层在a的外面,IE6下无法使用a:hover伪类替换图像。故考虑加入span标签来完成。

    2.第二次考虑的思路(最终方案):

    程序代码 程序代码
    <ul>
    <li><a><span>标题1</span></a></li>
    </ul>

    把span作为头部层放在a中,a换作身体层(li被架空了 ,残念),这样就可以通过a:hover来控制头部和身体,让他们同时……替换图片了^^#。另外,菜单在悬停之后,需要设置z-index来使它们显示在同类的最上层。

    CSS部分:

    程序代码 程序代码
    ul li{float:left;}
    ul li a{display:block;height:30px;float:left;color:#FFF;background:url(img1);}
    ul li a span{display:block;height:30px;float:left;position:relative;left:-10px;background:url(img2);} /*用relative向左10像素使菜单头部与身体衔接,同时向左覆盖前一个菜单并露出本菜单尾部*/
    ul li a:hover{height:55px;line-height:55px;position:relative;top:-25px;z-index:100;background:url(img3);} /*用relative向上25像素使hover后的菜单模拟”底部对齐”*/
    ul li a:hover span{height:55px;background:url(img4);} /*hover后+span的选择器,用来替换头部层span的图像*/

    因为要实现宽度自适应,故所有标签均不要定义宽度。图片使用8位png可较好的实现圆角透明效果。最终图片尽量做成Sprite方式,这样菜单的性能更好:D

    Images部分:

    这就是用来做Sprite的图了。

    OK。最终整理一下,运行看看效果:

    HTML代码

    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    以下是完整的DEMO演示地址:
    http://www.smbey0nd.com/Demo/20080830/sliding_doors.html

    ====================滑动的分隔线(*^__^*) ====================

    实现这种滑动门的关键之处在于,由于IE6不支持a之外的hover伪类,所以悬停的效果只能在a中做文章。CSS选择器在a:hover后选择span可以很好的解决这个问题。position:relative和z-index也是需要注意的地方。

    btw:很可惜,由于relative的问题,本Demo不能进行float:center的居中模拟:(,不得不算做一个小瑕疵吧。

    归类于: WEB 评论: 2 SMbey0nd @ 2008-08-30 上午 3:40
  • HTML标准属性

    这里列出的属性,是通用于每个标签的核心属性和语言属性(不支持的标签将会列在每一项的后面,需要重点记忆):

    核心属性:
    [code]class(元素的类)
    id(元素的特定id)
    style(内联样式定义)
    title(提示的文本)
    [/code]不支持以上属性的标签:
    [code]base
    head
    html
    meta
    param
    script
    style
    title
    [/code]

    语言属性:
    [code]dir(设置文本的方向)
    lang(设置语言代码)
    [/code]不支持以上属性的标签:
    [code]base
    br
    frame
    frameset
    hr
    iframe
    param
    script
    [/code]

    键盘属性:
    [code]accesskey(设置访问某元素的键盘快捷键)
    tabindex(设置某元素的Tab次序)
    [/code]无不支持标签

    ====================

    延伸:XHTML中必须具备属性的元素

    归类于: WEB 评论: 发表 SMbey0nd @ 2008-08-28 下午 4:03
  • HTML必须具备属性的元素

    以下元素标记在HTML中必须具备某种属性,这个问题中,有许多细节是经常会被忽略的。加粗的需要重点记忆。

    [code]标记的content属性。

    Begin

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    这是为了增加高度

    End

    position: fixed;我始终在屏幕左上角哦



    [/html]

    ==============更新结束=============

    受到一篇文章启发,琢磨了一个不用JS即可实现支持各大浏览器的DIV固定位置(position:fixed,类似新浪博客中右下角的悬浮广告)的方法,在这里分享一下思路。

    ===========================想念奥运的分隔线===========================

    [color=Maroon]测试通过:
    IE6/IE7/FF2/FF3/Moz/Safari/OP/NS[/color]

    原理:
    其实原理很简单,就是利用一个DIV来模拟网页的Body(#Content),另一个DIV来做被固定的区域(#Nav)。让#Nav绝对定位在页面的上方(或其他位置皆可),最后将#Content的宽高设置成正好满屏的宽高,并overflow:scroll,大功告成。

    CSS:
    [code]
    html,body{margin:0;padding:0;height:100%;overflow:hidden;}
    #Nav{width:100%;position:absolute;top:0;left:0;}
    #Content{width:100%;height:100%;overflow:scroll;overflow-x:hidden;}[/code]
    需要注意的:
    1.html,body中的height:100%是必不可少的,如果没有这个高度,#Content的height:100%将会不起作用(这一部分让我头痛了好一阵)。
    2.html,body中的overflow:hidden用来去除body自带的滚动条。
    3.#Content中的overflow-x:hidden用来去除DIV中的水平滚动条。另外这个属性并非标准的写法,但它除了Opera不支持外,其他浏览器都可以支持。
    4.在#Nav是100%的时候,它会盖住#Content的滚动条。如非100%宽度则无此顾虑。

    HTML:
    [code]

    我是被固定位置的DIV

    我是网站内容区域,我很长很长很长很长……

    [/code]
    需要注意的:
    理论上#Nav同样可以放在#Content中作为子元素;所有的HTML布局代码都应被#Content所包含,因为它已经被模拟成Body了:D

    整理一下,运行试试:
    [html]


    我是固定位置的DIV哦(*^__^*)

    我是网站内容区域,我很长很长很长很长……

    "我是图片占位符,我很高很高"

    像Mario一样飞啊飞啊飞啊飞



    [/html]

    以下是完整的DEMO演示地址:
    http://www.smbey0nd.com/Demo/20080826/position_fixed_without_js.html

    最后总结一下这种方法的利弊:
    优点:无需JS和Hack;实现起来简单方便;适合轻量级页面
    缺点:不适合用在正规大型项目中;可能会出现某些不可预料的问题;模拟的滚动条会和正常情况有细微不一致

    (还有个疑问:overflow-x真的是IE专有属性吗?)

    ===========================文章结束的分隔线===========================

    [quote][color=Purple]顺便提一下流行的IE6Hack+JS的解决方式:
    即IE6使用top:expression(documentElement.scrollTop)来做位置的处理,并用IE6Hack标注。
    其他浏览器默认使用position:fixed即可。
    该DEMO详见云谦的博客>>[/color][/quote]

    [SM]欢迎讨论

    归类于: WEB 评论: 1 SMbey0nd @ 2008-08-26 下午 5:32
  • CSS Hacks For Firefox, IE, Opera, Safari

    Let's Learn the CSS Hacks For Firefox, IE, Opera, Safari

    [code]
    /* Opera */
    html:first-child #opera{display: block;}

    /* IE 7 */
    html > body #ie7{*display: block;}

    /* IE 6 */
    body #ie6{_display: block;}

    /* Firefox 1 - 2 */
    body:empty #firefox12{display: block;}

    /* Firefox */
    @-moz-document url-prefix(){#firefox { display: block; }}

    /* Safari */
    @media screen and (-webkit-min-device-pixel-ratio:0) { #safari { display: block; }}

    /* Opera */
    @media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0){head~body #opera { display: block; }}
    [/code]

    [html]


    Opera 7.2 – 9.5

    Safari

    Firefox

    Firefox 1 – 2

    IE 7

    IE 6


    [/html]

    [F10]

    归类于: WEB 评论: 发表 SMbey0nd @ 2008-08-22 下午 4:04

关于SMbey0nd

Avatar of SMbey0nd SMbey0nd
F2EDevigner 83/07/03
USE.com.cn|TaobaoUED
hangzhou china
我爱花夏小小
折叠 图标库