簡體   English   中英

使用CSS或JS定位單詞中的字母以更改顏色?

[英]Targeting letters within a word to change colour using CSS or JS?

我試圖找出是否有一種更快的方式來寫這樣的事情:

<span class="brandname"><span style="color: #0399f0">Company</span>Name</span> <span class="tagline">TagLine</span> 

應該發生的是,CompanyName被包裝在類brandname ,該brandname是一種特定的字體,粗細和文本修飾,然后名稱的前半部分(公司)應為藍色,而其余部分為默認值(黑色)。 然后,標語被包裝在稱為tagline的類中,該類顯示不同的字體等。

有誰知道我是否可以僅使用類brandname來定位CompanyName的前半部分。 尋找一種方法來保存將來的擊鍵。

我覺得我現在的方式會影響SEO。 我的大部分Google搜索都導致了2012-2014年的鏈接...我的猜測是第n個字母仍然不存在,但值得尋求替代方法。

謝謝你的幫助!

我之前碰到過一樣。 不幸的是,我找不到僅CSS解決方案。

然后我偶然發現了這支筆 這使用jQuery設置第n個選擇器的樣式。

 /* # nth-Everthing made with js. # ##Implemented nth- ## :nth-letter :nth-word ## Implemented last-## :last-word :last-letter ## Implemented first- ## :first-word (faster than :nth-word(1)) ## Things that work ## Add a hover effet to each odd letter .className:nth-letter(odd):hover{} Add a hover effect to :before/:after .className:nth-letter(odd):hover:after{} ## Things that don't and will not work ## .className:before:nth-letter Read more: https://css-tricks.com/a-call-for-nth-everything/ */ (function($) { /*jshint loopfunc:true, onevar:true*/ /*global jQuery:true, browser:true */ $.fn.nthEverything = function() { var styleSuffix = "-nthEvery", cssPattern = /\\s*(.*?)\\s*\\{(.*?)\\}/g, cssComments = /\\s*(?!<\\")\\/\\*[^\\*]+\\*\\/(?!\\")\\s*/gm, partsPattern = /([^:]+)/g, nthPattern = /(\\w*)-(\\w*)(\\((even|odd|[\\+-n\\d]{1,6})\\))?/, wordSpacePattern = /(\\s*[^ ]+\\s*)/g, wordSimplePattern = /\\s+/, count, // To store the style per Selector parsedStyleMap = {}, // CSS for the classes genCSS = '', runPeriods = function(period, className, a, length, offset){ var inBy = 0, sAt = +period, matches, n, zB, zE, bF, eF, oldN = -1; if (period === 'odd' || period === 'even'){ sAt = (period === 'odd') ? 1 : 2; inBy = 2; }else if (/^\\d+$/.test(period)){ sAt = period - offset; inBy = 0; }else{ zB = /^(\\+|-)?\\d+/.exec(period); zE = /(\\+|-)?\\d+$/.exec(period); sAt = (zE)?+(zE[0]):1; inBy = (zB)?+(zB[0]):1; bF = (zB)?zB.length-1:0; eF = (zE)?zE.length:0; if ((period.substr(bF, period.length-eF-bF).charAt(0)) === '-'){ inBy*=-1; } } // Start index at 0; sAt--; for (n=sAt;n<length;n+=inBy){ if (n < 0 || n === oldN) break; if (a[n] === undefined){ a[n] = className; }else{ a[n] += " "+className; } oldN = n; } }, createSpan = function(className, content){ return '<span class="'+className+'">'+content+'</span>'; }, processPeriod = function(classNames, textArray){ var newText = '', n, className; for (n=0;n<classNames.length;n++){ className = classNames[n]; if (className === undefined){ newText += textArray[n]; }else{ newText += createSpan(className, textArray[n]); } } return newText; }, getClassNames = function(parsedStyle, length, pFunc){ var classNames = new Array(length), i; for (i=0;i<parsedStyle.period.length;i++){ runPeriods (pFunc(parsedStyle.period[i], length), parsedStyle.className[i], classNames, length); } return classNames; }, prepareTxt = { word : function(text){return text.match(wordSpacePattern);}, letter: function(text){return text.split('');} }, pseudoFunc = { first : { word : function(period){ if (period === 'firstword') period = '1'; return period; } }, last : { word : function(period, allText, length){ if (period === 'lastword') period = ''+allText.match(wordSpacePattern).length; return period; } }, nth : { letter : function (period){ return period; }, word : function(period){ return period; } } }, loopRecursive = function (contents, allText, parsedStyle){ var func = parsedStyle.func, text, length, classNames, className, cat, period; contents.each(function(){ if (this.nodeType === 1){ loopRecursive($(this).contents(), allText, parsedStyle); }else if(this.nodeType === 3){ text = prepareTxt[func](this.nodeValue); length = text.length; classNames = new Array(length); for (var i=0;i<parsedStyle.period.length;i++){ className = parsedStyle.className[i]; cat = parsedStyle.cat[i]; period = parsedStyle.period[i]; runPeriods (pseudoFunc[cat][func](period, allText, length), className, classNames, length, count); } $(this).replaceWith( processPeriod(classNames, text) ); count += length; } }); return count; }, parse = function(css) { var matches, nthMatch, nthFound = false, i, thisPeriod, selectors, style, selector, parts, nth, pseudo, cat, func, period, normSelector, ident, className; css = css.replace(cssComments, '').replace(/\\n|\\r/g, ''); while ((matches = cssPattern.exec(css)) !== null){ selectors = matches[1].split(','); style = matches[2]; for (i=0;i<selectors.length;i++){ selector = selectors[i]; parts = selector.match(partsPattern); selector = parts.shift(); nth = parts.shift(); pseudo = (parts.length !== 0)?':'+parts.join(':'):''; if ((nthMatch = nthPattern.exec(nth)) !== null){ nthFound = true; cat = nthMatch[1]; func = nthMatch[2]; period = (nthMatch[4]!==undefined)?nthMatch[4]:cat+func; normSelector = selector.replace('#','id').replace('.', 'class'); ident = normSelector + func; className = normSelector + cat + func + period + styleSuffix; if ((thisPeriod = parsedStyleMap[ident]) !== undefined){ thisPeriod.className.push(className); thisPeriod.period.push(period); thisPeriod.style.push(style); thisPeriod.pseudo.push(pseudo); thisPeriod.cat.push(cat); }else{ parsedStyleMap[ident] = {element : selector, func : func, className : [className], cat : [cat], period : [period], style :[style], pseudo : [pseudo]}; } }else if (nthFound === true){ genCSS += selector+"{"+style+"}"; // Fix chained selectors. } } } }, applyStyles = function(){ var id, parsedStyle, func, b; for (id in parsedStyleMap){ parsedStyle = parsedStyleMap[id]; func = parsedStyle.func; $(parsedStyle.element).each(function(){ var $this = $(this); count = 0; // Set to 0. We use a recursive Loop here loopRecursive($this.contents(), $this.text(), parsedStyle); }); for (b=0;b<parsedStyle.className.length;b++){ genCSS += "."+parsedStyle.className[b]+parsedStyle.pseudo[b]+"{"+parsedStyle.style[b]+"}"; } } $('<style>' + genCSS + '</style>').appendTo('head'); }; // Build CSS Rules $('link[rel=stylesheet],style').each(function() { if ($(this).is('link')) $.get(this.href).success(function(css) { parse(css); }); else parse($(this).text()); }); // Apply Styles. applyStyles(); }; })(jQuery); $.fn.nthEverything(); 
 .brandname2:nth-word(1){ color: red; font-size: 25px; } .brandname2:nth-word(2) { color: green; font-size: 20px; } .brandname2 { color: purple; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> </ br> <div class="brandname2">Company name Tagline</div> 

只能執行類似以下CSS的操作,但是在這種情況下,您必須將想要的內容以另一種顏色添加到CSS部分:

HTML:

<span class="brandname">Name</span> <span class="tagline">TagLine</span>

CSS:

.brandname::before {
  content: "Company ";
  color: #0399f0;
}

我自己還是會比較喜歡使用2個span元素的解決方案。

工作提琴: https : //jsfiddle.net/xeyqr4w9/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM