Thêm các thực thể HTML bằng nội dung CSS


1013

Làm thế nào để bạn sử dụng thuộc tính CSS content để thêm các thực thể HTML ?

Sử dụng một cái gì đó như thế này chỉ in  ra màn hình thay vì không gian không phá vỡ:

.breadcrumbs a:before {
    content: ' ';
}

5
Theo một nghĩa khác, việc thêm nội dung bằng CSS vi phạm sự phân tách các mối quan tâm, CSS chỉ dành cho các định nghĩa kiểu. Tốt nhất là nên tránh từ quan điểm tiếp cận, vì vô hiệu hóa các ốc vít CSS lên toàn bộ đánh dấu lên. Tuy nhiên, thật tuyệt khi thêm hình ảnh bằng kỹ thuật này.
Questzen

95
Nó phụ thuộc. Trong trường hợp này là cho mục đích trình bày. Nó sẽ "vi phạm" SoC để đặt ">" vào html
mathieu

2
Chỉ là một câu hỏi, bạn có nghĩ rằng sẽ tốt hơn khi là một danh sách theo thứ tự? Ý tôi là, đó là một danh sách với một đơn đặt hàng phải không?
alex

3
@questzen - Tôi nghĩ rằng việc sử dụng CSS :afterđể đặt CSS là hoàn toàn chấp nhận được (và hình thức tốt) , ví dụ, chỉ báo sắp xếp asc / desc trên một cột được sắp xếp.
Josh M.

9
Tôi nhận thấy mọi người đã phát điên về nguyên tắc SoC. Trời, loại nội dung nào là dấu ">" cho bạn?! Có lòng nhân từ! nó chỉ là một biểu tượng trong ngữ cảnh này, một vật dụng, một viên đạn, bạn đặt tên cho nó. Đối với tôi nội dung là một cái gì đó tôi muốn được tìm kiếm.
user776686

Câu trả lời:


1063

Bạn phải sử dụng unicode đã thoát:

Giống

.breadcrumbs a:before {
    content: '\0000a0';
}

Thông tin thêm về: http://www.evotech.net/blog/2007/04/named-html-entities-in-numeric-order/


57
Các số 0 đứng đầu là không cần thiết, xem Chuỗi CSS 2.1: 4.3.7 . '>\a0'đủ.
PointedEars

18
@dlamblin Hơn nữa, để tránh các ký tự được hiểu là một phần của chuỗi thoát đáng tin cậy , hãy thêm khoảng trắng tiêu chuẩn: '>\a0 bc'được hiển thị > bc.
PointedEars

18
Công cụ của tôi amp-what.com/#q=%3E cung cấp chế độ "CSS". Chọn "css" ở cuối trang. Mỗi tham chiếu CSS ở trên, chúng cần được phân định không gian khi chúng không rõ ràng.
ndp

@mathieu Bạn có thể sử dụng 'nội dung' để chắp thêm hình ảnh không? Chỉ cần tự hỏi
thiết kế weia

1
@Adam, không, nếu bạn muốn chắp thêm hình ảnh, hãy sử dụng "hình nền" và hiển thị: inline-block; và chiều rộng: 123px; chiều cao: 123px; (sử dụng chiều rộng / chiều cao chính xác)
Nathan JB

177

CSS không phải là HTML.  là một tham chiếu ký tự được đặt tên trong HTML; tương đương với tham chiếu ký tự số thập phân  . 160 là điểm mã thập phân của NO-BREAK SPACEký tự trong Unicode (hoặc UCS-2 ; xem Đặc tả HTML 4.01 ). Biểu diễn thập lục phân của điểm mã đó là U + 00A0 (160 = 10 × 16 1 + 0 × 16 0 ). Bạn sẽ thấy rằng trong Biểu đồCơ sở dữ liệu Ký tự Unicode .

Trong CSS, bạn cần sử dụng chuỗi thoát Unicode cho các ký tự như vậy, dựa trên giá trị thập lục phân của điểm mã của ký tự. Vì vậy, bạn cần phải viết

.breadcrumbs a:before {
  content: '\a0';
}

Điều này hoạt động miễn là chuỗi thoát đến cuối cùng trong một giá trị chuỗi. Nếu các nhân vật làm theo, có hai cách để tránh giải thích sai:

a) (được đề cập bởi người khác) Sử dụng chính xác sáu chữ số thập lục phân cho chuỗi thoát:

.breadcrumbs a:before {
  content: '\0000a0foo';
}

b) Thêm một ký tự khoảng trắng (ví dụ: khoảng trắng) sau chuỗi thoát:

.breadcrumbs a:before {
  content: '\a0 foo';
}

