Thụt lề bắt đầu từ dòng thứ hai của đoạn văn bằng CSS


102

Làm cách nào để thụt lề bắt đầu từ dòng thứ hai của đoạn văn?

Tôi đã thử

p {
    text-indent: 200px;
}
p:first-line {
    text-indent: 0;
}

p {
    margin-left: 200px;
}
p:first-line {
    margin-left: 0;
}

(with position:relative;)
p {
    left: 200px;
}
p:first-line {
    left: 0;
}

Tại sao tất cả thụt lề văn bản dòng đầu tiên của bạn được đặt thành 0? Ngoài ra, tôi không biết làm thế nào để làm điều này, nhưng cái bị thiếu trong danh sách này là cái có ý nghĩa nhất đối với tôi, padding.
Skarlinski

Câu trả lời:


211

Theo nghĩa đen, nó chỉ là dòng thứ hai mà bạn muốn thụt lề, hay nó từ dòng thứ hai (tức là một thụt lề treo )?

Nếu nó là cái sau, một cái gì đó dọc theo dòng JSFiddle này sẽ thích hợp.

    div {
        padding-left: 1.5em;
        text-indent:-1.5em;
    }
    
    span {
        padding-left: 1.5em;
        text-indent:-1.5em;
    }
<div>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</div>

<span>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</span>

Ví dụ này cho thấy cách sử dụng cùng một cú pháp CSS trong DIV hoặc SPAN tạo ra các hiệu ứng khác nhau.


3
@Reuben Dựa trên nhận xét của bạn hiện đã bị xóa, tôi cho rằng bạn đã làm đúng nghĩa là TỪ dòng thứ hai - và vì lợi ích của những khách truy cập trong tương lai, có lẽ cú pháp này tốt hơn, trong đó cú pháp là P chứ không phải div hoặc span. jsfiddle.net/gg9Hx
web reddit.com

1
Tại sao lại sử dụng padding-left và sau đó là âm bản-thụt lề? Tại sao nó phải hoạt động như vậy? Có vẻ kỳ quặc. Tại sao không chỉ là một tích cực text-indent?
Don Cheadle

2
Thụt lề văn bản không ảnh hưởng đến khoảng cách. Nó có thể được xóa khỏi kiểu dáng của span để có kết quả tương tự.
Sam Hasler

25

Đặt lề trái: 2em hoặc lâu hơn sẽ đẩy toàn bộ văn bản bao gồm dòng đầu tiên sang phải 2em. Hơn là thêm thụt lề văn bản (áp dụng cho dòng đầu tiên) dưới dạng -2em hoặc lâu hơn .. Điều này đưa dòng đầu tiên trở lại bắt đầu mà không có lề. Tôi đã thử nó cho các thẻ danh sách

<style>
    ul li{
      margin-left: 2em;
      text-indent: -2em;
    }
</style>

24

Điều này đã làm việc cho tôi:

p { margin-left: -2em; 
 text-indent: 2em 
 }

10
Điều này dường như hoàn toàn trái ngược với những gì OP đã yêu cầu. Phiên bản của @ techillage là đúng. Bạn cần phải trao đổi trừ xung quanh
Alex Holsgrove

1
Đây gần như là chính xác những gì tôi cần. Câu trả lời được chấp nhận sẽ không phù hợp với tôi vì tôi không có quyền tự do trong CMS của mình để thêm các khoảng thời gian theo cách đó. Vấn đề duy nhất mà tôi gặp phải với giải pháp ở đây, đó là lề trái sẽ kéo toàn bộ đoạn văn ra bên ngoài vùng chứa. Vì vậy, tôi đã thêm 'vị trí: tương đối' và 'trái: 2em' và nó là hoàn hảo. Trái ngược với nhận xét của @AlexHolsgrove, câu trả lời của techillage hoàn toàn không phù hợp với tôi, nhưng có thể vì tôi không thực hiện điều này trên một phần tử danh sách.
Stu Furlong

2

Tôi cần phải thụt lề hai hàng để cho phép một từ đầu tiên lớn hơn trong đoạn văn. Giải pháp một lần rườm rà là đặt văn bản vào một phần tử SVG và định vị phần tử này giống như một <img>. Sử dụng float và thẻ chiều cao của SVG xác định số hàng sẽ được thụt vào, ví dụ:

<p style="color: blue; font-size: large; padding-top: 4px;">
<svg height="44" width="260" style="float:left;margin-top:-8px;"><text x="0" y="36" fill="blue" font-family="Verdana" font-size="36">Lorum Ipsum</text></svg> 
dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
  • Chiều cao và chiều rộng của SVG xác định khu vực bị chặn.
  • Y = 36 là độ sâu của đường cơ sở văn bản SVG và giống như kích thước phông chữ
  • margin-top's cho phép căn chỉnh tốt nhất văn bản SVG và văn bản para
  • Hai từ đầu tiên được sử dụng ở đây để nhắc nhở việc chăm sóc cần thiết cho những người xuống cấp

Có nó là cồng kềnh nhưng nó cũng không phụ thuộc vào chiều rộng của div chứa.

Câu trả lời ở trên là cho truy vấn của riêng tôi để cho phép (các) từ đầu tiên của một para lớn hơn và được đặt trên hai hàng. Để chỉ cần thụt lề hai dòng đầu tiên của para, bạn có thể thay thế tất cả các thẻ SVG bằng một pixel img sau:

<img src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" style="float:left;width:260px;height:44px;" />


1

Nếu bạn định dạng như danh sách

  • bạn có thể "text-align: initial" và các dòng tiếp theo sẽ thụt lề. Tôi nhận thấy điều này có thể không phù hợp với nhu cầu của bạn, nhưng tôi đang kiểm tra xem có giải pháp nào khác không trước khi thay đổi đánh dấu của mình ..

    Tôi đoán việc đưa dòng thứ hai vào cũng sẽ hiệu quả, nhưng đòi hỏi tư duy của con người để nội dung trôi chảy đúng cách, và tất nhiên, ngắt dòng khó (điều này không làm phiền tôi, theo tôi).


  • 1
    chào mừng bạn đến với Stackoverflow. Có vẻ như bạn có một số giải pháp cho vấn đề thụt lề này. Tuy nhiên, sẽ rất hữu ích cho mọi người nếu bạn cung cấp một số đánh dấu và giải thích giải pháp. Có thể bạn có thể sử dụng jsfiddle.net hoặc dịch vụ khác để tạo bản demo hoạt động. Tất cả những gì tốt nhất.
    EGL 2-101
    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.