2012-01-03 72 views
7

Tôi đã cố gắng tìm cách căn giữa văn bản theo chiều dọc, nhưng tôi không thể tìm thấy câu trả lời thỏa đáng. Câu trả lời hay nhất tôi tìm thấy cho đến bây giờ là this. Điều này làm cho nó trông giống như nó cho phép tôi canh giữa văn bản theo chiều dọc, nhưng nếu tôi sử dụng nó và tôi thêm nhiều văn bản hơn, nó chỉ được mở rộng ở phía dưới và không được căn giữa, giống như những gì xảy ra theo chiều ngang.Làm cách nào để căn giữa văn bản theo chiều dọc với css

Lưu ý, tôi đang tìm giải pháp CSS duy nhất, do đó không javascript. Lưu ý, tôi muốn có thể thêm nhiều dòng văn bản.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<style type="text/css"> 
    div#maindiv { 
     width: 810px; 
     height: 99px; 
     background-color: black; 
     margin: 0px; 
     padding: 0px; 
     color: white; 
     font-family: Sans-serif; 
     text-align: center; 
     display: table; 
    } 
    div#maindiv span { 
     font-size: 1.1em; 
    } 


    div#part1 { 
     width: 270px; 
     height: 99px; 
     background-color: #6DCAF2; 
     float: left; 
     vertical-align: middle; 
     position: relative; 
    } 

    div#horizon1 { 
     background-color: green; 
     height: 1px; 
     left: 0; 
     overflow: visible; 
     position: absolute; 
     text-align: center; 
     top: 50%; 
     visibility: visible; 
     width: 100%; 
    } 

    div#content1 { 
     background-color:green; 
     height:99px; 
     width: 270px; 
     position: absolute; 
     top: -50px; 
    } 

</style> 
<title>XHTML-Strict</title> 
</head> 
<div id="maindiv"> 
<body> 
    <div id="part1"> 
     <div id="horizon1"> 
      <div id="content1"> 
       <div id="bodytext1"> 
        <span> 
         Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas dolor augue, faucibus quis sagittis 
        <span> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 
</body> 
</html> 

Cuối cùng, tôi muốn có 3 khối, mỗi khối đều căn giữa văn bản ở giữa. Các văn bản này được khách hàng chỉnh sửa để họ có thể trải rộng trên nhiều dòng. Hiện tại, văn bản bắt đầu ở đầu hộp và đi xuống cuối, cuối cùng, tôi muốn văn bản bắt đầu tại một điểm để trung tâm của phần văn bản được đặt ở giữa hộp.

Giải pháp cuối cùng của tôi, Lưu ý: căn chỉnh dọc không hoạt động nếu bạn có phao: còn lại trong cùng một div.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<style type="text/css"> 
    div#maindiv { 
     width: 810px; 
     height: 99px; 
     background-color: black; 
     margin: 0px; 
     padding: 0px; 
     color: white; 
     font-family: Sans-serif; 
    } 
    div#maindiv span { 
     font-size: 1.1em; 
    } 

    div.part { 
     width: 262px; 
     height: 99px; 
     padding: 0px; 
     margin: 0px; 
     padding: 4px; 
     border: 0px; 
     color: white; 
     text-align: center; 
     display: table-cell; 
     vertical-align: middle; 
    } 

    div.bgc1 { 
     background-color: #6DCAF2; 
    } 

    div.bgc2 { 
     background-color: #2A4B9A; 
    } 

    div.bgc3 { 
     background-color: #FF8A00; 
    } 


</style> 
<title>XHTML-Strict</title> 
</head> 
<div id="maindiv"> 
<body> 
    <div style="float: left;"> 
     <div class="part bgc1"> 
      <span> 
       Vegeta! What does the scouter say about his power level?! 
      </span> 
     </div> 
    </div> 
    <div style="float:left;"> 
     <div class="part bgc2"> 
      <span> 
       It's over NINE THOUSAAAAAAAAAND! 
      </span> 
     </div> 
    </div> 
    <div style="float:left;"> 
     <div class="part bgc3"> 
      <span> 
       What NINE THOUSAND? There is no way that can be right! 
      </span> 
     </div> 
    </div> 
</div> 
</body> 
</html> 
+2

bạn có thể gửi mã hiện tại của bạn? câu hỏi đầu tiên luôn là: 'bạn muốn trung tâm văn bản ở đâu?' – ptriek

+0

