css文字定时消失

html-css012

css文字定时消失,第1张

这是一款很酷的带定时消失功能的css3消息提示框插件。

HTML

html结构非常简单:用一个wrapper div作为包裹容器,里面放一个用于显示信息的p标签和一个用来做进度条的div。

Your settings have been saved successfully!

为了给包裹div设置不同的颜色,给它设置两个class:tn-box和tn-box-color-1。

CSS

.tn-box {

width: 360px

position: relative

margin: 0 auto 20px auto

padding: 25px 15px

text-align: left

border-radius: 5px

box-shadow:

0 1px 1px rgba(0,0,0,0.1),

inset 0 1px 0 rgba(255,255,255,0.6)

opacity: 0

cursor: default

display: none

}

.tn-box-color-1{

background: #ffe691

border: 1px solid #f6db7b

}

设置包裹div的初始dispaly:none,并给设置它的透明度为0。

进度条的样式如下:

.tn-progress {

width: 0

height: 4px

background: rgba(255,255,255,0.3)

position: absolute

bottom: 5px

left: 2%

border-radius: 3px

box-shadow:

inset 0 1px 1px rgba(0,0,0,0.05),

0 -1px 0 rgba(255,255,255,0.6)

}

动画开始前,进度条的宽度为0。

在demo中,使用一个checkbox来作为按钮触发消息提示框动画。

input.fire-check:checked ~ section .tn-box {

display: block

animation: fadeOut 5s linear forwards

}

input.fire-check:checked ~ section .tn-box .tn-progress {

animation: runProgress 4s linear forwards 0.5s

}

因为按钮的动作发生在消息提示框之前,所以可以使用一般通用选择器来完成按钮操作。

如果你想使用javascript来完成按钮动作,你可以像下面这样写样式:

.tn-box.tn-box-active {

display: block

animation: fadeOut 5s linear forwards

}

.tn-box.tn-box-active .tn-progress {

animation: runProgress 4s linear forwards 0.5s

}

tn-box-active是在按钮按下时被加到tn-box div中的class。

下面是消息框淡入淡出动画效果:

@keyframes fadeOut {

0% { opacity: 0}

10% { opacity: 1}

90% { opacity: 1transform: translateY(0px)}

99% { opacity: 0transform: translateY(-30px)}

100% { opacity: 0}

}

下面是进度条的动画效果:

@keyframes runProgress {

0% { width: 0%background: rgba(255,255,255,0.3)}

100% { width: 96%background: rgba(255,255,255,1)}

}

我们使它运动到进度条宽度的96%,颜色上使用RGBA。

问题问的比较含糊吧,其实不太能理解是想要整理样式,还是想要在原有基础上覆盖样式。

======整理样式=====

在我们写样式的时候,页面的CSS在经历几个版本的修改之后,可能有些样式已经用不到了,或许将某些样式更名了而原来的忘了删除,总之页面中可能存 在着一些无用的样式。这些无用的浪费了一些服务器空间和带宽消耗,也会增大我们的维护成本。下面介绍几个分析无用样式的工具:

【Dust-Me selectors】

Dust-Me是一个很有用也很好用的Firefox插件,它可以分析到你的页面中调用的所有CSS文件并分析那些在页面中没有被用到。

支持本地和远程样式文件,包括使用<link>标签、<?xml-stylesheet?>处理指令、@import语句等方式引入的样式文件;(但是不支持页面中的<style>块和内联样式)

支持IE条件注释中引入的样式文件;

可以检查一个页面,也可以检查整个网站;

支持CSS1选择器、大部分CSS2和CSS3选择器;

理解通用的CSS hack,比如 “* html #fuck-ie”将会被认为是”html #fuck-ie”;

支持Firefox 3.5和Firefox 3.0,事实上得益于FF 3.5的js引擎的改进,FF 3.5中的性能比FF 3.0要高50%。

你可以下载该项目的源代码,了解更多请访问 Dust-Me selector官方页面。

【Page Speed】

Page Speed是Google提供的一个前端性能分析工具,有些类似于YSlow,但是提供了一些比较个性且很有用的工具,比如Remove unused CSS:

Page Speed和YSlow一样依赖Firebug。

【CSS Redundancy Checker】

CSS Redundancy Checker 是一个免费的在线应用,可以检查所有的使用某个CSS文件的页面中无用的样式。可以同时检查某一个样式在多个页面中的使用情况。该工具的不足是虽然一次能 检查多个HTML页面,但每次只能检查一个CSS文件,而且还要手动输入:

【IntelliJ IDEA】

IntelliJ IDEA 这是一个颇强大的IDE,类似于DreamWeaver,不过在国内用的不多。该软件包括一个即时代码分析工具(On-the-fly Code Analysis),可以分析CSS文件中未用到的class和id。

【Expression Web】

Expression Web作为微软的新一代网站开发工具,还是有很多人使用的,其CSS Report功能可以检查未用到需要被清除的CSS(我的确没有使用EW开发过网站,希望使用该软件的童鞋可以帮忙确认一下这一点)。

