标签:des style class code java http
What I am looking for:
A way to apply styling to one HALF of a character. (In this case, half the letter being transparent)
我正在寻找:
一种方法为半个字符应用样式。(在这种情况下,一半的字母是透明的)
What I have currently searched for and tried (With no luck):
Below is an example of what I am trying to obtain.
我目前已经搜索并尝试的(不走运):
以下是我尝试实现的一个例子:

Does a CSS or JavaScript solution exists for this or am I going to have to resort to images? I would prefer not to go the image route as this text will end up being generated dynamically.
这个是否有一个CSS或者JavaScript的解决方法存在,还是我必须采用图片的方法?我不愿意采用图片的方法,因为文本将最终是动态生成的。
回答:
Feel
free to fork and improve.

演示: http://jsfiddle.net/pd9yB/817/
This works on any dynamic text, or a single character, and is all automated. All you need to do is add a class on the target text and the rest is taken care of.
这种方法适用于任何动态文本或单个字符,并且都是自动适用的。所有你需要做的就是在目标文本上添加一个class,剩下的就解决了。
Also, the accessibility of the original text is preserved for screen readers for the blind or visually impaired.
同时,保留了原文的可访问性,可以被盲人或视障人士使用的屏幕阅读器识别。
Explanation for a single character:
Pure CSS. All you need to do is to
apply .halfStyle class to each element that contains the
character you want to be half-styled.
For each span element containing the character, you can create a data
attribute, for example here data-content="X", and on the
pseudo element use content: attr(data-content); so
the .halfStyle:before class will be dynamic and you won‘t
need to hard code it for every instance.
单个字符的说明:
纯CSS。所有你需要做的就是把.halfStyle class用在每个你想要渲染一半样式字符的元素上。
对于每个包含字符的span元素,你可以添加一个data属性,比如data-content="X",并且在伪元素上使用content:attr(data-content);这样,.halfStyle:before class将会是动态的,你不需要为每个实例进行硬编码
Explanation for any text:
Simply add textToHalfStyle class to the element
containing the text.
任意文本说明:
只需添加textToHalfStyle class到包含文本的元素上。
CSS:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
.halfStyle { position:relative; display:inline-block; font-size:80px; /* or any font size will work */ color: black; /* or transparent, any color */ overflow:hidden; white-space: pre; /* to preserve the spaces from collapsing */}.halfStyle:before { display:block; z-index:1; position:absolute; top:0; left:0; width: 50%; content: attr(data-content); /* dynamic content for the pseudo element */ overflow:hidden; color: #f00;} |
HTML
|
1
2
3
4
5
6
7
8
9
10 |
<p>Single Characters:</p><span class="halfStyle"
data-content="X">X</span><span class="halfStyle"
data-content="Y">Y</span><span class="halfStyle"
data-content="Z">Z</span><span class="halfStyle"
data-content="A">A</span><hr/><p>Automated:</p><span class="textToHalfStyle">Half-style, please.</span> |
To make it automated, simply add textToHalfStyle class
to the element containing the text.
让它自动生效,只要添加 textToHalfStyle class到包含文本的元素上。
jQuery for automated mode:
jQuery 自动模式:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 |
jQuery(function($) { var
text, chars, $el, i, output; // Iterate over all class occurences $(‘.textToHalfStyle‘).each(function(idx, el) { $el = $(el); text = $el.text(); chars = text.split(‘‘); // Set the screen-reader text $el.html(‘<span style="position: absolute !important;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);">‘
+ text + ‘</span>‘); // Reset output for appending output = ‘‘; // Iterate over all chars in the text for
(i = 0; i < chars.length; i++) { // Create a styled element for each character and append to container output += ‘<span aria-hidden="true" data-content="‘
+ chars[i] + ‘">‘
+ chars[i] + ‘</span>‘; } // Write to DOM only once $el.append(output); });}); |
演示: http://jsfiddle.net/pd9yB/819/

With this solution you can style left and right parts, individually and independently.
使用这种方法你可以分别单独的渲染左边和右边部分。
Everything is the same, only more advanced CSS does the magic.
一切都是相同的,只是更高级的CSS在发挥作用。
演示: http://jsfiddle.net/pd9yB/819/
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 |
.halfStyle { position:relative; display:inline-block; font-size:80px; /* or any font size will work */ color: transparent; /* hide the base character */ overflow:hidden; white-space: pre; /* to preserve the spaces from collapsing */}.halfStyle:before { /* creates the left part */ display:block; z-index:1; position:absolute; top:0; width: 50%; content: attr(data-content); /* dynamic content for the pseudo element */ overflow:hidden; pointer-events: none; /* so the base char is selectable by mouse */ color: #f00; /* for demo purposes */ text-shadow: 2px -2px 0px #af0; /* for demo purposes */}.halfStyle:after { /* creates the right part */ display:block; direction: rtl; /* very important, will make the width to start from right */ position:absolute; z-index:2; top:0; left:50%; width: 50%; content: attr(data-content); /* dynamic content for the pseudo element */ overflow:hidden; pointer-events: none; /* so the base char is selectable by mouse */ color: #000; /* for demo purposes */ text-shadow: 2px 2px 0px #0af; /* for demo purposes */} |
Now that we know what is possible, let‘s create some variations.
现在我们知道什么是可能的,让我们来添加一些花样。

|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 |
.halfStyle { position:relative; display:inline-block; font-size:80px; /* or any font size will work */ color: transparent; /* hide the base character */ overflow:hidden; white-space: pre; /* to preserve the spaces from collapsing */}.halfStyle:before { /* creates the top part */ display:block; z-index:2; position:absolute; top:0; height: 50%; content: attr(data-content); /* dynamic content for the pseudo element */ overflow:hidden; pointer-events: none; /* so the base char is selectable by mouse */ color: #f00; /* for demo purposes */ text-shadow: 2px -2px 0px #af0; /* for demo purposes */}.halfStyle:after { /* creates the bottom part */ display:block; position:absolute; z-index:1; top:0; height: 100%; content: attr(data-content); /* dynamic content for the pseudo element */ overflow:hidden; pointer-events: none; /* so the base char is selectable by mouse */ color: #000; /* for demo purposes */ text-shadow: 2px 2px 0px #0af; /* for demo purposes */} |

|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 |
.halfStyle { /* base char and also the right 1/3 */ position:relative; display:inline-block; font-size:80px; /* or any font size will work */ color: transparent; /* hide the base character */ overflow:hidden; white-space: pre; /* to preserve the spaces from collapsing */ color: #f0f; /* for demo purposes */ text-shadow: 2px 2px 0px #0af; /* for demo purposes */}.halfStyle:before { /* creates the left 1/3 */ display:block; z-index:2; position:absolute; top:0; width: 33.33%; content: attr(data-content); /* dynamic content for the pseudo element */ overflow:hidden; pointer-events: none; /* so the base char is selectable by mouse */ color: #f00; /* for demo purposes */ text-shadow: 2px -2px 0px #af0; /* for demo purposes */}.halfStyle:after { /* creates the middle 1/3 */ display:block; z-index:1; position:absolute; top:0; width: 66.66%; content: attr(data-content); /* dynamic content for the pseudo element */ overflow:hidden; pointer-events: none; /* so the base char is selectable by mouse */ color: #000; /* for demo purposes */ text-shadow: 2px 2px 0px #af0; /* for demo purposes */} |

|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 |
.halfStyle { /* base char and also the bottom 1/3 */ position:relative; display:inline-block; font-size:80px; /* or any font size will work */ color: transparent; overflow:hidden; white-space: pre; /* to preserve the spaces from collapsing */ color: #f0f; text-shadow: 2px 2px 0px #0af; /* for demo purposes */}.halfStyle:before { /* creates the top 1/3 */ display:block; z-index:2; position:absolute; top:0; height: 33.33%; content: attr(data-content); /* dynamic content for the pseudo element */ overflow:hidden; pointer-events: none; /* so the base char is selectable by mouse */ color: #f00; /* for demo purposes */ text-shadow: 2px -2px 0px #fa0; /* for demo purposes */}.halfStyle:after { /* creates the middle 1/3 */ display:block; position:absolute; z-index:1; top:0; height: 66.66%; content: attr(data-content); /* dynamic content for the pseudo element */ overflow:hidden; pointer-events: none; /* so the base char is selectable by mouse */ color: #000; /* for demo purposes */ text-shadow: 2px 2px 0px #af0; /* for demo purposes */} |

|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 |
body{ background-color: black;}.textToHalfStyle{ display:block; margin: 200px 0
0 0; text-align:center;}.halfStyle { font-family: ‘Libre Baskerville‘, serif; position:relative; display:inline-block; width:1; font-size:70px; color: black; overflow:hidden; white-space: pre; text-shadow: 1px 2px 0
white;}.halfStyle:before { display:block; z-index:1; position:absolute; top:0; width: 50%; content: attr(data-content); /* dynamic content for the pseudo element */ overflow:hidden; color: white;} |

|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 |
.halfStyle { position: relative; display: inline-block; font-size: 68px; color: rgba(0, 0, 0, 0.8); overflow: hidden; white-space: pre; transform: rotate(4deg); text-shadow: 2px 1px 3px rgba(0, 0, 0, 0.3);}.halfStyle:before { /* creates the left part */ display: block; z-index: 1; position: absolute; top: -0.5px; left: -3px; width: 100%; content: attr(data-content); overflow: hidden; pointer-events: none; color: #FFF; transform: rotate(-4deg); text-shadow: 0px 0px 1px #000;} |
Customized different Half-Style style-sets can be used on desired elements on the same page. You can define multiple style-sets and tell the plugin which one to use.
定制不同的Half-Style样式集可以用在同一个页面的所需元素上。你可以定义多个样式集并告诉插件要用哪一个。
The plugin uses data
attribute data-halfstyle="[-CustomClassName-]" on the
target .textToHalfStyle elements and makes all the
necessary changes automatically.
插件在目标.textToHalfStyle元素上使用data属性data-halfstyle="[-CustomClassName-]",所有都会自动改变。
So, simply on the element containing the text
add textToHalfStyle class and data
attribute data-halfstyle="[-CustomClassName-]". The plugin
will do the rest of the job.
所以,只要含有文本的元素添加了textToHalfStyle class和data属性 data-halfstyle="[-CustomClassName-]",插件将完成剩下的工作。

|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 |
jQuery(function($) { var
halfstyle_text, halfstyle_chars, $halfstyle_el, halfstyle_i, halfstyle_output, halfstyle_style; // Iterate over all class occurrences $(‘.textToHalfStyle‘).each(function(idx, halfstyle_el) { $halfstyle_el = $(halfstyle_el); halfstyle_style = $halfstyle_el.data(‘halfstyle‘); halfstyle_text = $halfstyle_el.text(); halfstyle_chars = halfstyle_text.split(‘‘); // Set the screen-reader text $halfstyle_el.html(‘<span style="position: absolute !important;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);">‘
+ halfstyle_text + ‘</span>‘); // Reset output for appending halfstyle_output = ‘‘; // Iterate over all chars in the text for
(halfstyle_i = 0; halfstyle_i < halfstyle_chars.length; halfstyle_i++) { // Create a styled element for each character and append to container halfstyle_output += ‘<span aria-hidden="true" data-content="‘
+ halfstyle_chars[halfstyle_i] + ‘">‘
+ halfstyle_chars[halfstyle_i] + ‘</span>‘; } // Write to DOM only once $halfstyle_el.append(halfstyle_output); });}); |
Also the CSS style-sets‘ class definitions match
the [-CustomClassName-] part mentioned above and is
chained to .halfStyle, so we will
have .halfStyle.[-CustomClassName-]
此外,CSS样式集class的定义匹配上述的 [-CustomClassName-] 部分,并且链到.halfStyle,因此我们将有.halfStyle.[-CustomClassName-]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115 |
/* start half-style hs-base */ .halfStyle.hs-base { position:relative; display:inline-block; font-size:80px; /* or any font size will work */ overflow:hidden; white-space: pre; /* to preserve the spaces from collapsing */ color: #000; /* for demo purposes */}.halfStyle.hs-base:before { display:block; z-index:1; position:absolute; top:0; width: 50%; content: attr(data-content); /* dynamic content for the pseudo element */ pointer-events: none; /* so the base char is selectable by mouse */ overflow:hidden; color: #f00; /* for demo purposes */} /* end half-style hs-base *//* start half-style hs-horizontal-third */.halfStyle.hs-horizontal-third { /* base char and also the bottom 1/3 */ position:relative; display:inline-block; font-size:80px; /* or any font size will work */ color: transparent; overflow:hidden; white-space: pre; /* to preserve the spaces from collapsing */ color: #f0f; text-shadow: 2px 2px 0px #0af; /* for demo purposes */}.halfStyle.hs-horizontal-third:before { /* creates the top 1/3 */ display:block; z-index:2; position:absolute; top:0; height: 33.33%; content: attr(data-content); /* dynamic content for the pseudo element */ overflow:hidden; pointer-events: none; /* so the base char is selectable by mouse */ color: #f00; /* for demo purposes */ text-shadow: 2px -2px 0px #fa0; /* for demo purposes */}.halfStyle.hs-horizontal-third:after { /* creates the middle 1/3 */ display:block; position:absolute; z-index:1; top:0; height: 66.66%; content: attr(data-content); /* dynamic content for the pseudo element */ overflow:hidden; pointer-events: none; /* so the base char is selectable by mouse */ color: #000; /* for demo purposes */ text-shadow: 2px 2px 0px #af0; /* for demo purposes */}/* end half-style hs-horizontal-third *//* start half-style hs-PeelingStyle, by user SamTremaine on Stackoverflow.com */.halfStyle.hs-PeelingStyle { position: relative; display: inline-block; font-size: 68px; color: rgba(0, 0, 0, 0.8); overflow: hidden; white-space: pre; transform: rotate(4deg); text-shadow: 2px 1px 3px rgba(0, 0, 0, 0.3);}.halfStyle.hs-PeelingStyle:before { /* creates the left part */ display: block; z-index: 1; position: absolute; top: -0.5px; left: -3px; width: 100%; content: attr(data-content); overflow: hidden; pointer-events: none; color: #FFF; transform: rotate(-4deg); text-shadow: 0px 0px 1px #000;}/* end half-style hs-PeelingStyle *//* start half-style hs-KevinGranger, by user KevinGranger on StackOverflow.com*/.textToHalfStyle.hs-KevinGranger { display:block; margin: 200px 0
0 0; text-align:center;}.halfStyle.hs-KevinGranger { font-family: ‘Libre Baskerville‘, serif; position:relative; display:inline-block; width:1; font-size:70px; color: black; overflow:hidden; white-space: pre; text-shadow: 1px 2px 0
white;}.halfStyle.hs-KevinGranger:before { display:block; z-index:1; position:absolute; top:0; width: 50%; content: attr(data-content); /* dynamic content for the pseudo element */ overflow:hidden; color: white;}/* end half-style hs-KevinGranger |
HTML:
|
1
2
3
4
5
6
7
8
9
10
11
12 |
<p> <span class="textToHalfStyle"
data-halfstyle="hs-base">Half-style, please.</span></p><p> <span class="textToHalfStyle"
data-halfstyle="hs-horizontal-third">Half-style, please.</span></p><p> <span class="textToHalfStyle"
data-halfstyle="hs-PeelingStyle">Half-style, please.</span></p><p style="background-color:#000;"> <span class="textToHalfStyle"
data-halfstyle="hs-KevinGranger">Half-style, please.</span></p> |
为半个字符应用CSS样式可能吗?,布布扣,bubuko.com
标签:des style class code java http
原文地址:http://www.cnblogs.com/soullover/p/3771969.html