Làm cách nào để căn giữa dòng văn bản cuối cùng trong CSS?


78

Làm cách nào để căn giữa văn bản?

Hiện tại, justify không căn giữa dòng cuối cùng.

Câu trả lời:


171

Bạn có thể sử dụng text-align-lasttài sản

.center-justified {
    text-align: justify;
    text-align-last: center;
}

Đây là bảng tương thích: https://developer.mozilla.org/en-US/docs/Web/CSS/text-align-last#Browser_compatibility .

Hoạt động trên tất cả các trình duyệt ngoại trừ Safari (cả Mac và iOS) , bao gồm cả Internet Explorer.

Cũng trong Internet Explorer, chỉ làm việc với text-align: justify(không có giá trị khác text-align) và startendkhông được hỗ trợ.


1
Làm việc rất tốt cho tôi! Cảm ơn. Trong trường hợp ai đó muốn nó "căn trái", họ có thể thay đổi hai thuộc tính cuối cùng thành bên trái - đó là những gì phù hợp với tôi! Cảm ơn Maxime.
Nirav Zaveri

@NiravZaveri Tại sao bạn không loại bỏ hoàn toàn các thuộc tính trong trường hợp đó? Không phải là hành vi mặc định text-align: justifyđể căn trái dòng cuối cùng? Đó không phải là lý do tại sao OP hỏi làm thế nào để căn giữa nó? : S
underscore_d

@underscore_d Bây giờ, tôi không chắc về điều này. Tôi thậm chí không nhớ mình đã làm điều này để làm gì! :)
Nirav Zaveri,

2
Lưu ý rằng kể từ tháng 7 năm 2018, tính năng này vẫn không hoạt động trong Safari hoặc iOS Safari.
BadHorsie

Yo Apple! Năm 2021 đang gõ cửa, trong khi 40% khách hàng của chúng tôi sử dụng iCant's. Mặc dù các nhà phát triển hài lòng về việc IE rời khỏi phòng phát triển, nhưng đổi lại, Safari vẫn là phòng!
Stefano

62

Đối với những người tìm kiếm nhận được văn bản đó là cả hai làm trung tâm và hợp lý, sau đây nên làm việc:

<div class="center-justified">...lots and lots of text...</div>

Với quy tắc CSS sau (điều chỉnh thuộc widthtính nếu cần):

.center-justified {
  text-align: justify;
  margin: 0 auto;
  width: 30em;
}

Đây là bản demo trực tiếp .

Chuyện gì vậy?

  1. text-align: justify;đảm bảo rằng văn bản lấp đầy toàn bộ chiều rộng của divnó.
  2. margin: 0 auto; thực sự là cách viết tắt của bốn quy tắc:
    • Giá trị đầu tiên được sử dụng cho các quy tắc margin-topmargin-bottom. Do đó margin-top: 0; margin-bottom: 0, toàn bộ điều này có nghĩa là không có biên trên hoặc dưới div.
    • Giá trị thứ hai được sử dụng cho các quy tắc margin-leftmargin-right. Vì vậy, quy tắc này dẫn đến margin-left: auto; margin-right: auto. Đây là một điểm thông minh: nó ra lệnh cho trình duyệt lấy bất kỳ không gian nào có sẵn ở hai bên và phân bổ đều ở bên trái và bên phải. Kết quả là văn bản được căn giữa.
      Tuy nhiên, điều này sẽ không hoạt động nếu không có
  3. width: 30em;, giới hạn chiều rộng của div. Chỉ khi chiều rộng bị hạn chế thì mới có một số khoảng trắng còn lại margin: autođể phân phối. Nếu không có quy tắc này, divnó sẽ chiếm tất cả không gian ngang có sẵn và bạn sẽ mất hiệu ứng căn giữa.

7
Tốt hơn nhiều so với câu trả lời được chấp nhận, nhưng nó không căn giữa các dòng ngắn (dòng ngắn hơn chiều rộng được chỉ định). Điều đó thuận tiện cho dòng cuối cùng của một đoạn văn lớn nhưng thực sự bất tiện nếu một đoạn văn chỉ chứa một dòng duy nhất.
Iskar Jarak

16
Đó là một câu trả lời tốt cho một câu hỏi khác. Câu hỏi dường như là làm thế nào để căn giữa dòng cuối cùng; cái này không làm được.
Clément


