2011-12-14 8 views
25

मैं किसी वेबसाइट के लिए कोड के ब्लॉक को स्टाइल करने की कोशिश कर रहा हूं। कंटेनर div दोनों लंबवत और क्षैतिज रूप से बहने के लिए सेट है। समस्या तब होती है जब यह क्षैतिज रूप से बहती है, ज़ेबरा-धारीदार पृष्ठभूमि-रंग को खींचा जाता है। मैंने इसे पृष्ठभूमि छवि के साथ भी कोशिश की लेकिन यह भी उसे कम करता है। ऐसा क्यों कर रहा है और मैं इसे कैसे ठीक करूं?सीएसएस "ओवरफ्लो" कल्स "पृष्ठभूमि-रंग"

धन्यवाद।

छवि: http://zero.robotrenegade.com/q3w/background-overflow.png

वेबपेज (आपके ब्राउज़र पैमाने पर समस्या को देखने के लिए नीचे चौड़ाई): http://zero.robotrenegade.com/q3w/code.html

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <meta name="created" content=""> 
    <meta name="description" content=""> 
    <meta name="keywords" content=""> 
    <link rel="stylesheet" href="" type="text/css" media="all" title="Default styles" /> 
    <title></title> 
    <!--[if IE]><script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]--> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
      jQuery("pre code").html(function(index, html) { 
        return html.replace(/^(.*)$/mg, "<span class=\"line\">$1</span>") 
      }); 
     }); 
    </script> 
<style> 
.codeblock { 
    max-height: 25em; 
    overflow: auto; 
    margin: 1em; 
    border: 1px solid #ccc; 
    font-size: 1em; 
    line-height: normal; 
    border-radius: 8px; 
    box-shadow: 0px 0px 4px rgba(0,0,0,0.25); 
} 
.codeblock h1, .codeblock p { 
    font-size: 1em; 
    margin: 0; 
    padding: 0em 1em 0.5em 3.5em; 
    line-height: 2em; 
    background-color: #eee; 
} 
.codeblock pre { 
    margin: 0; 
    padding: 0; 
    font-face: 'lucida console',monaco,courier,'courier new',monospace; 
} 
.codeblock pre code { 
    counter-reset: line-numbering; 
    margin: 0; 
    padding: 0; 
} 
.codeblock pre code .line::before { 
    content: counter(line-numbering); 
    counter-increment: line-numbering; 
    padding-right: 0.5em; 
    width: 4.5em; 
    text-align: right; 
    color: #888; 
    border-right: 1px dotted #888; 
    display: inline-block; 
    background-color: #eee; 
} 
.codeblock pre code .line { 
    display: block; 
    margin: 0 0 -1.2em 0; 
    line-height: 1.5em; 
} 
.codeblock pre code .line:nth-child(odd) { 
    background: #f2f5f9; 
} 
/*.codeblock pre code .line:hover { 
    background: #4b95e5; 
    color: #fff; 
}*/ 
</style> 

</head> 
<body> 

<div class="codeblock"><!--<h1>Hello, this is an optional header.</h1>--> 
<pre><code>void idAF::Restore(idRestoreGame *savefile) { 
    savefile->ReadObject(reinterpret_cast<idClass *&>(self)); 
    savefile->ReadString(name); 
    savefile->ReadBool(hasBindConstraints); 
    savefile->ReadVec3(baseOrigin); 
    savefile->ReadMat3(baseAxis); 
    savefile->ReadInt(poseTime); 
    savefile->ReadInt(restStartTime); 
    savefile->ReadBool(isLoaded); 
    savefile->ReadBool(isActive); 

    animator = NULL; 
    modifiedAnim = 0; 

    if (self) { 
     SetAnimator(self->GetAnimator()); 
     Load(self, name); 
     if (hasBindConstraints) { 
      AddBindConstraints(); 
     } 
    } 

    savefile->ReadStaticObject(physicsObj); 

    if (self) { 
     if (isActive) { 
      // clear all animations 
      animator->ClearAllAnims(gameLocal.time, 0); 
      animator->ClearAllJoints(); 

      // switch to articulated figure physics 
      self->RestorePhysics(&physicsObj); 
      physicsObj.EnableClip(); 
     } 
     UpdateAnimation(); 
    } 
}</code></pre> 
<!-- <p>This is an optional footer, goodbye!</p> --> 
</div> 

</body> 
</html> 
+2

+1 दिलचस्प प्रश्न के लिए +1, उत्तर के लिए बहुत उत्सुक है .. – ptriek

+1

यदि सब कुछ विफल हो जाता है, तो आप निश्चित रूप से .codeblock पर दोहराई गई पृष्ठभूमि छवि (सफेद/ग्रे) डाल सकते हैं - जो कि एक सुंदर ठोस होना चाहिए (हालांकि बहुत सेक्सी नहीं) कामकाज। – ptriek

+0

