Javascript 使用CSS设置跨距中第n个字母的样式
我有:Javascript 使用CSS设置跨距中第n个字母的样式,javascript,css,styling,pseudo-class,Javascript,Css,Styling,Pseudo Class,我有: 我知道我可以使用javascript解析字符串,用周围的span标记替换字母,并设置标记样式。但是,字符串每秒钟都会更新一次,而且解析似乎常常需要大量的资源。使用javascript和jQuery进行解析可能是一种冗长的方法,但这里有一个可能的解决方案 将h、m和s与原始字符串分开 <span id="string">12h12m12s</span> 这是一本书 性能方面,我建议使用spanhell #string{font-size:1.2em} #strin
我知道我可以使用javascript解析字符串,用周围的
span
标记替换字母,并设置标记样式。但是,字符串每秒钟都会更新一次,而且解析似乎常常需要大量的资源。使用javascript和jQuery进行解析可能是一种冗长的方法,但这里有一个可能的解决方案
将h
、m
和s
与原始字符串分开
<span id="string">12h12m12s</span>
这是一本书 性能方面,我建议使用
span
hell
#string{font-size:1.2em}
#string > span{font-size:0.8em}
这说明了缓存选择器的基本思想。通过不重新创建元素,您还可以获得良好的性能提升
尽管如此,对于如此简单的事情来说,一秒钟一次并不是很繁重的工作(除非你的页面中有数百个时钟)。这只会将字母按跨距排列,并给它们提供相同的类。也许值得一提lol:-) JavaScript:
//cache number container element references
var h = document.getElementById('h'),
m = document.getElementById('m'),
s = document.getElementById('s'),
//IE feature detection
textProp = h.textContent !== undefined ? 'textContent' : 'innerText';
function tick() {
var date = new Date(),
hours = date.getHours(),
mins = date.getMinutes(),
secs = date.getSeconds();
h[textProp] = hours < 10 ? '0'+hours : hours;
m[textProp] = mins < 10 ? '0'+mins : mins;
s[textProp] = secs < 10 ? '0'+secs : secs;
}
tick();
setInterval(tick, 1000);
使用CSS的简单解决方案,并使用span标记包装每个字符:
.smaller {
font-size: 10px;
}
#文本跨度:第n个子项(2){
颜色:#ff00ff;
}
#文本跨度:第n个子项(5){
颜色:#00ffff;
}
#正文{
字体大小:20px;
}
你好
因为这样的东西根本不存在。您可能已经从一个建议其实现的博客上读到了它-请参阅并向下滚动至“::nth-letter()/::last-letter()/::nth-last-letter()”-是的,您可以通过JS轻松实现这一点。@Fabriciomatté,我有一种感觉。。。你能推荐另一种方法吗(我假设是js)它足够高效,可以每秒运行一次吗?也许我用JavaScript创建了一个时钟,它使用span元素来包含小时、分钟、秒。如果给这些span元素中的每个元素一个唯一的id属性,就可以简单地使用JavaScript来定位和更新该元素的内容。性能非常好,您可以使用CSS为每个组件设置不同的样式。我的意思是,在循环之前:
var seconds=document.getElementById('seconds')
然后在循环中使用seconds
而不是document.getElementById('seconds')
。这里有一篇更详细的文章:这是对答案最有趣的介绍实际上,您可以删除整个for循环,并将最后一行替换为:str.innerHTML=str.innerHTML.replace(/([hms])/gi,$1');然后css变为:*#字符串span{font size:10px}如果要单独设置样式,请分别使用此css:*#字符串span:n,类型为(n){…css…},其中n是跨度的序号,而…css。。。每一个都是你想要的css
//cache number container element references
var h = document.getElementById('h'),
m = document.getElementById('m'),
s = document.getElementById('s'),
//IE feature detection
textProp = h.textContent !== undefined ? 'textContent' : 'innerText';
function tick() {
var date = new Date(),
hours = date.getHours(),
mins = date.getMinutes(),
secs = date.getSeconds();
h[textProp] = hours < 10 ? '0'+hours : hours;
m[textProp] = mins < 10 ? '0'+mins : mins;
s[textProp] = secs < 10 ? '0'+secs : secs;
}
tick();
setInterval(tick, 1000);
var str = document.getElementById('string'),
chars = str.innerHTML.split('');
for (var i = 0; i < chars.length; i++) {
if (chars[i].match(/[hms]/)) {
chars[i] = "<span class='smaller'>" + chars[i] + "</span>";
}
}
str.innerHTML = chars.join('');
<body>
<span id="string">12h12m12s</span>
</body>
.smaller {
font-size: 10px;
}
#text span:nth-child(2) {
color: #ff00ff;
}
#text span:nth-child(5) {
color: #00ffff;
}
#text {
font-size: 20px;
}
<span id="text"><span>H</span><span>e</span><span>l</span><span>l</span><span>o</span></span>