7

Dường như không có cách nào. Bạn có thể giả mạo nó bằng cách sử dụng justify và sau đó gói dòng văn bản cuối cùng trong một khoảng và chỉ đặt điều đó thành căn giữa văn bản. Nó hoạt động tốt đối với các khối văn bản nhỏ nhưng không phải là cách tiếp cận hữu ích đối với số lượng lớn văn bản hoặc văn bản động.

Tôi khuyên bạn nên tìm một người nào đó tại Adobe có liên quan đến công việc W3C của họ và cằn nhằn họ đưa ra lời biện minh phải / trái / trung tâm trong cuộc họp tiếp theo của họ. Nếu ai đó có thể thúc đẩy các tính năng cơ bản về kiểu chữ trong CSS thì đó sẽ là Adobe.


3
<div class="centered">
<p style="text-align: justify;">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Nullam id dolor id nibh ultricies vehicula ut id elit. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies vehicula ut id elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque</p>nisl consectetur et.</div>

Tôi đã có thể đạt được kết quả bằng cách gói nội dung trong thẻ div và áp dụng thuộc tính text-align: center. Ngay sau thẻ div, tôi đã bọc nội dung trong thẻ đoạn văn và áp dụng thuộc tính, text-align: justify. Để làm cho dòng cuối cùng được căn giữa, tôi đã loại trừ nó khỏi thẻ đoạn văn, sau đó trở lại thuộc tính được áp dụng trong thẻ div. Bạn chỉ cần lập chiến lược về số từ bạn muốn trên dòng cuối cùng. Tôi đã bao gồm một bản demo từ fiddle. Hi vọng điêu nay co ich.

Demo - Căn giữa Văn bản Đoạn văn


Đó là giải pháp thực sự duy nhất. Tạo 2 lớp, với văn bản được căn giữa / căn đều và áp dụng cả hai cho div của bạn. Hoạt động cho các dòng đơn / ngắn đến.
cox

Brownlace: <div align = "center"> thực hiện công việc mà không cần thêm css.
cox

@cox class là một thuộc tính không dùng nữa, không sử dụng rằng: w3.org/TR/html4/index/attributes.html
FelipeAls

Đó thực sự là một giải pháp công nghệ thấp khá đáng tin cậy. Cú pháp moz mới không hoạt động, ngay cả trên Chrome mới nhất, nhưng điều này có. Chỉ có vấn đề, nó để lại một khoảng trống ở cuối dòng trước-cuối cùng.
Draken

1

Hầu hết các giải pháp ở đây không tính đến bất kỳ loại hộp văn bản đáp ứng nào.

Số lượng văn bản trên dòng cuối cùng của đoạn văn được quy định bởi kích thước của trình duyệt người xem, và vì vậy nó trở nên rất khó khăn.

