2011-12-14 12 views
25

私はウェブサイトのコードブロックをスタイルしようとしています。コンテナdivは、垂直方向と水平方向の両方でオーバーフローするように設定されています。問題は、水平にオーバーフローし、ゼブラストライプの背景色が選択された場合です。私も背景の画像でそれを試しましたが、それはあまりにもそれを断つ。なぜそれをやっているのですか?どうすれば修正できますか?CSS "overflow" culls "background-color"

ありがとうございました。

画像: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興味深い質問のためにかなり興味があります。 – ptriek

+1

他にもすべてが失敗した場合は、もちろん、コードブロックに繰り返しの背景イメージ(白/灰色)を置くことができます。非常にセクシーではない)回避策。 – ptriek

+0

@ptriekの背景画像は '.codeblock'には作用しません。なぜなら、それはゼブラの剥ぎ取りのポイントを破るテキストでスクロールしないからです。もしあれば、背景画像は「前」または「コード」のどちらかに適用されますが、同じバックグラウンドカリングの問題に終わります。 – Obsidian

答えて

5

幅または高さ(セル)を変更.codeblock prefloat:leftをお試しください。 Firefoxで動作します。

<pre>は、余分な余裕がないように.codeblockコンテナ内に収まります。 floatは、コンテンツに合うだけの幅で<pre>要素の幅を広げます。

UPDATEは、Firefox、オペラ、IE9で

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

作品と

のWebKit

は、私の知る限り理解し、 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

これは、Firefoxのためだけに良いです。オペラやウェブキットの不足はありません。 – Litek

+0

これはWebkit – ptriek

1

試してみてください。

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

これはSafariで私のために働きました。

+0

@szymと同じ問題は答え、広いブラウザで背景が拡大しない – ptriek

+0

はい、私は戻ってブラウザを展開するのを忘れました。ごめんなさい。 –

+0

'min-width:100%'を追加するだけで、OPが短い行に期待する方法で動作します。 –

0

は...しかし

+2

何ですか? '<!doctype html>'は標準モードを起動しますが、これはあなたができる最善の方法です。 – duri

0

を適切なDTD format.itの良いFirefoxの上を使用して、私はちょうどその背景私の状況で「淘汰」されていたのdivのに{float:left}を追加しました。

この変更によって、背景と罫線がオーバーフローしたテキストで拡張されます。 横にスクロールすると、テキストは同じ背景と罫線で一様に表示されます。

このcssを追加する前に、テキストが表示されるにもかかわらず、background/borderがdivを超えてオーバーフローすることはありません。

関連する問題