'.codeblock' पर @ptriek पृष्ठभूमि छवि काम नहीं करेगी क्योंकि यह टेक्स्ट के साथ स्क्रॉल नहीं करेगा, जो ज़ेबरा स्ट्रिपिंग के बिंदु को हरा देती है। यदि कुछ भी हो, तो पृष्ठभूमि छवि को 'प्री' या 'कोड' पर लागू किया जाएगा, लेकिन फिर आप उसी पृष्ठभूमि को हल करने के मुद्दे के साथ समाप्त हो जाते हैं। – Obsidian

उत्तर

5

.codeblock pre पर float:left प्रयास करें । फ़ायरफ़ॉक्स में काम करता है।

<pre>.codeblock कंटेनर के अंदर स्वयं फिट बैठता है जैसे कि कोई और कमरा नहीं था। float आपकी <pre> तत्व चौड़ा बनाता है जो इसकी सामग्री को फिट करने के लिए पर्याप्त है।

अद्यतन फ़ायरफ़ॉक्स, ओपेरा, IE9 में

.codeblock pre { 
    float: left; 
    min-width: 100%;} 

काम करता है और वेबकिट

जहां तक ​​मैं समझता हूँ, यह overflow:auto के साथ एक कंटेनर के अंदर तत्वों खुद को ऐसा क्षेत्र है जो डिफ़ॉल्ट रूप से दृश्यमान है अंदर फिट। उन तत्वों 'width:100% बाहरी कंटेनर के रूप में केवल चौड़ा है। इस उदाहरण में आंतरिक कंटेनर के अंदर आपके पास code टैग है जो लाइनों को तोड़ता नहीं है, इसलिए पाठ आंतरिक कंटेनर के बाहर जाता है और बाहरी कंटेनर शो स्क्रॉल बनाता है। इससे बचने के लिए, आपको इसकी सामग्री को फिट करने के लिए आंतरिक कंटेनर की आवश्यकता है इसलिए float:left

लेकिन, जैसा कि आपने चालाकी से देखा (और मैंने नहीं किया), अगर बाहरी कंटेनर कोड से बड़ा है तो इससे विस्तार नहीं होगा ताकि इससे बचने के लिए कि आपको आंतरिक कंटेनर का उपयोग करने के लिए min-width:100% डालना होगा बाहरी कंटेनर के अंदर कम से कम सभी दृश्य स्थान।

+0

में काम नहीं करेगा ठीक है, समस्या हल करता है - लेकिन एक नया बनाता है: पंक्तियों की चौड़ाई विस्तृत स्क्रीन पर 100% तक विस्तार नहीं होगी – ptriek

+0

अब यह काम करता है :) – szym

+0

जो वास्तव में काम करता है, क्या तुम समझा सकते हो? – ptriek

1

लाइन्स अधिकतम चौड़ाई के लिए हर ब्लॉक तत्व की तरह विस्तार कर रहे हैं - और यह कि अतिप्रवाह के बिना है। और वे जुड़े नहीं हैं - यदि कोई बड़ा है, तो यह दूसरों को प्रभावित नहीं करता है।

उन्हें ब्लॉक तत्व से कुछ और करने के लिए बदल रहा है, इस तरह का प्रयास करें:

.codeblock pre code .line { 
    display: table-row; 
} 

टेबल से संबंधित प्रकार चौड़ाई या ऊंचाई (कोशिकाओं) को बदलने के साथ

http://jsfiddle.net/D7rND/

+1

यह फ़ायरफ़ॉक्स के लिए केवल अच्छा है। ओपेरा या वेबकिट में कोई कमी नहीं है। – Litek

+0

मैं पुष्टि करता हूं कि यह वेबकिट – ptriek

1

प्रयास करें:

.codeblock pre, .codeblock pre code { 
    display: inline-block; 
} 

इस सफारी में मेरे लिए काम किया।

+0

@szym उत्तर के समान समस्या, पृष्ठभूमि व्यापक ब्राउज़र में विस्तार नहीं होगा – ptriek

+0

हां, मैं वापस जाना और ब्राउज़र का विस्तार करना भूल गया। माफ़ कीजिये। –

+0

बस 'न्यूनतम-चौड़ाई: 100% 'जोड़ें और यह ओपी को छोटी लाइनों के लिए जिस तरह से उम्मीद करता है, वैसे ही काम करेगा। –

0

का उपयोग एक उचित DTD format.it के फ़ायरफ़ॉक्स हालांकि पर अच्छा ...

+2

क्या? ' 'मानक मोड ट्रिगर करता है, यह सबसे अच्छा है जो आप कर सकते हैं। – duri

0

मैं बस के लिए {float:left} जोड़ा div के जिसका पृष्ठभूमि गया जा रहा है "चुनी गई" मेरी स्थिति में।

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

सीएसएस के इस टुकड़े को जोड़ने से पहले, पृष्ठभूमि/सीमा div से परे बहती नहीं है, हालांकि पाठ होगा।