2016-02-22 15 views
9

Birden çok arka plan rengiyle tek bir öğeye sahip olmak isterim? Analog ait:Sadece css ile birden fazla arka plan renkleri vardır

<div class="multiplebackground"> 
    <div style="background-color:red"></div> 
    <div style="background-color:green"></div> 
    <div style="background-color:blue"></div> 
</div> 

ama bazı metin içeriği ile sadece 1 div varsa:

<div class="multiplebackground"> 
    ... 
</div> 

.multiplebackground { 
    ??? 
} 

Yoksa mümkün değil mi?

+2

daha iyi nasıl görünmesi gerektiği açıklayın: Burada

bunun bir örneğidir. Anladığım kadarıyla, tanımlanan son renk başkalarının üzerine yazacaktı, bu yüzden ne anlamı var. –

+2

@alexey Gradyanlar mı demek istediniz? – Prashanth

+0

http: // stackoverflow kopyası olabilir.com/questions/32607835/üç yatay çizgili-in-css? – fcalderan

cevap

6

Sen gradyanlar ile bunu başarabilirsiniz. Sadece bir renkten aynı renge harmanlamanız ve daha sonra sıfır piksel boyunca bir sonraki renkle karıştırmanız gerekir.

.Neapolitan { 
 
    height: 200px; 
 
    width: 200px; 
 
    background: linear-gradient(to bottom, red 0%, red 33%, green 33%, green 66%, blue 66%, blue 100%); 
 
}
<div class="Neapolitan"> 
 

 
</div>

2

doğrusal gradyan olabilir

http://www.w3schools.com/css/css3_gradients.asp

body, html { 
 
margin: 0; 
 
    padding: 0; 
 
} 
 

 
    #grad { 
 
background: red; /* For browsers that do not support gradients */ 
 
background: -webkit-linear-gradient(red, yellow, green); /* For Safari 5.1 to 6.0 */ 
 
background: -o-linear-gradient(red, yellow, green); /* For Opera 11.1 to 12.0 */ 
 
background: -moz-linear-gradient(red, yellow, green); /* For Firefox 3.6 to 15 */ 
 
background: linear-gradient(red, yellow, green); /* Standard syntax */ 
 
}
<div id="grad"></div>

+0

_modern browers_'ın çoğunun öneklere ihtiyacı yoktur. Sadece standart sözdizimi düzgün çalışıyor. [Önekleri kurtulun] (http://lea.verou.me/2013/04/can-we-get-rid-of-gradient-prefixes/) – Prashanth

+0

Evet ama eski tarayıcılar hala çok kullanılan – Michael

+0

Evet, kabul ediyorum. Ama sayılar çok daha az. Önceden belirlenmiş tarayıcılar, yukarıda bahsedilen makalede belirtildiği gibi toplam küresel kullanıcı tabanının% 0,25'i oranındadır. Diğerleri de öyle. Kodumun düzgün görünmesini istediğim gibi bunu tercih ederim :) – Prashanth

3

Sen ile yapabilirsiniz linear-gradient

body, html { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
.multiplebackground { 
 
    min-height: 100vh; 
 
    background: linear-gradient(to bottom, red 0%, red 33%, green 33%, green 66%, blue 66%, blue 100%); 
 
    background-size: 100%; 
 
    background-repeat: no-repeat; 
 
}
<div class="multiplebackground"></div>

2

Evet ... renk ile lineer bir miktar kullanılarak

.multiplebackground { 
 
    height: 50px; 
 
    background: linear-gradient(to right, red, red 33%, blue 33%, blue 66%, green 66%); 
 
}
<div class="multiplebackground"> 
 

 
</div>
durur (Önekli alternatifleri ve IE özel kod eski tarayıcılar için kullanılabilir)

2

Bunu css3 degrade arka plan özelliği ile yapabilirsiniz! I% 33;% 66, iki kez green tanımlayan

background: linear-gradient(to right, 
      red 33%, 
      green 33%, 
      green 66%, 
      blue 66%); 

dikkat edin. Ben nerede biter başlatıldığında VE nereye tanımlamak zorunda olmasıdır, bu yüzden sen (an itibariyle) sadece ilk satır farklı stil ekleyebilirsiniz CSS ile her degrade

1

arasında keskin bir kenarı olsun.

p: first-line {background-color: mercan;}

gibi bir şey istiyorsanız: n'inci-line() Eğer javascript bunu yapmak zorunda. http://codepen.io/jnowland/pen/AifjK/

var nthLine = function() { 
    var content = $('h1').text(); 
    var words = content.split(" "); 
    var cache = words[0]; //because we miss the first word as we need to detect the height. 
    var lines = []; 
    $("header").append('<h1 id="sample">' + words[0] + '</h1>'); 
    var size = $('#sample').height(); 
    var newSize = size; 
    for (var i = 1; i < words.length; i++) { 
     var sampleText = $('#sample').html(); 
     cache = cache + ' ' + words[i]; 
     marker = [i]; 
     $('#sample').html(sampleText + ' ' + words[i]); 
     var newSize = $('#sample').height(); 
     if (size !== newSize) { 
      cache = cache.substring(0, cache.length - (words[i].length + 1)); 
      lines.push(cache); 
      cache = words[i]; 
      size = $('#sample').height(); 
     } 
    } 
    lines.push(cache); 
    cache = '' 
    for (var i = 0; i < lines.length; i++) { 
     cache = cache + ' <span class="line-' + [i] + '">' + lines[i] + '</span>' 
    } 
    $('#sample').remove(); 
    cache = cache.substring(1); 
    //prints the result. 
    $('h1').html(cache); 
}; 
nthLine(); 
$(window).resize(nthLine); 
+0

Soruda gördüğünüz gibi. Sadece "css" ve sadece 1 elementi kullanmaktan hoşlandım. – alexey

+0

@alexey Evet biliyorum, bu yüzden bu şekilde cevap verdim. Sorununuzu çözmenin tek yolu, metninizi birden çok öğeye ayırmaktır. "Doğrusal gradyan" çözümünü kullanmak, birçok renk istiyorsanız daha karmaşık olacak ve ardından tüm satırlar blok gibi davranacaksınız. (metin olmayan arka plan renklerine sahip olacaksınız) – Sprazer

İlgili konular