2016-12-21 32 views
10

當我選擇文字時,背景顏色變爲黃色。如何將背景色僅應用於選擇文本的一半?

body p::selection { 
    background: #fcf113; 
    color: #000; 
    display: none; 
} 
body p::-moz-selection { 
    background: #fcf113; 
} 

enter image description here

不過,我希望它出現這樣的。

enter image description here

是否有可能或不?

+1

我想你可以創建用於背景的梯度? – AsheraH

+0

我試過不支持這個':: selection'屬性。如果你嘗試請給我一個樣本。 – TAM

+0

學習一些僞選擇器,比如':after'和':before'。 – Mardzis

回答

4

謝謝你毀了,至少我一天的一個小時,但我居然發現一個純CSS的解決方案。雖然它並不真實,它涉及很多僞造,但嘿:沒有JavaScript!

我們基本上使用一個data-content屬性,其內容與跨度保持相同,然後將其複製到顯示它的分層:after元素。然後,我們隱藏原始文本並將50%的高度應用於after元素,這樣背景色只能應用於下半部分。

h1 { 
 
    position: relative; 
 
    color: #FFF; 
 
} 
 

 
h1:after { 
 
    content: attr(data-content); 
 
    position: absolute; 
 
    color: #000; 
 
    top: 0; 
 
    left: 0; 
 
    width: 100%; 
 
    height: 50%; 
 
    background-color: #FFF; 
 
} 
 

 
h1::selection { 
 
    background: #fcf113; 
 
}
<h1 data-content="Hello world!">Hello world!</span>

此基礎上,用戶@chrona使這個真可愛工作版本:

var paragraph = $('p'); 
 
var words  = paragraph.text().split(" "); 
 

 
paragraph.empty(); 
 

 
$.each(words, function(i, v) { 
 
    paragraph.append('<span data-word="' + v + '"> ' + v + ' </span>'); 
 
});
p { 
 
    background: white; 
 
} 
 

 
body { 
 
    background: white; 
 
} 
 

 
span { 
 
    position: relative; 
 
    font-size: 1.25rem; 
 
    line-height: 1.4; 
 
} 
 

 
span::after { 
 
    background: white; 
 
    content: attr(data-word); 
 
    display: block; 
 
    height: 75%; 
 
    left: 0; 
 
    padding-top: 0.14em; 
 
    position: absolute; 
 
    pointer-events: none; 
 
    overflow: hidden; 
 
    top: -0.28em; 
 
    width: 100%; 
 
} 
 

 
span::selection { 
 
    background: #fcf113; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p> 
 
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. 
 
</p>

+0

我想在一個段落上使用它,你必須用''來包裝每個單詞,以使它與線條一起工作休息?無論如何,好的解決方案! – chrona

+0

骯髒,但很酷。對於':: selection'效果可能太多了,但你絕對交付! –

+0

@chrona你可以逃脫
的iirc,讓我試驗一下;)。 – Roberrrt

3

這是不可能單獨CSS(不包括黑客),目前只能風格::selection一小套的屬性一樣colorbackground-colorcursoroutlinetext-decorationtext-shadow

其他背景屬性將被忽略,所以使用漸變是不可能的。


如果你真的需要爲你描述可以使用JavaScript來獲取選定的文本,將它包裝與<span>和風格,用CSS的顏色。

對於小句子或頭條新聞,請查看Roberrrts CSS only answer

來源:
https://developer.mozilla.org/en-US/docs/Web/CSS/::selection
https://drafts.csswg.org/css-pseudo-4/#highlight-styling

+1

如果有一個真正的CSS方法來解決這個問題,會很酷,讓我檢查一下。 – Roberrrt

+0

噢,是的,它*是*可以單獨使用CSS!現在發佈我的答案。這只是非常混亂:)。 – Roberrrt

-1

我認爲,你可以用漸變效果做到這一點:

#grad1 { 
    height: 200px; 
    background: -webkit-linear-gradient(rgba(255,255,0,0) 70%, rgba(255,255,0,1)); /* For Safari 5.1 to 6.0 */ 
    background: -o-linear-gradient(rgba(255,255,0,0) 70%, rgba(255,255,0,1)); /* For Opera 11.1 to 12.0 */ 
    background: -moz-linear-gradient(rgba(255,255,0,0) 70%, rgba(255,255,0,1)); /* For Firefox 3.6 to 15 */ 
    background: linear-gradient(rgba(255,255,0,0) 70%, rgba(255,255,0,1)); /* Standard syntax (must be last) */ 
} 
+0

背景漸變不適用於':: selection' – Roberrrt

相關問題