(Vì flà một chữ số thập lục phân, \a0fnếu không có nghĩa là GURMUKHI LETTER EEở đây, hoặc ਏ nếu bạn có một phông chữ phù hợp.)

Không gian màu trắng phân định sẽ bị bỏ qua và điều này sẽ được hiển thị  foo, trong đó không gian hiển thị ở đây sẽ là một NO-BREAK SPACEký tự.

Cách tiếp cận không gian trắng ( '\a0 foo') có những ưu điểm sau so với cách tiếp cận sáu chữ số ( '\0000a0foo'):

  • việc nhập dễ dàng hơn , bởi vì các số 0 đứng đầu là không cần thiết và các chữ số không cần phải đếm;
  • dễ đọc hơn , bởi vì có khoảng trắng giữa chuỗi thoát và văn bản theo sau, và các chữ số không cần phải đếm;
  • đòi hỏi ít không gian hơn , bởi vì các số 0 đứng đầu là không cần thiết;
  • tương thích lên trên , bởi vì các điểm mã hỗ trợ Unicode ngoài U + 10FFFF trong tương lai sẽ yêu cầu sửa đổi Đặc tả CSS.

Do đó, để hiển thị một khoảng trắng sau một ký tự thoát, sử dụng hai khoảng trắng trong biểu định kiểu -

.breadcrumbs a:before {
  content: '\a0  foo';
}

- hoặc làm cho nó rõ ràng:

.breadcrumbs a:before {
  content: '\a0\20 foo';
}

Xem CSS 2.1, phần "4.1.3 Ký tự và trường hợp" để biết chi tiết.


+1 cho thủ thuật "hiển thị khoảng trắng sau ký tự thoát", nhưng phải đề cập đến việc thêm an nbsp và sau đó là một loại không gian đánh bại mục đích của nbsp;)
TWiStErRob

@TWiStErRob Không, sự kết hợp của một ký tự không gian không phá vỡ theo sau là một ký tự dấu cách (hoặc ngược lại) sẽ hiển thị một khoảng cách về chiều rộng của hai ký tự khoảng trắng, trong khi hai hoặc nhiều ký tự không gian nguyên văn sẽ chỉ hiển thị một khoảng trống chiều rộng của một ký tự khoảng trắng khi trình phân tích cú pháp của công cụ bố trí thu gọn khoảng trắng phá vỡ liên tiếp (bao gồm cả dòng mới) thành một ký tự khoảng trắng trừ khi thuộc tính white-spaceCSS tuyên bố khác.
PointedEars

vâng, tôi biết về sự sụp đổ, nhưng quan điểm của nó là nó không bị phá vỡ, các ký tự từ cũng không bị phá vỡ theo mặc định, vì vậy việc thêm một khoảng trắng bên cạnh một dấu ngắt không có ý nghĩa, kết quả cuối cùng sẽ là phá vỡ. Tôi đang nói về white-space: normal.
TWiStErRob

@TWiStErRob Vui lòng đọc kỹ câu trả lời của tôi. Đó là một ví dụ cho màn hình hiển thị [ing] một khoảng trắng sau khi một nhân vật thoát được thoát ra. Mã ban đầu có một NO-BREAK SPACEký tự, vì vậy tôi đã sử dụng chuỗi thoát cho nó. Bạn có thể chọn bất kỳ chuỗi thoát nào khác; nếu được yêu cầu, bạn cũng có thể khai báo white-space: nowrap.
PointedEars

81

Cập nhật : PointedEars đề cập rằng vị trí chính xác  trong tất cả các tình huống css sẽ
'\a0 'ngụ ý rằng không gian là một đầu cuối của chuỗi hex và được hấp thụ bởi chuỗi thoát. Ông tiếp tục chỉ ra mô tả có thẩm quyền này có vẻ như là một giải pháp tốt cho vấn đề tôi đã mô tả và khắc phục dưới đây.

Những gì bạn cần làm là sử dụng unicode đã thoát. Mặc dù những gì bạn đã nói \00a0không phải là một điểm nhấn hoàn hảo cho  CSS; hãy thử

content:'>\a0 ';          /* or */
content:'>\0000a0';       /* because you'll find: */
content:'No\a0 Break';    /* and */
content:'No\0000a0Break'; /* becomes No Break as opposed to below */

Cụ thể sử dụng \0000a0như  . Nếu bạn cố gắng, như được đề xuất bởi mathieu và millikin:

content:'No\00a0Break'   /* becomes No਋reak */

Nó đưa B vào các ký tự thoát hex. Điều tương tự xảy ra với 0-9a-fA-F.


