Я пытаюсь стилизовать блоки кода для сайта. Контейнер div настроен на переполнение как по вертикали, так и по горизонтали. Проблема в том, что когда он переполняется по горизонтали, зеброво-полосатый фоновый цвет обрезается. Я пробовал и с фоновым изображением, но оно тоже сбрасывается. Почему это происходит и как это исправить?
Спасибо.
Изображение: http://zero.robotrenegade.com/q3w/background-overflow.png
Веб-страница (уменьшите ширину браузера, чтобы увидеть проблему): http://zero.robotrenegade.com/q3w/code.html
void idAF::Restore( idRestoreGame *savefile ) {
savefile->ReadObject( reinterpret_cast( 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();
}
}
Попробуйте 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 code .line {
display: table-row;
}
Связанные с таблицей типы изменяют ширину или высоту (ячейки) вместе
Попробуйте:
.codeblock pre, .codeblock pre code {
display: inline-block;
}
Это сработало для меня в Safari.
Используйте правильный формат DTD. Это хорошо для Firefox, хотя ...
Я только что добавил {float:left}
к div'ам, чьи предыстории были «забракованы» в моей ситуации.
С этим изменением фон и границы будут расширяться с переполненным текстом. Поэтому при горизонтальной прокрутке текст отображается равномерно с тем же фоном и границами.
Перед добавлением этого фрагмента CSS фон / граница не будут выходить за пределы div, хотя текст будет.