<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<标题>yangedie 原创</标题>
<style type="text/css">
#starRate{position: relative; height:30px; width:150px;background:url(http://bbs.blueidea.com/attachment.php?aid=103866&k=1e7383daa69a1095599cf70517321e97&t=1225520759&noupdate=yes¬humb=yes);overflow:hidden; cursor:pointer}
#defaultStars{ width:100%; height:100%; background:url(http://bbs.blueidea.com/attachment.php?aid=103866&k=1e7383daa69a1095599cf70517321e97&t=1225520759&noupdate=yes¬humb=yes) no-repeat}
#starRate ul{list-style:none; margin:0; padding:0;position:absolute;top:0; left:0;}
#starRate li{height:30px; width:30px; float:left; text-indent:-100px; overflow:hidden}
</style>
<script type="text/javascript">
function $(id){return document.getElementById(id);}
window.onload = function(){
//box 为整个结构的最外层容器,由他来捕捉所有事件
var box = $("starRate");
//默认级别,星星的变化都是经过这个层的背景图片的backgroundPosition 变化来实现
var defaultStars = $("defaultStars");
//获得设置的默认级别
var defaultValue = box.getAttribute("default");
var defaultPosition = defaultValue*30 - 150 + "px -30px";
defaultStars.style.backgroundPosition = defaultPosition;
box.onmouseover = function(e){
var src = e?e.target:event.srcElement;
if (src.tagName == "LI"){
var x = -150 + src.innerHTML*30;
defaultStars.style.backgroundPosition = x + "px -30px";
}
}
box.onmouseout = function(e){
defaultStars.style.backgroundPosition = defaultPosition;
}
box.onclick = function(e){
var src = e?e.target:event.srcElement;
if (src.tagName == "LI"){
var x = -150 + src.innerHTML*30;
defaultStars.style.backgroundPosition = x + "px -60px";
//移除事件,让box不在对鼠标动作作出反映
box.onmouseover = box.onmouseout = box.onclick = null;
box.style.cursor = "default";
$("message").innerHTML = "你投下的一票是:" +src.标题 + ",值是:" + src.innerHTML;
}
}
}
</script>
</head>
<body>
<p id="message">请投下你的一票</p>
<div id="starRate" default="3">
<div id="defaultStars"></div>
<ul>
<li 标题="很差">1</li>
<li 标题="不好">2</li>
<li 标题="一般">3</li>
<li 标题="还可以">4</li>
<li 标题="很好">5</li>
</ul>
</div>
</body>
</html>
提示:您可以先更改部分源代码再运行
外层容器(#starRate),背景色为未投票的灰色星星
这个CASE最主要一点根本就是设置一个默认级别的层(#defaultStars),
然后把ul绝对定位在#defaultStars上面, 拷贝内容到剪贴板
源代码:
#defaultStars{ width:100%; height:100%; background:url(starRate.gif) no-repeat}
#starRate ul{list-style:none; margin:0; padding:0;position:absolute;top:0; left:0;}鼠标onmouseover、onmouseout、onclick的事件触发#defaultStars背景图片的backgroundPosition 变化,
背景图片级别移动实现星星数量的变化,垂直移动实现点击后的样式变化
===============================================================
做完了并非很满意,不能自定义星星的数量,于是干脆做了个函数
把星星的数量、默认级别作为参数,而且可以多个地方使用,源代码也更少了
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<标题>yangedie 原创</标题>
<style type="text/css">
.starBox{position: relative;padding:0;height:30px;background:url(http://bbs.blueidea.com/attachment.php?aid=103867&k=d72064f5bf2bd854a2ad94add3b9749a&t=1225520759&noupdate=yes¬humb=yes) left top repeat-x}
.defaultStars{ height:30px; background:url(http://bbs.blueidea.com/attachment.php?aid=103867&k=d72064f5bf2bd854a2ad94add3b9749a&t=1225520759&noupdate=yes¬humb=yes) left -60px repeat-x; }
.starBox a{
position:absolute; left:0; top:0;
height:30px;text-indent:-1000px; overflow:hidden;
background:url(http://bbs.blueidea.com/attachment.php?aid=103867&k=d72064f5bf2bd854a2ad94add3b9749a&t=1225520759&noupdate=yes¬humb=yes) left 100px repeat-x;
outline:none;hide-focus:exPageRankession(this.hideFocus=true);
}
.starBox a:hover{ background-position:left -30px}
</style>
<script type="text/javascript">
function $(id){return document.getElementById(id);}
window.onload = function(){
//参数1,字符串,为想要显示星星打分的外层容器id,不需要什么样式规范等
//参数2,字符串数组,为星星鼠标放上去的提示文本(标题),数组的长度也根本就是星星的数量
//参数3,整数,默认级别,其实那里稍微改动一下,就可以变成显示已打分的平均分
rate("test1",["很差","不好","一般","还可以","很好"],2);
rate("test2",["1级","2级","3级","4级","5级","6级","7级","8级","9级"],5);
}
function rate(divID,标题s,defaultValue){
var size = 标题s.length;
var rateHTML = "<div class='starBox' style='width:" + 30*size + "px'>";
//默认级别层defaultStars,宽度为设置的级别 × 1个星星的宽度
rateHTML += "<div class='defaultStars' style='width:" + 30*defaultValue + "px'></div>";
for (var i=1;i<=size;i++){
var index = size-i; //z-index,递减
rateHTML += "<a href='javascript:void(0)' style='width:" + 30*i + "px;z-index:" + index +"' 标题='" + 标题s[i-1] + "'>" + i + "</a>";
}
rateHTML += "</div>";
$(divID).innerHTML = rateHTML;
//星星点击事件
$(divID).onclick = function(e){
var src = e?e.target:event.srcElement;
if (src.tagName == "A"){
//移除默认级别的层,只是绝对点击之后不需要他了,也不好看
src.parentNode.firstChild.style.display="none";
src.style.backgroundPosition = "left -30px";
//创建一个空的层,覆盖所有星星,让她们不在对鼠标做出反映
var mask = document.createElement("div");
mask.style.cssText = "width:100%;height:100%;position:absolute; left:0; top:0;z-index:99";
src.parentNode.appendChild(mask);
alert("你投票的值是:" + src.innerHTML);
}
}
}
</script>
</head>
<body>
<p>请投下你的一票</p>
<div id="test1"></div>
<p>请投下你的一票</p>
<div id="test2"></div>
</body>
</html>
提示:您可以先更改部分源代码再运行
这个CASE同样也是设置一个默认级别的层(#defaultStars),来显示设置的默认星星
不过这个层不再发生任何变化,直到鼠标点击投票后才display="none"
实现星星变化是经过a标题来实现,
那里把所有的a标题(几个级别,就有几个a标题)
都绝对定位left:0; top:0,也根本就是说她们位置重叠了
从级别最低的1 -> 到级别很高,这些a标题的 z-index 从高到低递减,宽度是从小到大 拷贝内容到剪贴板
源代码:
for (var i=1;i<=size;i++){
var index = size-i; //z-index,递减
rateHTML += "<a href='javascript:void(0)' style='width:" + 30*i + "px;z-index:" + index +"' 标题='" + 标题s[i-1] + "'>" + i + "</a>";
}比如说有5个级别
那么5个a 她们分别是
第一个 a -> z-index:5,宽度是1个星星的宽度
第二个 a -> z-index:4,宽度是2个星星的宽度
第三个 a -> z-index:3,宽度是3个星星的宽度
............
由于这些 a 标题的z-index 和 width 不相同,所以都可以各自反映hover,不互相干扰
咔咔,根本就是这个地方最让我满意,彻底颠覆了我以前在蓝色看到的CASE
都要很多什么 one_star、two_stars、three_stars,
one_star:hover、two_stars:hover、three_stars:hover等样式
CASE打包
分享到:
相关推荐
以下是关于CSS强制换行对齐实现方法的详细知识点: 一、text-justify属性的基本用法 text-justify属性定义了如何在元素的文本中进行两端对齐。它可以接受以下几个值: 1. auto:这个值由浏览器决定如何进行两端...
### CSS文字自动换行 #### 知识点一:CSS自动换行的原理与方法 在Web开发中,实现文本的自动换行是一项常见的需求。本文档主要介绍了如何利用CSS来实现不同浏览器环境下的自动换行功能,并特别关注了对老旧浏览器...
在CSS布局设计中,有效地控制文字的换行和裁剪对于网页的美观性和可读性至关重要。本篇文章将深入探讨CSS中的几个关键属性,包括`word-wrap`、`word-break`和`white-space`,以及如何利用它们来实现各种文字处理效果...
根据给定文件,我们可以了解到如何利用CSS的不同属性实现文字不换行、自动换行和强制换行的三种效果。在页面排版中,合理地应用这些技术可以帮助我们处理各种复杂情况下的文本布局问题。 首先,实现页面文字不换行...
本文将详细讲解CSS中的两个关键属性:`word-wrap` 和 `word-break`,它们可以帮助我们解决自动换行和强制换行的问题。 首先,我们来看`word-wrap`属性。这个属性主要用于控制当一个单词或内容过长,超出了其容器的...
以上介绍的自动换行策略覆盖了从基本的文本换行到复杂布局中的自动调整,通过合理选择和组合这些CSS属性,开发者可以轻松应对不同场景下的自动换行需求,同时确保页面在各种浏览器中都能呈现出一致且美观的效果。...
今天,我们将讨论如何使用 CSS 来控制 TD 中的换行。 强制不换行 在 IE 的 TD 中,如果我们没有指定宽度,使用 `white-space: nowrap;` 可以实现强制不换行。但是,如果我们为 TD 指定了宽度,并且文字中无标点、...
/* 不换行 */ white-space:nowrap;/* 不换行 */ overflow:hidden;/* 内容超出宽度时隐藏超出部分的内容 */ text-overflow:ellipsis;/* 当对象内文本溢出时显示省略标记(…) ;需与overflow:hidden;一起使用。*/ } ...
正常文字的换行(亚洲文字和非亚洲文字)元素拥有默认的white-space:normal,当定义的宽度之后自动换行 html 复制代码代码如下: ”wrap”>正常文字的换行(亚洲文字和非亚洲文字)元素拥有默认的white-space:normal,当...
这是一段很长的文字,它会被自动换行,即使其中包含英文单词thisisaverylongwordthatwillbebroken. ``` 在这段代码中: - `table-layout:fixed;`:设置表格为固定布局模式,确保单元格的宽度不变。 - `word-...
CSS提供了多种方式来实现文字的自动换行。 首先,块级元素如`<div>`和`<p>`在默认情况下,如果容器宽度有限,会自动对文字进行换行处理。对于包含亚洲文字(如中文、日文和韩文)和非亚洲文字(如英文和阿拉伯数字...
### CSS 实现文本不换行、自动换行与强制换行的方法 在Web开发中,对文本进行合理的换行处理是非常重要的,它不仅能够改善页面布局的美观度,还能够提高用户体验。本文将详细介绍如何使用CSS来实现文本的不换行、...
`wordwrap.html`很可能展示了如何通过CSS来实现跨浏览器的字符换行,而`wordwrap.xml`可能涉及XML文档中如何处理长字符串的换行,尽管XML本身并不直接支持CSS样式,但可以通过XSLT转换为HTML并应用CSS样式来实现类似...
正常文字的换行(亚洲文字和非亚洲文字)元素拥有默认的white-space:normal,当定义的宽度之后自动换行 html <div id=wrap>正常文字的换行(亚洲文字和非亚洲文字)元素拥有默认的white-space:normal,当定义</div> css #...
对于div,p等块级元素正常文字的换行(亚洲文字和非亚洲文字)元素拥有默认的white-space:normal,当定义的宽度之后自动换行html< id>正常文字的换行(亚洲文字和非亚洲文字)元素拥有默认的white-space:normal,当定义<...