2011-12-14 39 views
25

Tôi đang cố gắng tạo kiểu cho các khối mã cho một trang web. Vùng chứa div được đặt để tràn cả theo chiều dọc và chiều ngang. Vấn đề là khi nó tràn theo chiều ngang, màu nền ngựa vằn sọc được chọn. Tôi đã thử nó với một hình nền là tốt nhưng nó cũng loại bỏ nó. Tại sao nó làm điều đó và làm thế nào để sửa chữa nó?Trích xuất "tràn" CSS "màu nền"

Cảm ơn.

Ảnh: http://zero.robotrenegade.com/q3w/background-overflow.png

trang web (mở rộng trình duyệt của bạn rộng xuống để xem vấn đề): 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 cho câu hỏi thú vị, khá tò mò cho câu trả lời .. – ptriek

+1

nếu mọi thứ khác không thành công, bạn có thể luôn đặt hình nền lặp đi lặp lại (trắng/xám) trên .codeblock - chắc chắn là khá chắc chắn không phải là rất sexy) workaround. Hình ảnh nền – ptriek

+0

@ptriek trên '.codeblock' sẽ không hoạt động vì nó sẽ không cuộn với văn bản, mà đánh bại điểm của vằn vằn. Nếu bất cứ điều gì, hình nền sẽ được áp dụng cho 'tiền tố' hoặc 'mã', nhưng sau đó bạn kết thúc với cùng một vấn đề chọn lọc nền. – Obsidian

Trả lời

5

Hãy thử float:left trên .codeblock pre . Hoạt động trong Firefox.

<pre> phù hợp với chính nó bên trong hộp chứa .codeblock như không còn chỗ trống. float làm cho phần tử <pre> của bạn đủ rộng để vừa với nội dung của nó.

CẬP NHẬT

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

trình trong Firefox, Opera, IE9 và WebKit

Theo như tôi hiểu, nó yếu tố bên trong một container với overflow:auto phù hợp với bản thân bên trong khu vực đó là có thể nhìn thấy theo mặc định. Các yếu tố đó 'width:100% chỉ rộng bằng hộp chứa bên ngoài. Trong ví dụ này bên trong thùng chứa bên trong, bạn có thẻ code không làm đứt dòng sao cho văn bản nằm ngoài vùng chứa bên trong và làm cho cuộn hiển thị vùng chứa bên ngoài. Để tránh điều đó, bạn cần hộp chứa bên trong để phù hợp với nội dung của nó do đó float:left.

Tuy nhiên, khi bạn khéo léo nhận thấy (và tôi không), cách này sẽ không mở rộng nếu thùng chứa bên ngoài rộng hơn mã để tránh bạn cần phải đặt min-width:100% để sử dụng container bên trong ít nhất là tất cả không gian hiển thị bên trong thùng chứa bên ngoài.

+0

ok, giải quyết vấn đề - nhưng tạo một vấn đề mới: chiều rộng của các hàng sẽ không mở rộng đến 100% trên màn hình rộng hơn – ptriek

+0

bây giờ nó hoạt động :) – szym

+0

bạn có thể giải thích? – ptriek

1

Đường đang mở rộng như mọi phần tử khối với chiều rộng tối đa - và đó là không tràn. Và chúng không được kết nối - nếu nó lớn hơn, nó không ảnh hưởng đến người khác.

Hãy thử thay đổi chúng một cái gì đó khác hơn là yếu tố ngăn chặn, như thế:

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

loại Bảng liên quan đến thay đổi chiều rộng hoặc chiều cao (tế bào) cùng

http://jsfiddle.net/D7rND/

+1

Nó chỉ tốt cho firefox. Không thiếu trong opera hoặc webkit. – Litek

+0

Tôi xác nhận điều này sẽ không hoạt động trong webkit – ptriek

1

Hãy thử:

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

này làm việc cho tôi trong Safari.

+0

cùng một vấn đề như câu trả lời @szym, nền sẽ không mở rộng trong trình duyệt rộng hơn – ptriek

+0

Có, tôi quên quay lại và mở rộng trình duyệt. Lấy làm tiếc. –

+0

Chỉ cần thêm 'chiều rộng tối thiểu: 100%' và nó sẽ hoạt động theo cách mà OP mong đợi cho các dòng ngắn. –

0

Sử dụng một DTD format.it thích của tốt trên firefox mặc dù ...

+2

Cái gì? '' kích hoạt chế độ tiêu chuẩn, đây là cách tốt nhất bạn có thể làm. – duri

0

Tôi chỉ cần thêm {float:left} đến của div mà nền đã được "chọn lọc" trong hoàn cảnh của tôi.

Với thay đổi này, hình nền và đường viền sẽ mở rộng với văn bản tràn. Vì vậy, khi tôi cuộn theo chiều ngang, văn bản được hiển thị đồng đều với cùng nền và đường viền.

Trước khi thêm đoạn css này, nền/đường viền sẽ không tràn ra ngoài div, mặc dù văn bản sẽ.