6
Bạn chỉ cần đặt một khoảng trắng sau chuỗi thoát, như được chỉ định : '\a0 Break'. '\0000a0Break'không đáng tin cậy.
PointedEars

@PointedEars Thú vị, vậy thì không gian này là dấu kết thúc và không được đưa vào chuỗi?
dlamblin

2
Xem CSS 2.1, phần "4.1.3 Ký tự và trường hợp" . Điều này cũng cho thấy cách tiếp cận của bạn NÊN đáng tin cậy theo CSS 2.1. Nhưng tôi thấy cách tiếp cận khoảng trắng sạch hơn (tương thích hướng lên) và có dấu chân nhỏ hơn.
PointedEars

47

Trong CSS, bạn cần sử dụng chuỗi thoát Unicode thay cho các Thực thể HTML. Điều này dựa trên giá trị thập lục phân của một ký tự.

Tôi thấy rằng cách dễ nhất để chuyển đổi biểu tượng thành tương đương thập lục phân của chúng là, chẳng hạn như từ ▾ ( ▾) \25BEsang sử dụng máy tính Microsoft =)

Đúng. Bật chế độ lập trình viên, bật hệ thống thập phân, nhập 9662, sau đó chuyển sang hex và bạn sẽ nhận được 25BE. Sau đó, chỉ cần thêm một dấu gạch chéo ngược \vào đầu.


4
Mặc dù hoàn toàn hữu ích, nhưng nó không thực sự trả lời câu hỏi vì vậy điều này sẽ tốt hơn khi bình luận cho câu hỏi.
dlamblin

1
Mũi tên nhỏ màu đen bên phải (▸ \25B8 ▸ ▸) ftw. Ngoài ra, xem en.wikipedia.org/wiki/Geometric_Shapes để biết thêm.
Joel Purra

2Joel Purra, đọc Wiki nhiều thời gian hơn. bạn nhầm các biểu tượng.
netgoblin

@netgoblin: làm sao vậy? Tôi chỉ tình cờ thích mũi tên nhỏ màu đen bên phải.
Joel Purra

1
Tôi sử dụng graphemica.com này nơi bạn có thể nhận được Thập phân, thập lục phân, v.v.
Mike

34

Sử dụng mã hex cho một không gian không phá vỡ. Một cái gì đó như thế này:

.breadcrumbs a:before {
    content: '>\00a0';
}

17

Có một cách để dán nbsp- mở CharMap và sao chép ký tự 160 . Tuy nhiên, trong trường hợp này có lẽ tôi sẽ tạo khoảng trống bằng phần đệm, như thế này:

.breadcrumbs a:before { content: '>'; padding-right: .5em; }

Bạn có thể cần phải đặt mẩu bánh mì display:inline-blockhoặc một cái gì đó, mặc dù.


4
Thay vì dán nbsp, tôi sẽ sử dụng một thực thể, để các nhà bảo trì trong tương lai thấy rõ rằng nó khác với một không gian.
nickf

2
mặt khác, bạn không làm vụn bánh mì như chúng được cho là, nghĩa là: biểu tượng> phải phù hợp với mẩu bánh mì, và không chỉ là một kiểu trực quan. ít nhất nếu bạn muốn google thấy mẩu bánh mì của bạn và liệt kê chúng dưới danh sách của bạn trong công cụ tìm kiếm.
Mất trí nhớ

10

Ví dụ :

http://character-code.com/arrows-html-codes.php

Ví dụ: Nếu bạn muốn chọn nhân vật của mình, tôi đã chọn "& # 8620" "& # x21ac" (Chúng tôi sử dụng các giá trị HEX )

.breadcrumbs a:before {
    content: '\0021ac';
}

Kết quả:

Đó là nó :)


tôi đã sử dụng nội dung: '\ 10095'; . Nhưng đầu ra không hiển thị. thay vì biểu tượng, nó hiển thị hình chữ nhật.
kapil

0

Tôi biết đây là một bài viết khá cũ, nhưng nếu khoảng cách là tất cả sau đó của bạn, tại sao không chỉ đơn giản là:

.breadcrumbs a::before {
    content: '>';
    margin-left: 8px;
    margin-right: 8px;
}

Tôi đã sử dụng phương pháp này trước đây. Nó kết thúc hoàn hảo tốt cho các dòng khác với ">" bên cạnh thử nghiệm của tôi.


-2

Đây là hai cách:

  • Trong HTML:

    <div class="ics">&#9969;</div>

Điều này sẽ dẫn đến

  • Trong Css:

    .ics::before {content: "\9969;"}

với mã HTML <div class="ics"></div>

Điều này cũng dẫn đến


Câu trả lời đúng là .ics :: trước {nội dung: '\ 9969';}
Marco Scarnatto
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.