Thêm một khoảng trắng (xóa Trực tiếp) sau một phần tử bằng cách sử dụng: after


274

Tôi muốn thêm một khoảng trống sau một số nội dung, tuy nhiên content: " ";dường như không hoạt động.

Đây là mã của tôi:

h2:after {
    content: " ";
}

... không hoạt động, tuy nhiên điều này không:

h2:after {
    content: "-";
}

Tôi đang làm gì sai?


2
Tôi không hiểu kết quả mong đợi. Bạn đang cố gắng thêm paddingbằng cách sử dụng content. Có vẻ như không thể biết được nếu không gian được thêm vào.
fncomp

2
Đó là một câu hỏi kỳ lạ, bạn nên sử dụng phần đệm để thêm không gian, không có nội dung: sau đó , có thể bạn không biết về sự khác biệt giữa display: inline và display: block?
Littlemad

Tôi đang cố gắng thêm phần đệm qua nội dung.
bradley.ayers

2
Tôi thấy việc thêm một khoảng trắng bằng phương thức này cũng hữu ích khi overflow: hiddenmột phần tử khối sẽ cắt đi một vài pixel cuối của ký tự cuối cùng của văn bản in nghiêng. Đệm sẽ không giúp đỡ trong trường hợp này.
Joe Waller

3
Đệm không giúp đỡ nếu bạn muốn không gian của bạn được gạch chân bằng cách sử dụng text-decoration: underline;một trong hai.
dmitry_romanov

Câu trả lời:


142

Giải trình

Điều đáng chú ý là mã của bạn không chèn một khoảng trắng

h2::after {
  content: " ";
}

Tuy nhiên, nó ngay lập tức bị loại bỏ.

Từ hộp nội tuyến ẩn danh ,

Nội dung khoảng trắng sau đó sẽ bị thu gọn theo thuộc tính 'khoảng trắng' không tạo ra bất kỳ hộp nội tuyến ẩn danh nào.

Và từ mô hình xử lý 'khoảng trắng' ,

Nếu một khoảng trắng (U + 0020) ở cuối dòng có 'khoảng trắng' được đặt thành 'bình thường', 'nowrap' hoặc 'trước dòng', nó cũng bị xóa.

Giải pháp

Vì vậy, nếu bạn không muốn xóa khoảng trống, hãy đặt white-spacethành prehoặc pre-wrap.

h2 {
  text-decoration: underline;
}
h2.space::after {
  content: " ";
  white-space: pre;
}
<h2>I don't have space:</h2>
<h2 class="space">I have space:</h2>

Không sử dụng khoảng trắng không phá vỡ (U + 00a0). Chúng được cho là để ngăn chặn ngắt dòng giữa các từ. Chúng không được sử dụng như là không gian không thể thu gọn, đó sẽ không phải là ngữ nghĩa.


3
Có vẻ như white-spacekhông được hỗ trợ trong iE11 cũng như Edge (xem caniuse.com/#search=white-space ). Do đó, câu trả lời của người dùng bradley.ayers tốt hơn? (Tôi không biết, có những khía cạnh khác như ngữ nghĩa hoặc hành vi ngắt dòng)
chimos

561

Hóa ra nó cần phải được chỉ định thông qua unicode thoát. Câu hỏi này có liên quan và chứa câu trả lời.

Giải pháp:

h2:after {
    content: "\00a0";
}

64
Không có gì đáng nói rằng điều này sẽ thêm một không gian KHÔNG HẤP DẪN. Nếu bạn muốn có một không gian bình thường, bạn cần "\ 0020" thay vì "\ 00A0".
Offlein

4
Cũng có thể đáng chú ý, rằng thêm một không gian bình thường sẽ không làm gì cả. Nếu bạn không có khoảng trắng giữa văn bản trong phần này và phần tử trước, phần này sẽ không thêm phần nào. Một không gian bình thường sẽ sụp đổ vào chính nó.
mheim

2
@ Offerlein vui lòng thêm `\ 0020` làm câu trả lời riêng vì một số phông chữ, ví dụ: Font Awesome sẽ không cho phép \00A0hiển thị khoảng trắng và nếu bạn muốn có khoảng trắng giữa các thành phần thay vì trước hoặc sau khi bạn không thể sử dụng phần đệm
Mousey

Làm thế nào để bạn thêm không gian sau khi một cái gì đó đã có trong nội dung?
vsync

2
@ FrançoisDupont, bạn có tài nguyên mô tả sự thay đổi này không?
isherwood

9

Tôi cần điều này thay vì sử dụng phần đệm bởi vì tôi đã sử dụng các thùng chứa khối nội tuyến để hiển thị một loạt các sự kiện riêng lẻ trong dòng thời gian của công việc. Sự kiện cuối cùng trong dòng thời gian không cần mũi tên sau nó.

Kết thúc với một cái gì đó như:

.transaction-tile:after {
  content: "\f105";
}

.transaction-tile:last-child:after {
  content: "\00a0";
}

Đã sử dụng fontawgie cho ký tự gt (chevron). Vì lý do gì "nội dung: không có;" đã tạo ra các vấn đề liên kết trên gạch cuối cù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.