使用自定义数据属性和伪元素
今天和大家分享一个使用Html5 自定义数据属性 和 CSS 的伪元素来实现一个简单的图片动画效果。
这也是我在使用了大半年Html5和css今天才发现的一个技巧,迫不及待的分享给慕课网的小伙伴,希望慕课网的小伙伴不要笑话。
相信大家都对 ::after,::before,这两个CSS伪元素都不陌生,这两个元素一般都要配合content属性来为该元素添加装饰内容。content这个虚拟元素默认是行内元素。对于我个人来说,常用的是这两种方法 content:”这是一段文字”或者是 content:” ”为空来修饰一个元素属性,但今天才发现content的功能远远不止于此。好了,直接来代码。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf8" >
<title></title>
<style>
body {
font-family: '微软雅黑', Calibri, Arial, sans-serif;
color: #89867e;
background: #f9f9f9;
}
*, *:after, *:before { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
a {text-decoration: none;outline: none;}
a img {border: none;}
/* demo1 css */
.caption {display: inline-block;position: relative;margin: 10px;}
.caption img {display: block;max-width: 100%;}
.caption::before,
.caption::after {
position: absolute;
width: 100%;
color: #fff;
padding: 20px;
opacity: 0;
z-index: 1;
-webkit-transition: opacity .3s;
-moz-transition: opacity .3s;
transition: opacity .3s;
}
.caption::before {
content: attr(data-title); /* 获取自定义数据属性 标题*/
top: 0;
height: 30%;
background: rgb(197, 71, 26);
font-size: 40px;
font-weight: 300;
}
.caption::after {
content: attr(data-description) ; /* 获取自定义数据属性 描述*/
top: 30%;
height: 70%;
background: #a21f00;
font-size: 16px;
text-align: right;
}
.caption:hover::before,
.caption:hover::after {
opacity: 1;
}
/* demo2 css*/
.caption2{display: inline-block;position: relative;margin: 10px;overflow: hidden;background: #000;}
.caption2 img{
display: block;
max-width: 100%;
-webkit-transition:opacity 0.3s ease-in-out;
-moz-transition:opacity 0.3s ease-in-out;
transition:opacity 0.3s ease-in-out;
}
.caption2:hover img{
opacity: .5;
}
.caption2::before,
.caption2::after{
position: absolute;
background: #fff;
width: 100%;
height: 50%;
color: #fff;
padding: 20px;
-webkit-transition:-webkit-transform 0.3s ease-in-out;
-moz-transition:-moz-transform 0.3s ease-in-out;
transition:transform 0.3s ease-in-out;
}
.caption2::before{
content: attr(data-title);
top: 0;
z-index: 1;
background: #B87046;
font-size: 40px;
font-weight: 300;
-webkit-transform: translateY(-100%);
-moz-transform: translateY(-100%);
transform: translateY(-100%);
}
.caption2::after{
content: attr(data-description);
top: 50%;
background: #E6453E;
font-size: 16px;
text-align: left;
-webkit-transform: translateY(100%);
-moz-transform: translateY(100%);
transform: translateY(100%);
}
.caption2:hover::before,
.caption2:hover::after{
-webkit-transform: translateY(0);
-moz-transform: translateY(0);
transform: translateY(0);
}
/* demo3 css */
span[data-descr] {
position: relative;
text-decoration: underline;
color: #00F;
cursor: help;
}
span[data-descr]:hover::after {
content: attr(data-descr);
position: absolute;
left: 0;
top: 24px;
min-width: 200px;
border: 1px #aaaaaa solid;
border-radius: 10px;
background-color: #ffffcc;
padding: 12px;
color: #000000;
font-size: 14px;
z-index: 1;
}
</style>
</head>
<body>
<a
class="caption"
href="#"
data-title="Lorem ipsum" data-description="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam">
<img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="http://payload300.cargocollective.com/1/5/182469/8304068/SmugEagle.png" alt="deom1">
</a>
<a
class="caption2"
href="#"
data-title="Lorem ipsum" data-description="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam">
<img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="http://payload300.cargocollective.com/1/5/182469/8304068/gunslinger.png" alt="deom2">
</a>
<!-- deom3 -->
<p>这是上面代码的实现<br />
我们有一些 <span data-descr="collection of words and punctuation">文字</span> 有一些
<span data-descr="small popups which also hide again">提示</span>。<br />
把鼠标放上去<span data-descr="not to be taken literally">看看</span>.
</p>
</body>
</html>
使用鼠标的:hover来出发过渡动画,过渡动画的实现主要由CSS3 的transition属性来实现的,不太了解的可以去《十天精通CSS3》的课程,有详细的讲解了transition实现过渡动画的实现,相信你比我更懂。
利用::after,::before可以做出浮动提示框(deom3),有兴趣的朋友可以去优化一下,做出漂亮的提示框。
然后我去MDN上查了一下content属性,不查还真不知道,原来content值有如此多种。很多都是我们不常用的,有需要的小伙伴可以试试,但我们开发上比较常用的还是之前提到的。
content: normal /* :before 和 :after 伪类元素中会被视为 none */
content: none /*不会产生任何元素*/
content: 'prefix' /*文本内容*/
content: url(http://www.example.com/test.html) /* URI值会指定一个外部资源 */
content: chapter_counter /* <counter> values */
content: attr(value string) /*将元素的X属性以字符串形式返回,也是今天deom用上的 */
content: open-quote /* Language- and position-dependant keywords */
content: close-quote
content: no-open-quote
content: no-close-quote
content: open-quote chapter_counter /* Except for normal and none, several values can be used simultaneously */
content: inherit
注:代码部分来源于 http://tympanus.net/codrops/2013/07/05/using-custom-data-attributes-and-pseudo-elements/
点击查看更多内容
16人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