本教程基于一个简单的动画实验,它展示了使用CSS可以创建的令人惊叹的东西之一。我没有使用图像和脚本;一切都是用HTML和CSS完成的。不用说,由于CSS3仍然不被所有浏览器支持,它可能无法正常工作;但是我以这样一种方式编写了这个代码,它将在非css3浏览器上优雅地降级,包括IE(当然)。
为了创新而尝试最前沿的标准是一种帮助我们学习的属性,也许通过突破边界,我们可以进一步提高我们的知识。
最终结果
您可以单击预览图像来查看演示.为了获得最佳体验,请使用WebKit浏览器,如谷歌Chrome或Apple Safari。
创新入门
如果你问任何自学成才的专业人士,他们会发现,激励和愿意尝试是激发他们成为更好的设计师和开发人员的两个主要技能。虽然记住每种语言的每个元素、属性、函数和属性是一种选择,但知道它们能做什么就更好了。无论你是在研究如何修复一个浏览器错误,实现一个复杂的布局,或者如果你只是想玩玩,看看你能想出什么(就像这个例子),磨练你的技能以适应情况的能力会让你处于一个奇妙的位置,无论世界给你什么。
现在,关于这个有趣实验背后的理由的鼓舞人心的演讲已经结束,是时候开始检查和重构这个例子了,以展示所有东西是如何结合在一起产生最终结果的。在这个实验中,我们将利用一些很酷的CSS3代码(你可以在其他项目中使用),例如这个特性
,不必
伴随着目标
而且检查
伪类。哦,如果这还不够,我们甚至将使用一些WebKit转换来给Chrome和Safari(他们支持动画)一个渐进增强的体验。
因此,我希望通过回顾创建这些CSS3扑克牌的过程,你会有乐趣学习这些新的CSS3功能。
片段和字段集
像所有的网站一样,我们需要从一些HTML开始,为实验奠定基础。出于本例的目的,我们将在文档中保持CSS和JavaScript的内联使用,以便您可以轻松地在web浏览器中使用查看源代码特性演示.
但是在生产中,我希望您将CSS和JavaScript保持在外部。在代码块中,你会发现:
- 一个无序的列表,将以不同的卡套装为特色
- 在纸上简单描述实验的一段文字
- 一个(非常复杂的)网络表单,它将保存构成每张卡片的风格变量
<!DOCTYPE html>Playing Cards with CSS3!< /名称> <风格type = " text / css " > < /风格> < script type = " text / javascript " > < /脚本> < /头> <身体> < ul > <李> <标题= "选择黑桃" href = " #黑桃”> & # 9824;< / > < /李> <李> <类=“火”title =“选择心" href = " #心”> & # 9829;< / > < /李> <李> <标题= "选择俱乐部" href = " #俱乐部”> & # 9827;< / > < /李> <李> <类=“火”title =“选择钻石" href = " #钻石”> & # 9830;< / > < /李> < / ul > <形式action = " " > <自定义字段id =“黑桃”> 选择上面的选项改变套装显示!
卡组的Unicode字符
虽然上面的HTML大部分都很简单,但在我们的讨论中,有一些东西值得提及。在列表和表单中,您会注意到有很多奇怪的地方Unicode转义字符(如& # 9830;
),嵌在不同的位置。
当您在浏览器中查看页面时,您将注意到这些字符代表每种花色(黑桃、红心、梅花和方块),因此我们可以在不使用任何图像的情况下给出卡片的外观。列表中每个图标都有一个提及,每个表单有3个(用于角落和中心)。
Web表单是什么?
你可能会对可怕的HTML网页表单感到好奇。
使用这种代码的理由仅仅是因为CSS3处理元素的方式。虽然list元素使用简单的片段链接(为每张卡片附加到框架集容器),但每张卡片——当它出现时——包含两个带有关联标签的输入元素。第一个标签包含的混合物跨度
而且新兴市场
元素(在角落中给出卡片值)和强大的
元素(用于大的中心字符)。
第二个标签只是作为特殊效果的重置机制,即当使用WebKit浏览器时。
打好基础
现在我们已经完成了HTML,是时候转向CSS了。
首先,我们将为网页添加所有的CSS内容;我们还需要给我们的卡片一些颜色。下面的代码开始了我们进入CSS3的旅程,通过利用这个特性
而且不必
CSS属性(有一些兼容性调整)。
IE支持
值得注意的是过滤器
属性将不符合W3C CSS标准,因为它是微软Internet Explorer的专有扩展;但是因为这只是为了好玩,所以代码的验证就不那么重要了。
这允许我们支持Internet Explorer;这是一个这是打破自动验证的充分理由在这种情况下。
body {background: #DDDDDD;溢出:隐藏;} body .fire{颜色:#FF0000;} p {background: #FFFFFF;边框:1px实心#CCCCCC;边框半径:5px 5px;-moz-border-radius: 5 px;-webkit-border-radius: 5 px;box-shadow: 5px 5px #CCCCCC;-webkit-box-shadow: 5px #CCCCCC; -moz-box-shadow: 5px 5px #CCCCCC; filter: progid:DXImageTransform.Microsoft.Shadow(color='#CCCCCC', Direction=135, Strength=5); font-size: 25px; text-align: center; height: 30px; width: 600px; margin: -35px -300px; padding: 10px 15px; position: absolute; bottom: 50px; left: 50%; z-index: 99; }
导航,简化!
列表中的下一个是导航。对于我们的扑克牌实验,我们将使用锚片段来显示和隐藏每一张牌(根据需要)。
虽然接下来您将看到的代码不包含将激活导航的CSS3(我们将在后面讨论),但您将注意到代码不仅将导航浮动到屏幕的右上角,而且还添加了相同的酷炫这个特性
而且不必
效果。当您在插入这段代码后刷新页面时,您应该看到链接现在是非常可见的,并使用了我们出色的Unicode字符。
ul{背景:#FFFFFF;边框:1px实心#CCCCCC;background:-moz-linear-gradient(top, #FFFFFF, #DDDDDD);background:-webkit-gradient(linear,0 0,0 100%, from(#FFFFFF), to(#DDDDDD));边框半径:5px 5px;-moz-border-radius: 5 px;-webkit-border-radius: 5 px;box-shadow: 5px 5px #CCCCCC;-webkit-box-shadow: 5px #CCCCCC;-moz-box-shadow: 5px #CCCCCC; filter: progid:DXImageTransform.Microsoft.Shadow(color='#CCCCCC', Direction=135, Strength=5); font-size: 50px; margin: 0; padding: 0 15px; position: absolute; right: 20px; top: 15px; z-index: 99; } ul li { display: inline; list-style-type: none; } ul li a { color: #000000; display: block; float: left; padding: 0 10px; text-decoration: none; }
王牌造型
CSS中最复杂的部分是使卡片看起来像扑克牌。
使用下面的代码将为您提供完美和逐步增强的设计元素,使最终的外观成为可能。需要注意的代码包括:
- CSS3线性渐变淡出卡片
- 反转梯度使用
mask-image
属性设置在中心字符上(提供更柔和的感觉) - 一个span标签效果,它旋转右下角的参考,使它上下颠倒(就像真正的卡片一样)
都很简单,但很有效。
.base{背景:#FFFFFF;边框:1px实心#CCCCCC;颜色:# 000000;background:-moz-linear-gradient(top, #FFFFFF, #DDDDDD);background:-webkit-gradient(linear,0 0,0 100%, from(#FFFFFF), to(#DDDDDD));边框半径:5px 5px;-moz-border-radius: 5 px;-webkit-border-radius: 5 px;box-shadow: 5px 5px #CCCCCC;-webkit-box-shadow: 5px #CCCCCC; -moz-box-shadow: 5px 5px #CCCCCC; filter: progid:DXImageTransform.Microsoft.Shadow(color='#CCCCCC', Direction=135, Strength=5); height: 360px; top: 50%; margin-top: -180px; width: 260px; left: 50%; margin-left: -130px; z-index: 9; cursor: pointer; font-size: 50px; text-decoration: none; padding: 15px 0 0 25px; position: absolute; } strong { font-size: 250px; position: absolute; left: 50%; top: 50%; margin-top: -160px; -webkit-mask-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0,0,0,0.4)), to(rgba(0,0,0,1))); } em { font-size: 40px; font-style: normal; display: block; margin-bottom: -15px; } label span { -webkit-transform: rotate(-180deg); -moz-transform: rotate(-180deg); -o-transform: rotate(-180deg); filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); position: absolute; bottom: 15px; right: 25px; } #spades strong { margin-left: -68px; } #spades em { margin-left: 0; } #hearts strong { margin-left: -70px; } #hearts em { margin-left: 1px; } #clubs strong { margin-left: -80px; } #clubs em { margin-left: 3px; } #diamonds strong { margin-left: -60px; } #diamonds em { margin-left: -2px; }
注意:根据所使用的浏览器,效果可能会有所不同。
Chrome, Safari都支持所有花哨的东西,Firefox将有背景渐变(但中心字符看起来会很强大),Opera和IE将没有“磨损”效果!
导航和动画
使用上面的代码,你的卡片应该看起来像他们来自一个适当的纸牌。
现在我们已经让卡片、导航和段落看起来都很漂亮了,重要的是让每个卡片按需出现。我们还应该对在幕后徘徊的取消和单选按钮做些什么。接下来发生的事情对WebKit用户来说是非常有趣的。
字段集{显示:无;} fieldset:目标{显示:块;} fieldset:目标。card+标签{-webkit-animation-name:缩放器;-webkit-animation-duration: 1.75秒;-webkit-animation-iteration-count: 1;} fieldset:目标。card:checked+label {-webkit-animation-name: effectx;-webkit-animation-duration: 3 s;-webkit-transform:规模(0);} .close {background: #DDDDDD;光标:违约; left: 0; top: 0; position: absolute; height: 100%; width: 100%; z-index: 1; text-indent: -999em; } @-webkit-keyframes scaler { from { -webkit-transform: scale(0); } to { -webkit-transform: scale(1); } } @-webkit-keyframes effectx { from { -webkit-transform: rotateX(0deg); } to { -webkit-transform: scale3d(1.2, 1.2, 1.2) rotateX(-90deg) translateZ(500px) rotate(180deg); -webkit-animation-duration: 30s; } }
解释上面的代码非常简单。对于锚链接,我们使用片段url在牌组中的卡片之间导航,因此目标伪类隐藏并显示字段集,因为它的ID出现了。的.close
类位于覆盖整个浏览器视口的卡片后面,以便在单击页面时(一旦卡片被隐藏),您可以将项目恢复到原始位置。
这是相对于单选按钮的使用,因为我们将使用CSS3:检查
根据检查状态动画WebKit浏览器的内容。 WebKit用户最感兴趣的主要特性是两个卡类,它们可以触发定标器关键帧
哪个将使卡片放大(从任何地方)或effectx关键帧
这将旋转和翻转卡片,使它看起来好像它被推了过去(并从页面上掉下来)。我们还可以添加一些简单的效果检查
属性,提供一些可爱的实验性有趣的东西,你可以与之互动(如果你使用Chrome或Safari)。
其他浏览器会简单地忽略这些操作。注意:对于大多数WebKit动画,一旦效果完成了它的进程,它将被重置到默认点。因为这个例子要求效果保持永久(直到用户指示),所以我使用了选中的状态伪按钮和单选按钮来确保效果牢固地保持在适当的位置。
处理Internet Explorer
还记得一开始我说过我不用脚本吗?好吧,这只是部分正确。因为IE还不支持所有这些功能,我们需要使用JavaScript,这样至少我们的IE用户会有一个不错的体验。
当然,如果你不关心IE——毕竟,这是一个支持CSS3的尖端浏览器的实验——那么,是的,这个CSS3实验没有使用任何脚本。幸运的是,因为IE -像其他非webkit浏览器一样-不支持CSS3动画效果,需要处理检查状态(在CSS3中)是没有意义的,因为效果无论如何都是非功能性的。然而,有一件事应该是可用的目标伪,以便IE用户可以更改纸牌的花色。
使用一小部分条件JavaScript,我们可以在不影响浏览器的情况下复制这种效果。脚本中还有一个片段重定向,以帮助浏览器加载第一张卡。
函数bootup(){if (location。Hash == "") {location.hash="#黑桃";} var tds = document.getElementsByTagName("a");直接();For (var x=0;X < tds.length;x + +) {tds [x]。onclick = function(){setTimeout(direct, 1);};}} function direct(){/*@cc_on @if (@_jscript_version > 5.6) var count = document.getElementsByTagName("fieldset");For (var x=0;X < count .length; x++ ){ counted[x].style.display = "none" } document.getElementById(location.hash.substr(1)).style.display = "block"; @end @*/ } window.onload=bootup;
虽然上面的代码应该足以在最新版本的IE上运行基本效果,但值得强调的是,我没有花太多时间试图在像IE6这样的老浏览器上运行效果。因为这是一个概念验证演示——而且因为它的存在只是为了玩玩即将出现的标准中可用的东西——所以没有动力去尝试在每个浏览器上都加载这些效果。但是,值得一提的是,如果您打算在生产站点中使用其中的任何一种,那么您应该支持您的访问者使用的浏览器。
好玩的创新
就在几年前,如果没有图像的使用,生产这种看起来像图像的纹理纸牌的能力是不可能的。
如果没有脚本或Flash,动画效果将超出大多数人的梦想。我们的概念验证展示了现代标准的好处,以及我们网页设计师和web开发人员的未来。不断创新并将我们的浏览器推向极限是网络进化的重要组成部分。
作为一名网络专业人士,我总是试着花时间学习和检查自己的能力,看看我能产生什么独特的解决方案。理想情况下,读完这篇文章后,你会受到启发,开始自己做实验。祝你好运,在评论中分享你自己的实验吧!