Tôi nghĩ trong ngắn hạn, nếu bạn muốn bất kỳ loại trình duyệt / thiết bị di động nào, điều này là không thể :(


Xem câu trả lời Akshay - nó hoạt động tuyệt vời với cách bài trí đáp ứng (trên hầu hết các trình duyệt)
Sauce

0

Tính độ dài của dòng văn bản của bạn và tạo một khối có cùng kích thước với dòng văn bản. Căn giữa khối. Nếu bạn có hai dòng, bạn sẽ cần hai khối nếu chúng có độ dài khác nhau. Bạn có thể sử dụng thẻ span và thẻ br nếu bạn không muốn có thêm khoảng trắng từ các khối. Bạn cũng có thể sử dụng thẻ trước để định dạng bên trong một khối.

Và bạn có thể làm điều này: style = 'text-align: center;'

Đối với ngành dọc, hãy xem: http://www.w3schools.com/cssref/pr_pos_vertical-align.asp

Đây là cách tốt nhất cho các khối và bố cục trang web, hãy truy cập vào đây và tìm hiểu linh hoạt tiêu chuẩn mới bắt đầu vào năm 2009. http://www.w3.org/TR/2014/WD-css-flexbox-1-20140325/# justify-content-property

Ngoài ra, w3schools có rất nhiều ví dụ về flex.


0

Giải pháp (không phải là tốt nhất, nhưng vẫn hoạt động đối với một số trường hợp) cho văn bản không di động với chiều rộng cố định. Hữu ích cho các trường hợp khi có một ít khoảng trống để "kéo dài" văn bản đến cuối dòng áp chót. Tạo một số ký hiệu ở cuối đoạn văn (thử nghiệm với độ dài của chúng) và ẩn nó đi; áp dụng cho vị trí tuyệt đối của đoạn văn hoặc chỉ sửa không gian trống bằng padding / marging.

Cách tính toán / trình duyệt chéo tốt cho văn bản căn giữa.

Ví dụ (đoạn trước):

.paragraph {
    width:455px;
    text-align:justify;
}

.center{
  display:block;
  text-align:center;
  margin-top:-17px;
}
<div class="paragraph">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Nullam id dolor id nibh ultricies vehicula ut id elit. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies vehicula ut id elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna,<br><center>vel scelerisque nisl consectetur et.</center></div>

Và sau khi sửa chữa:

.paragraph {
    width:455px;
    text-align:justify;
    position:relative;
}
.center{
  display:block;
  text-align:center;
  margin-top:-17px;
}
.paragraph b{
  opacity:0;

-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
filter: alpha(opacity=0);
-moz-opacity: 0;
-khtml-opacity: 0;
}
<div class="paragraph">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Nullam id dolor id nibh ultricies vehicula ut id elit. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies vehicula ut id elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, <b>__</b><br><div class="center">vel scelerisque nisl consectetur et.</div></div>


0

Đơn giản. Text-align: justify; (để căn chỉnh các phần tử) Padding-left:? px; (để căn giữa các phần tử)


0

Bạn cũng có thể chia phần tử thành hai thông qua HTML + JS.

HTML:

<div class='justificator'>
Lorem Ipsum is simply dummy text of the printing and typesetting industry. 
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, 
when an unknown printer took a galley of type and scrambled it to make a 
type specimen book.
</div>

JS:

function justify() {
    // Query for elements search
    let arr = document.querySelectorAll('.justificator');
    for (let current of arr) {
        let oldHeight = current.offsetHeight;
        // Stores cut part
        let buffer = '';

        if (current.innerText.lastIndexOf(' ') >= 0) {
            while (current.offsetHeight == oldHeight) {
                let lastIndex = current.innerText.lastIndexOf(' ');
                buffer = current.innerText.substring(lastIndex) + buffer;
                current.innerText = current.innerText.substring(0, lastIndex);
            }
            let sibling = current.cloneNode(true);
            sibling.innerText = buffer;
            sibling.classList.remove('justificator');
            // Center
            sibling.style['text-align'] = 'center';


            current.style['text-align'] = 'justify';
            // For devices that do support text-align-last
            current.style['text-align-last'] = 'justify';
            // Insert new element after current
            current.parentNode.insertBefore(sibling, current.nextSibling);
        }
    }
}
document.addEventListener("DOMContentLoaded", justify);

Đây là một ví dụ với thẻ div và p

function justify() {
    // Query for elements search
    let arr = document.querySelectorAll('.justificator');
    for (let current of arr) {
        let oldHeight = current.offsetHeight;
        // Stores cut part
        let buffer = '';

        if (current.innerText.lastIndexOf(' ') >= 0) {
            while (current.offsetHeight == oldHeight) {
                let lastIndex = current.innerText.lastIndexOf(' ');
                buffer = current.innerText.substring(lastIndex) + buffer;
                current.innerText = current.innerText.substring(0, lastIndex);
            }
            let sibling = current.cloneNode(true);
            sibling.innerText = buffer;
            sibling.classList.remove('justificator');
            // Center
            sibling.style['text-align'] = 'center';
            // For devices that do support text-align-last
            current.style['text-align-last'] = 'justify';
            current.style['text-align'] = 'justify';
            // Insert new element after current
            current.parentNode.insertBefore(sibling, current.nextSibling);
        }
    }
}
justify();
p.justificator {
    margin-bottom: 0px;
}
p.justificator + p {
    margin-top: 0px;
}
<div class='justificator'>
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
</div>
<p class='justificator'>It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
</p><p>Some other text</p>
Nhược điểm: không hoạt động khi chiều rộng trang thay đổi động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.