jquery ui的css设计
jquery ui 是当前最强大的UI库之一,其两大卖点是对IE6的良好支持与换肤功能。为了构建avalon ui,今天起我将投入一部分精力来研究时下最流行的几个CSS框架。它是首当其冲。
jquery ui的CSS并没有打包一个文件,用户只要引入 jquery.ui.all.css,它就会将所有CSS文件通过@import语句引进来。单从@import来,它比JS高明多了,时至今天,JS的加载都需要我们来实现。
jquery.ui.all.css 的内容很简单:
/*! * jQuery UI CSS Framework @VERSION * http://jqueryui.com * * Copyright 2013 jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/category/theming/ */ @import "jquery.ui.base.css" ; @import "jquery.ui.theme.css" ; |
jquery.ui.base.css的内容也很简单,与上面一样,尽是@import语句
/*! * jQuery UI CSS Framework @VERSION * http://jqueryui.com * * Copyright 2013 jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/category/theming/ */ @import url ( "jquery.ui.core.css" ); @import url ( "jquery.ui.accordion.css" ); @import url ( "jquery.ui.autocomplete.css" ); @import url ( "jquery.ui.button.css" ); @import url ( "jquery.ui.datepicker.css" ); @import url ( "jquery.ui.dialog.css" ); @import url ( "jquery.ui.menu.css" ); @import url ( "jquery.ui.progressbar.css" ); @import url ( "jquery.ui.resizable.css" ); @import url ( "jquery.ui.selectable.css" ); @import url ( "jquery.ui.slider.css" ); @import url ( "jquery.ui.spinner.css" ); @import url ( "jquery.ui.tabs.css" ); @import url ( "jquery.ui.tooltip.css" ); |
jquery.ui.core.css与我预想的不一样,不做任何reset操作,也不提供什么分栏布局。可能考虑到用户已经引入自己的reset 吧。这里只有极少数的工具类,比如隐藏,清除浮动,将文本从容器中移出视野外……
/* Layout helpers ----------------------------------*/ .ui-helper- hidden { /* 隐藏*/ display : none ; } .ui-helper-hidden-accessible { border : 0 ; clip : rect( 0 0 0 0 ); height : 1px ; margin : -1px ; overflow : hidden ; padding : 0 ; position : absolute ; width : 1px ; } .ui-helper-reset { margin : 0 ; padding : 0 ; border : 0 ; outline : 0 ; line-height : 1.3 ; text-decoration : none ; font-size : 100% ; list-style : none ; } .ui-helper-clearfix:before, /*不添加多余标签实现清除浮动*/ .ui-helper-clearfix:after { content : "" ; display : table; border-collapse : collapse ; } .ui-helper-clearfix:after { clear : both ; } .ui-helper-clearfix { min-height : 0 ; /* support: IE7 */ } .ui-helper-zfix { width : 100% ; height : 100% ; top : 0 ; left : 0 ; position : absolute ; opacity: 0 ; filter:Alpha(Opacity= 0 ); } .ui-front { z-index : 100 ; } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { /*不可用*/ cursor : default !important ; } /* Icons ----------------------------------*/ /* states and images */ .ui- icon { /* 让ICON所在的标签的文本移出视野外 */ display : block ; text-indent : -99999px ; overflow : hidden ; background-repeat : no-repeat ; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position : fixed ; top : 0 ; left : 0 ; width : 100% ; height : 100% ; } |
接着我们拿一个控件的CSS分析下吧
/* 每一个UI都有一个容器, 此容器必有这样的类名, “ui-”加UI名*/ .ui-slider { position : relative ; text-align : left ; } .ui-slider .ui-slider-handle { position : absolute ; z-index : 2 ; width : 1.2em ; height : 1.2em ; cursor : default ; } .ui-slider .ui-slider-range { position : absolute ; z-index : 1 ; font-size : . 7em ; display : block ; border : 0 ; background-position : 0 0 ; } /* For IE8 - See #6727 */ .ui-slider.ui-state-disabled .ui-slider-handle, .ui-slider.ui-state-disabled .ui-slider-range { filter: inherit; } .ui-slider-horizontal { height : . 8em ; } .ui-slider-horizontal .ui-slider-handle { top : -. 3em ; margin-left : -. 6em ; } .ui-slider-horizontal .ui-slider-range { top : 0 ; height : 100% ; } .ui-slider-horizontal .ui-slider-range-min { left : 0 ; } .ui-slider-horizontal .ui-slider-range-max { right : 0 ; } .ui-slider-vertical { width : . 8em ; height : 100px ; } .ui-slider-vertical .ui-slider-handle { left : -. 3em ; margin-left : 0 ; margin-bottom : -. 6em ; } .ui-slider-vertical .ui-slider-range { left : 0 ; width : 100% ; } .ui-slider-vertical .ui-slider-range-min { bottom : 0 ; } .ui-slider-vertical .ui-slider-range-max { top : 0 ; } |
为了适应用户的字体设置,它基本上不使用px。在这个文件中,它不涉及任何颜色长宽的设置。
换肤功能的实现在jquery.ui.theme.css,想换肤,将此文件替换就行。这里的类名都是以ui-widget-xxx, ui-state-xxx, ui-icon-xxx, ui-corner-xxx命名。主要处理文本颜色,文本缩进,背景颜色,背景图片,透明度与圆角。
/* Component containers ----------------------------------*/ .ui-widget { font-family : Verdana , Arial , sans-serif /*{ffDefault}*/ ; font-size : 1.1em /*{fsDefault}*/ ; } .ui-widget .ui-widget { font-size : 1em ; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family : Verdana , Arial , sans-serif /*{ffDefault}*/ ; font-size : 1em ; } .ui-widget-content { border : 1px solid #aaaaaa /*{borderColorContent}*/ ; background : #ffffff /*{bgColorContent}*/ url (images/ui-bg_flat_ 75 _ffffff_ 40 x 100 .png) /*{bgImgUrlContent}*/ 50% /*{bgContentXPos}*/ 50% /*{bgContentYPos}*/ repeat-x /*{bgContentRepeat}*/ ; color : #222222 /*{fcContent}*/ ; } .ui-widget-content a { color : #222222 /*{fcContent}*/ ; } .ui-widget-header { border : 1px solid #aaaaaa /*{borderColorHeader}*/ ; background : #cccccc /*{bgColorHeader}*/ url (images/ui-bg_highlight-soft_ 75 _cccccc_ 1 x 100 .png) /*{bgImgUrlHeader}*/ 50% /*{bgHeaderXPos}*/ 50% /*{bgHeaderYPos}*/ repeat-x /*{bgHeaderRepeat}*/ ; color : #222222 /*{fcHeader}*/ ; font-weight : bold ; } .ui-widget-header a { color : #222222 /*{fcHeader}*/ ; } /* Interaction states ----------------------------------*/ .ui-state- default , .ui-widget-content .ui-state- default , .ui-widget-header .ui-state- default { border : 1px solid #d3d3d3 /*{borderColorDefault}*/ ; background : #e6e6e6 /*{bgColorDefault}*/ url (images/ui-bg_glass_ 75 _e 6 e 6 e 6 _ 1 x 400 .png) /*{bgImgUrlDefault}*/ 50% /*{bgDefaultXPos}*/ 50% /*{bgDefaultYPos}*/ repeat-x /*{bgDefaultRepeat}*/ ; font-weight : normal /*{fwDefault}*/ ; color : #555555 /*{fcDefault}*/ ; } .ui-state- default a, .ui-state- default a:link, .ui-state- default a:visited { color : #555555 /*{fcDefault}*/ ; text-decoration : none ; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border : 1px solid #999999 /*{borderColorHover}*/ ; background : #dadada /*{bgColorHover}*/ url (images/ui-bg_glass_ 75 _dadada_ 1 x 400 .png) /*{bgImgUrlHover}*/ 50% /*{bgHoverXPos}*/ 50% /*{bgHoverYPos}*/ repeat-x /*{bgHoverRepeat}*/ ; font-weight : normal /*{fwDefault}*/ ; color : #212121 /*{fcHover}*/ ; } .ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color : #212121 /*{fcHover}*/ ; text-decoration : none ; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border : 1px solid #aaaaaa /*{borderColorActive}*/ ; background : #ffffff /*{bgColorActive}*/ url (images/ui-bg_glass_ 65 _ffffff_ 1 x 400 .png) /*{bgImgUrlActive}*/ 50% /*{bgActiveXPos}*/ 50% /*{bgActiveYPos}*/ repeat-x /*{bgActiveRepeat}*/ ; font-weight : normal /*{fwDefault}*/ ; color : #212121 /*{fcActive}*/ ; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color : #212121 /*{fcActive}*/ ; text-decoration : none ; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { border : 1px solid #fcefa1 /*{borderColorHighlight}*/ ; background : #fbf9ee /*{bgColorHighlight}*/ url (images/ui-bg_glass_ 55 _fbf 9 ee_ 1 x 400 .png) /*{bgImgUrlHighlight}*/ 50% /*{bgHighlightXPos}*/ 50% /*{bgHighlightYPos}*/ repeat-x /*{bgHighlightRepeat}*/ ; color : #363636 /*{fcHighlight}*/ ; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a { color : #363636 /*{fcHighlight}*/ ; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { border : 1px solid #cd0a0a /*{borderColorError}*/ ; background : #fef1ec /*{bgColorError}*/ url (images/ui-bg_glass_ 95 _fef 1 ec_ 1 x 400 .png) /*{bgImgUrlError}*/ 50% /*{bgErrorXPos}*/ 50% /*{bgErrorYPos}*/ repeat-x /*{bgErrorRepeat}*/ ; color : #cd0a0a /*{fcError}*/ ; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color : #cd0a0a /*{fcError}*/ ; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color : #cd0a0a /*{fcError}*/ ; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight : bold ; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: . 7 ; filter:Alpha(Opacity= 70 ); font-weight : normal ; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: . 35 ; filter:Alpha(Opacity= 35 ); background-image : none ; } .ui-state-disabled .ui- icon { filter:Alpha(Opacity= 35 ); /* For IE8 - See #6059 */ } /* Icons ----------------------------------*/ /* states and images */ .ui- icon { width : 16px ; height : 16px ; } .ui- icon , .ui-widget-content .ui- icon { background-image : url (images/ui-icons_ 222222 _ 256 x 240 .png) /*{iconsContent}*/ ; } .ui-widget-header .ui- icon { background-image : url (images/ui-icons_ 222222 _ 256 x 240 .png) /*{iconsHeader}*/ ; } .ui-state- default .ui- icon { background-image : url (images/ui-icons_ 888888 _ 256 x 240 .png) /*{iconsDefault}*/ ; } .ui-state-hover .ui- icon , .ui-state-focus .ui- icon { background-image : url (images/ui-icons_ 454545 _ 256 x 240 .png) /*{iconsHover}*/ ; } .ui-state-active .ui- icon { background-image : url (images/ui-icons_ 454545 _ 256 x 240 .png) /*{iconsActive}*/ ; } .ui-state-highlight .ui- icon { background-image : url (images/ui-icons_ 2 e 83 ff_ 256 x 240 .png) /*{iconsHighlight}*/ ; } .ui-state-error .ui- icon , .ui-state-error-text .ui- icon { background-image : url (images/ui-icons_cd 0 a 0 a_ 256 x 240 .png) /*{iconsError}*/ ; } /* positioning */ .ui-icon-blank { background-position : 16px 16px ; } .ui-icon-carat -1 -n { background-position : 0 0 ; } .ui-icon-carat -1 -ne { background-position : -16px 0 ; } /* 略,这里都是ICON,通过background-position来处理背景图片*/ .ui-icon-grip-diagonal-se { background-position : -80px -224px ; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner- all , .ui-corner- top , .ui-corner- left , .ui-corner-tl { border-top-left-radius: 4px /*{cornerRadius}*/ ; } .ui-corner- all , .ui-corner- top , .ui-corner- right , .ui-corner-tr { border-top-right-radius: 4px /*{cornerRadius}*/ ; } .ui-corner- all , .ui-corner- bottom , .ui-corner- left , .ui-corner-bl { border-bottom-left-radius: 4px /*{cornerRadius}*/ ; } .ui-corner- all , .ui-corner- bottom , .ui-corner- right , .ui-corner-br { border-bottom-right-radius: 4px /*{cornerRadius}*/ ; } /* Overlays */ .ui-widget-overlay { background : #aaaaaa /*{bgColorOverlay}*/ url (images/ui-bg_flat_ 0 _aaaaaa_ 40 x 100 .png) /*{bgImgUrlOverlay}*/ 50% /*{bgOverlayXPos}*/ 50% /*{bgOverlayYPos}*/ repeat-x /*{bgOverlayRepeat}*/ ; opacity: . 3 /*{opacityOverlay}*/ ; filter: Alpha(Opacity= 30 ) /*{opacityFilterOverlay}*/ ; } .ui-widget-shadow { margin : -8px /*{offsetTopShadow}*/ 0 0 -8px /*{offsetLeftShadow}*/ ; padding : 8px /*{thicknessShadow}*/ ; background : #aaaaaa /*{bgColorShadow}*/ url (images/ui-bg_flat_ 0 _aaaaaa_ 40 x 100 .png) /*{bgImgUrlShadow}*/ 50% /*{bgShadowXPos}*/ 50% /*{bgShadowYPos}*/ repeat-x /*{bgShadowRepeat}*/ ; opacity: . 3 /*{opacityShadow}*/ ; filter: Alpha(Opacity= 30 ) /*{opacityFilterShadow}*/ ; border-radius: 8px /*{cornerRadiusShadow}*/ ; } |
over!
如果您觉得此文有帮助,可以打赏点钱给我支付宝1669866773@qq.com ,或扫描二维码


机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?