另外,通常我们将整个网站的样式写入一个或多个样式文件中,然后在页面中全部调用或者分模块调用,那么某个CSS文件中的样式可能在某个页面中的确 没有用到但是在其它的页面中被用到了,所以使用这些工具检测CSS文件中多余的样式的时候,需要保持一定的谨慎,清除样式可能会影响到其它的页面,所以 page speed提供的检查结果只适用于单个页面,不适合整个网站,而使用Dust-Me或CSS Redundancy Checker的时候可以对整个网站或者网站的多个页面同时检查,这样可能能避免万无一失。

======覆盖样式=====

有时候在写CSS的过程中,某些限制总是不起作用,这就涉及了CSS样式覆盖的问题,如下:

/* css样式 */

#navigator {height:100%width:200pxposition: absoluteleft: 0border: solid 2 #EEE}

.current_block {border: solid 2 #AE0}

CSS优先级如下排列:

1. 样式表的元素选择器选择越精确,则其中的样式优先级越高:id选择器指定的样式 >类选择器指定的样式 >元素类型选择器指定的样式所以上例中,#navigator的样式优先级大于.current_block的优先级,及时.current_block是最新添加的,也不起作用。

2. 对于相同类型选择器制定的样式,在样式表文件中,越靠后的优先级越高注意,这里是样式表文件中越靠后的优先级越高,而不是在元素class出现的顺序。比如.class2 在样式表中出现在.class1之后:

/* Css代码 */ 

.class1 {color: black}  

.class2 {color: red}

而某个元素指定class时采用 class="class2 class1"这种方式指定,此时虽然class1在元素中指定时排在class2的后面,但因为在样式表文件中class1处于class2前面,此时仍然是class2的优先级更高,color的属性为red,而非black。

3. 如果要让某个样式的优先级变高,可以使用!important来指定:

/* Css代码  */

.class1 {color: black !important  }  

.class2 {color: red}

此时class将使用black,而非red。

对于一开始遇到的问题,有两种解决方案:

1. 将border从#navigator中拿出来,放到一个class .block中,而.block放.current_block之前:

/* Css代码 */  

#navigator {height: 100%width: 200position: absolute left: 0  }  

.block {border: solid 2 #EEE }

.current_block {border: solid 2 #AE0}

需要莫仁为#navigator元素指定class="block"

2. 使用!important:

/* Css代码  */

#navigator {height: 100%width: 200position: absoluteleft: 0 border: solid 2 #EEE}  

.current_block {border: solid 2 #AE0 !important}

此时无需作任何其他改动即可生效。可见第二种方案更简单一些。

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8"/>

<title>定时弹窗</title>

<style type="text/css">

html,body{

width:100%

height:100%

margin:0

padding:0

}

.box{

width:100%

}

.tc-box{

width:25%

margin:80px auto

border:1px solid #f00

text-align: center

line-height: 150px

}

</style>

</head>

<body>

<div class="box">

<div class="tc-box" id="tc">

<div class="tc-cont">我是弹窗内容</div>

<button id="btn">点击关闭</button>

</div>

</div>

<script type="text/javascript">

var btn = document.getElementById('btn')

btn.onclick = function(){

var tc = document.getElementById('tc')

tc.style.display = 'none'

}

function xs(){

var tc = document.getElementById('tc')

tc.style.display = 'block'

console.log('aaaaaaa')

}

var lia = window.setInterval(xs,5000)

</script>

</body>

</html>

点击关闭之后5秒就会自动弹出

上面的代码有点不太合理,下面代码优化了一下。

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8"/>

<title>定时弹窗</title>

<style type="text/css">

html,body{

width:100%

height:100%

margin:0

padding:0

}

.box{

width:100%

}

.tc-box{

width:35%

margin:80px auto

border:1px solid #f00

text-align: center

line-height: 150px

}

</style>

</head>

<body>

<div class="box">

<div class="tc-box" id="tc">

<div class="tc-cont">我是弹窗内容</div>

<button id="btn">点击关闭5秒后继续弹出</button>

<button id="btn1">点击关闭,不再弹窗</button>

</div>

</div>

<script type="text/javascript">

var btn = document.getElementById('btn')

function xs(){

var tc = document.getElementById('tc')

tc.style.display = 'block'

tc.classList.remove('on')

console.log('aaaaaaa')

}

btn.onclick = function(){

var tc = document.getElementById('tc')

tc.style.display = 'none'

var lia = window.setInterval('xs()',5000)

tc.classList.add('on')//添加一个on类

if(tc.classList.contains('on') == true){ //查询类

function dsq(){

window.clearInterval(lia)

}

window.setTimeout(dsq,5000)

}

}

// 清除定时器

var btn1 = document.getElementById('btn1')

btn1.onclick = function(){

var tc = document.getElementById('tc')

tc.style.display = 'none'

}

</script>

</body>

</html>

因为一直弹窗会对浏览器产生很大的负荷,这里除了添加不再弹窗之外还优化了一下代码。

之前的代码是点击之后开始执行循环函数,但是不停止循环,不管弹窗是否显示的状态都会每5秒执行一次,这样明显不合理,应该是在你关闭弹窗之后5秒才执行。弹窗在显示状态不执行。