我要找的是:

一种为角色的一半设置样式的方法。(在这种情况下,一半的字母是透明的)

我目前搜索并尝试的内容(运气不佳):

半个字符/字母的样式设置方法使用CSS或JavaScript设置字符的部分样式将CSS应用于50%的字符

下面是我试图获得的一个例子。

对此,是否存在CSS或JavaScript解决方案,还是我必须求助于图像?我宁愿不走图像路线,因为文本最终将动态生成。


更新:

既然很多人都问我为什么要塑造一个角色的一半,这就是为什么。我所在的城市最近花了25万美元为自己定义了一个新的“品牌”。这个标志就是他们想出的。许多人抱怨网站的简单和缺乏创造力,并继续这样做。我的目标是把这个网站当成一个笑话。输入“哈利法克斯”,你就会明白我的意思。


当前回答

像这样的短文本怎么样?

如果你使用循环,用JavaScript重复字符,它甚至可以处理更长的文本。总之,结果是这样的:

邮政编码{位置:相对;显示:内联块;字体大小:60px;颜色:红色;}p.char:之前{位置:绝对;内容:属性(字符);宽度:50%;溢出:隐藏;颜色:黑色;}<p class=“char”char=“S”>S</p><p class=“char”char=“t”>t</p><p class=“char”char=“a”>a</p><p class=“char”char=“c”>c</p><p class=“char”char=“k”>k</p><p class=“char”char=“o”>o</p><p class=“char”char=“v”>v</p><p class=“char”char=“e”>e</p><p class=“char”char=“r”>r</p><p class=“char”char=“f”>f</p><p class=“char”char=“l”>l</p><p class=“char”char=“o”>o</p><p class=“char”char=“w”>w</p>

其他回答

我能得到的最接近:

$(函数){$('span').width($('span').wwidth()/2);$('span:nth child(2)').css('text-indent',-$('span').width());});正文{字体系列:arial;}跨度{显示:内联块;溢出:隐藏;}跨度:第n个子级(2){颜色:红色;}<script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js“></script><span>X</span><span>X</span>

演示:http://jsfiddle.net/9wxfY/2/

以下是仅使用一个跨度的版本:http://jsfiddle.net/9wxfY/4/

利用背景剪辑的一个不错的解决方案:文本支持:http://jsfiddle.net/sandro_paganotti/wLkVt/

span{
   font-size: 100px;
   background: linear-gradient(to right, black, black 50%, grey 50%, grey);
   background-clip: text;
   -webkit-text-fill-color: transparent;
}


JSFiddle演示

我们将只使用CSS伪选择器来实现!

该技术将使用动态生成的内容和不同的字体大小和宽度。

HTML格式:

<div class='split-color'>Two is better than one.</div>

CSS:

.split-color > span {
    white-space: pre-line;
    position: relative;
    color: #409FBF;
}

.split-color > span:before {
    content: attr(data-content);
    pointer-events: none;  /* Prevents events from targeting pseudo-element */
    position: absolute;
    overflow: hidden;
    color: #264A73;
    width: 50%;
    z-index: 1;
}

要包装动态生成的字符串,可以使用如下函数:

// Wrap each letter in a span tag and return an HTML string
// that can be used to replace the original text
function wrapString(str) {
  var output = [];
  str.split('').forEach(function(letter) {
    var wrapper = document.createElement('span');
    wrapper.dataset.content = wrapper.innerHTML = letter;

    output.push(wrapper.outerHTML);
  });

  return output.join('');
}

// Replace the original text with the split-color text
window.onload = function() {
    var el  = document.querySelector('.split-color'),
        txt = el.innerHTML;
    
    el.innerHTML = wrapString(txt);
}

是的,您可以只使用一个字符和CSS:

http://jsbin.com/rexoyice/1/

h1小时{显示:内联块;边距:0;/*用于演示片段*/线条高度:1em;/*用于演示片段*/字体系列:helvetica,arial,sans-serif;字号:粗体;字体大小:300px;背景:线性梯度(向右,#7db9e8 50%,#1e5799 50%);背景剪辑:文本;-webkit文本填充颜色:透明;}<h1>X(X)</h1>

从视觉上看,所有使用两个字符的示例(无论是通过JS、CSS伪元素还是HTML)看起来都很好,但请注意,所有这些都会向DOM添加内容,这可能会导致可访问性——以及文本选择/剪切/粘贴问题。

.halfStyle {
    position:relative;
    display:inline-block;
    font-size:68px; /* or any font size will work */
    color: rgba(0,0,0,0.8); /* or transparent, any color */
    overflow:hidden;
    white-space: pre; /* to preserve the spaces from collapsing */
    transform:rotate(4deg);
    -webkit-transform:rotate(4deg);
    text-shadow:2px 1px 3px rgba(0,0,0,0.3);
}
.halfStyle:before {
    display:block;
    z-index:1;
    position:absolute;
    top:-0.5px;
    left:-3px;
    width: 100%;
    content: attr(data-content); /* dynamic content for the pseudo element */
    overflow:hidden;
    color: white;
    transform:rotate(-4deg);
    -webkit-transform:rotate(-4deg);
    text-shadow:0 0 1px black;

}

http://experimental.samtremaine.co.uk/half-style/

你可以把这段代码塞进各种有趣的事情中——这只是我和同事昨晚想出的一个实现。