2013-03-07 11 views
5

मेरे पास div है जिसमें 4 सीएसएस columns है और मैं टेक्स्ट को थोड़ा गहरा बनाने के लिए तीसरा और चौथा कॉलम चुनना चाहता हूं क्योंकि मेरे पास टेक्स्ट और background-image के बीच कोई अच्छा अंतर नहीं है। क्या यह संभव है? मैं किसी भी सीएसएस या जेएस समाधान स्वीकार कर सकते हैं।क्या मैं एक एनटी सीएसएस कॉलम चुन सकता हूं?

यहां demo है।

--EDIT--

ऐसा लगता है कि यह छद्म ब्लॉक के लिए एक चयनकर्ता (अगर मैं कह सकते हैं) लेकिन मैं अभी भी (उत्तरदायी ब्लॉक बनाने का एक तरीका यह पता लगाने की जरूरत है खोजने के लिए संभव नहीं है कॉलम की तरह) जो ब्राउजर का आकार बदलते समय टेक्स्ट को समान रूप से (चौड़ाई में) विभाजित करेगा।

+0

जहां तक ​​मुझे पता है, – Luca

+3

ऐसा करने का कोई तरीका नहीं है (* [अभी तक] (http://dev.w3.org/csswg/selectors4/#nth-column-pseudo) *) ऐसा करने के लिए एक लागू साधन है। –

+0

@ डेविड मैंने ऐसा सोचा। यही कारण है कि मैं जेएस के साथ ऐसा करने का एक तरीका समझने की कोशिश कर रहा हूं। भले ही स्क्रिप्ट सीएसएस कॉलम के अलावा ब्लॉक बनाता है। – otinanai

उत्तर

3

जहाँ तक मुझे पता के रूप में आप स्तंभों को शैलियाँ लागू करने में सक्षम नहीं होगा के लिए Give Up and Use Tables। कॉलम 3 और 4 अन्य रंग बनाने के लिए पृष्ठभूमि के रूप में ढाल का उपयोग करने के लिए आप क्या कोशिश कर सकते हैं।

#columns { 
    background: -webkit-linear-gradient(left, rgba(0,0,0,0) 50%, blue 50%); 
    /*... appropriate css for other browser engines*/ 
} 

updated jsFiddle सभी ब्राउज़र समर्थन ढाल

के साथ अद्यतन - संपादित करें -

के बाद से इरादा वास्तव में था तीसरे और चौथे स्तंभ के लिए पाठ रंग और नहीं पृष्ठभूमि बदलने के लिए कुछ अतिरिक्त विचार।

अब के लिए एक कंटेनर के अंदर एकल कॉलम में शैलियों को लागू करना संभव नहीं लगता है। विशिष्ट कॉलम में टेक्स्ट रंग बदलने के लिए एक संभावित कामकाज प्रत्येक शब्द को span के अंदर रखना है। फिर शब्दों पर पुनरावृत्ति करने के लिए जावास्क्रिप्ट का उपयोग करें और यह निर्धारित करें कि नया कॉलम कहां से शुरू होता है। तीसरे कॉलम में पहले तत्व को असाइन करना एक नई कक्षा से इसे और विभिन्न भाई बहनों को एक अलग पाठ रंग के साथ शैली बनाना संभव हो जाएगा।

क्योंकि कंटेनर एक उत्तरदायी लेआउट का हिस्सा है और आकार में बदल सकता है, स्क्रिप्ट को कॉलम चौड़ाई बदलने के लिए आकार बदलने के लिए आकार बदलना होगा।

कोड उदाहरण के प्रयोजन कैसे इस तरह के एक समाधान लागू करने के लिए और (जैसे span रों हर बार styleCols फिर से बनाए जा रहे हैं चलाया जाता है, सांत्वना उत्पादन के बहुत सारे एक वास्तविक आवेदन में उपयोग के लिए सुधार किया जाना चाहिए की रूपरेखा तैयार करने के लिए है। ..)।

जावास्क्रिप्ट

function styleCols() { 
    // get #columns 
    var columns = document.getElementById('columns'); 
    // split the text into words 
    var words = columns.innerText.split(' '); 
    // remove the text from #columns 
    columns.innerText = ''; 

    // readd the text to #columns with one span per word 
    var spans = [] 
    for (var i=0;i<words.length;i++) { 
     var span = document.createElement('span'); 
     span.innerText = words[i] + ' '; 
     spans.push(span); 
     columns.appendChild(span); 
    } 

    // offset of the previous word 
    var prev = null; 
    // offset of the column 
    var colStart = null; 
    // number of the column 
    var colCount = 0; 
    // first element with a specific offset 
    var firsts = []; 
    // loop through the spans 
    for (var i=0;i<spans.length;i++) { 
     var first = false; 
     var oL = spans[i].offsetLeft; 
     console.info(spans[i].innerText, oL); 
     // test if this is the first span with this offset 
     if (firsts[oL] === undefined) { 
      console.info('-- first'); 
      // add span to firsts 
      firsts[oL] = spans[i]; 
      first = true; 
     } 
     // if the offset is smaller or equal to the previous offset this 
     // is a new line 
     // if the offset is also greater than the column offset we are in 
     // (the second row of) a new column 
     if ((prev === null || oL <= prev) && (colStart === null || oL > colStart)) { 
      console.info('-- col++', colCount + 1); 
      // update the column offset 
      colStart = oL; 
      // raise the column count 
      colCount++; 
     } 
     // if we have reached the third column 
     if (colCount == 3) { 
      // add our new class to the first span with the column offset 
      // (this is the first span in the current column 
      firsts[oL].classList.add('first-in-col3'); 
      return; 
     } 
     // update prev to reflect the current offset 
     prev = oL; 
    } 
} 
styleCols(); 
addEventListener('resize', styleCols, false); 

सीएसएस

.first-in-col3, .first-in-col3~span { 
    color: red; 
} 

jsFiddle

+0

के साथ एक ही nth चयनकर्ता समस्या का सामना करना पड़ता है यह एक वैकल्पिक समाधान खराब नहीं है। – Manoj

+0

आपके सुझाव के लिए धन्यवाद लेकिन मैं nth कॉलम के टेक्स्ट रंग को बदलना चाहता हूं। अगर मैं पृष्ठभूमि भरने का उपयोग करता हूं तो मैं पृष्ठभूमि छवि को छुपा दूंगा। – otinanai

+0

ठीक है कि यह एक कठिन है और मैं किसी भी सीएसएस समाधान के बारे में नहीं सोच सकता। शायद आप यह निर्धारित करने का प्रयास कर सकते हैं कि कौन से शब्द/अक्षर जेएस के माध्यम से कॉलम हैं और प्रासंगिक कॉलम की सामग्री को 'स्पैन' और स्टाइल में गतिशील रूप से लपेटते हैं? – hsan

3

अब के लिए मुझे नहीं लगता कि आप इसे कर सकते हैं, यहां https://bugzilla.mozilla.org/show_bug.cgi?id=371323 एक सुविधा के लिए एक खुला बग/अनुरोध है, आप इसके लिए वोट दे सकते हैं। तब तक आप टेबल का उपयोग करने पर विचार कर सकते हैं।

पीएस

सिर्फ हास्य :) की खातिर

+0

अच्छी तरह से ... टेबल मेरा दूसरा विचार था, लेकिन अगर मैं कम से कम उन्हें सीएसएस टेबल के साथ बना सकता तो यह बेहतर होगा। लेकिन फिर भी मुझे 'प्रदर्शन: तालिका-कॉलम' – otinanai

1

एकमात्र समाधान मैं, मध्य स्तम्भ के लिए अपनी इच्छित रंग के साथ एक पृष्ठभूमि होगा लगता है के लिए इसे अनुकूलित कर सकता है आकार और स्थिति ताकि यह आपके मध्य कोल्लू के पीछे हो एमएनएस और background-clip:text बनाओ। दुर्भाग्य से यह बहुत अच्छी तरह से समर्थित नहीं है। आप अधिक स्पष्टीकरण here पा सकते हैं।

+0

बहुत ही आशाजनक हालांकि इसमें संगतता की कमी है। – otinanai

संबंधित मुद्दे