Có nhiều phương pháp có sẵn ở đây: http://www.vanseodesign.com/css/vertical-centering/ Nếu bạn có thể chia sẻ mã bạn đang sử dụng, có lẽ chúng tôi có thể trợ giúp với một giải pháp cụ thể. –

+0

cách css khác là có văn bản trong ô bảng; nếu không bạn sẽ phải sử dụng js – mreq

Trả lời

7

Bạn có thể thiết lập container của bạn để display:table-cell và thêm vertical-align:middle:

http://jsfiddle.net/ptriek/h5j7B/1

(Nhưng IE7 và dưới đây sẽ không như thế này ...)

+2

Bên cạnh các vấn đề trước IE8, điều này cũng không hoạt động tốt trên điện thoại di động và thiết bị cầm tay. Bên cạnh đó, nó không thực sự v-trung tâm văn bản, nó v-trung tâm container con mà sau đó lại chứa văn bản ... nhưng ai muốn bắt đầu đếm đậu Hà Lan ở đây? ;) Ý tưởng tuyệt vời anyway ... –

0

Bạn có thể sử dụng chiều cao dòng bằng với chiều cao của vùng chứa chính.

ví dụ:

<div style="height:32px;> 
    <p style="line-height:32px;">Text</p> 
</div> 

Bạn sẽ muốn chúng trong bảng css bên ngoài.

Nếu tôi hiểu chính xác câu hỏi của bạn.

+0

Bạn muốn giải thích các phiếu bầu xuống? Nếu tôi giải thích điều gì sai, đừng ngần ngại sửa. –

+0

Tôi đã không downvote, nhưng OP đề cập đến một vấn đề xảy ra khi thêm nhiều hơn (đọc: multiline) văn bản - và điều đó sẽ không làm việc với câu trả lời của bạn hoặc là ... – ptriek

+0

Cảm ơn bạn đã trả lời. –

1
<div style="height:50px;line-height:50px;"> 
    Text 
</div> 
+0

Bạn cần đánh dấu HTML của mình dưới dạng mã hoặc mã sẽ không được hiển thị ngay trong câu trả lời SO của bạn. – scottheckel

+0

Câu trả lời hợp lệ tôi đồng ý, nhưng có một vấn đề: khi văn bản bắt đầu gói theo chiều ngang, điều này sẽ "vỡ" thành thứ gì đó xấu xí với chiều cao dòng phóng đại. OP nên cho chúng tôi biết: "bao nhiêu văn bản" chúng tôi đang nói đến. ;) –

+0

thường tôi sử dụng điều này cho các nút và div với một dòng văn bản. – Arrabi

10

Vâng, có một số giải pháp.

Các đơn giản nhất là

#centerme 
{ 
    // will center the text vertically, but looks bad with multiliners 
    line-height:20em; 
} 

Đối với đa lót, bạn cần phải xác định vị trí một hộp-trong-một-box

#parentbox 
{ 
    // we need the "parent" to have some kind of height 
    height:20em; 

    // the most important... position children "relative" to the parent 
    position:relative; 
} 

.childbox 
{ 
    position:absolute; 
    left:0; 
    top:50%; 
    margin-top:-5em; // this pulls the child back "up" to the vertical center 
} 

Vấn đề ở đây là "height" của bạn đa lót phải được biết (hoặc ít nhất là đoán) để nó thực sự tập trung dọc.

NHỮNG ĐIỀU BẠN CẦN BIẾT

Không có CSS ​​cách tinh khiết biết về chiều cao của một phần tử, mà sau đó sẽ cho phép chúng ta tập trung nó theo chiều dọc trong một cách "thích nghi"!

Điều này có nghĩa là khi bạn thay đổi văn bản, bạn cũng phải thay đổi CSS để đảm bảo tất cả vẫn phù hợp.

Điều này có thể gây phiền toái và đó là nơi và lý do tại sao hầu hết mọi người quay lại sử dụng javascript để làm việc xung quanh sự khó chịu CSS này của "tính năng bị thiếu". Cuối cùng, javascript làm cho nó dễ dàng hơn trên tất cả chúng ta (ít nhất là trong các loại trường hợp).

THÊM

Có rất nhiều Q & Một về vấn đề này xảy ra khắp nơi trên web và trên trang web này.Trong trường hợp bạn bị mất họ, đây là một số:

và có nhiều hơn nữa; tất cả cung cấp các giải pháp riêng cho từng trường hợp. Những thứ này sẽ giúp bạn tự tin hơn một chút (như ban đầu bạn đã nói rằng bạn mới sử dụng loại CSS này).

Các vấn đề liên quan