Webサイトのコードブロックのスタイルを設定しようとしています。コンテナdivは、垂直方向と水平方向の両方でオーバーフローするように設定されています。問題は、水平方向にオーバーフローすると、ゼブラストライプの背景色がカリングされることです。背景画像でも試してみましたが、それもカリングします。なぜそれをしているのですか、どうすれば修正できますか?
ありがとう。
画像: http://zero.robotrenegade.com/q3w/background-overflow.png
Webページ(ブラウザの幅を縮小して問題を確認します): 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>
float:left
で.codeblock pre
を試してください。 Firefoxで動作します。
<pre>
は、スペースがなくなったように.codeblock
コンテナ内に収まります。 float
は、<pre>
要素の幅をコンテンツに合わせて十分に広げます。
更新
.codeblock pre {
float: left;
min-width: 100%;}
Firefox、Opera、IE9、WebKitで動作します
私の知る限り、overflow:auto
を持つコンテナ内の要素は、デフォルトで表示される領域内に収まります。これらの要素のwidth:100%
は、外側のコンテナと同じ幅しかありません。この例では、内側のコンテナー内にcode
タグがあり、行を分割しないため、テキストは内側のコンテナーの外側に出て、外側のコンテナーにスクロールを表示します。これを回避するには、コンテンツに合わせて内部コンテナが必要です。したがって、float:left
です。
しかし、巧妙に気づいたように(そして私は気づかなかった)、この方法では、外側のコンテナーがコードよりも広い場合は展開されないため、内側のコンテナーをで使用するためにmin-width:100%
を配置する必要はありません。少なくとも外側のコンテナ内のすべての目に見えるスペース。
試してみてください:
.codeblock pre, .codeblock pre code {
display: inline-block;
}
これはSafariで私のために働いた。
線はすべてのブロック要素のように最大幅まで拡大しています-そしてそれはオーバーフローなしです。そして、それらは接続されていません-1つが大きい場合、それは他に影響を与えません。
次のように、ブロック要素以外のものに変更してみてください。
.codeblock pre code .line {
display: table-row;
}
テーブル関連のタイプは、幅または高さ(セル)を一緒に変更します
適切なDTD形式を使用してください。Firefoxでは問題ありませんが...
私の状況で背景が「カリング」されていたdivに{float:left}
を追加しました。
この変更により、背景と境界線がオーバーフローしたテキストで拡張されます。したがって、水平方向にスクロールすると、テキストは同じ背景と境界線で均一に表示されます。
このcssを追加する前は、テキストはオーバーフローしますが、背景/境界線はdivを超えてオーバーフローしませんでした。