Sử dụng CSS để chèn văn bản


207

Tôi còn khá mới với CSS và đã sử dụng nó để thay đổi kiểu dáng và định dạng của văn bản.

Bây giờ tôi muốn sử dụng nó để chèn văn bản như hình dưới đây:

<span class="OwnerJoe">reconcile all entries</span>

Mà tôi hy vọng tôi có thể hiển thị như:

Nhiệm vụ của Joe: điều hòa tất cả các mục

Đó là, đơn giản nhờ vào đẳng cấp của "Chủ sở hữu Joe", tôi muốn văn bản Joe's Task:được hiển thị.

Tôi có thể làm điều đó với mã như:

<span class="OwnerJoe">Joe's Task:</span> reconcile all entries.

Nhưng điều đó dường như vô cùng dư thừa để cả hai chỉ định lớp và văn bản.

Có thể làm những gì tôi đang tìm kiếm?

EDIT Một ý tưởng là cố gắng thiết lập nó dưới dạng ListItem <li>trong đó "viên đạn" là văn bản "Nhiệm vụ của Joe". Tôi thấy các ví dụ về cách đặt các kiểu đầu đạn khác nhau và thậm chí cả hình ảnh cho các viên đạn. Có thể sử dụng một khối nhỏ văn bản cho danh sách dấu đầu dòng không?


1
ý tưởng <li> không phải là thực hành tốt. Nếu bạn thực sự muốn điều này, thay vào đó hãy nhìn vào một ngôn ngữ khuôn mẫu.
Gary

1
Âm thanh như sử dụng CSS3: trước hoặc: sau các phần tử giả, bạn thực sự sẽ chuyển phần dư thừa sang vùng đất CSS (vì bạn sẽ cần thêm một câu lệnh CSS cho Chủ sở hữuJoe, Chủ sở hữu, v.v.)
Matt Beckman

2
@Matt Beckman: Điều đó tốt với tôi. Tôi có thể dễ dàng xác định các khối CSS cho mỗi người dùng của mình. Lặp đi lặp lại nó nhiều lần trong HTML có vẻ quá mức trong trường hợp của tôi.
abelenky

1
Tôi cảm thấy việc sử dụng điều này thực tế hơn cho đối tượng rộng hơn sẽ giống như label.required:before {content: "* ";}thêm một dấu sao trước các trường bắt buộc, có lẽ.
Patrick

Câu trả lời:


317

Đó là, nhưng yêu cầu một trình duyệt có khả năng CSS2 (tất cả các trình duyệt chính, IE8 +).

.OwnerJoe:before {
  content: "Joe's Task:";
}

Nhưng tôi muốn khuyên bạn nên sử dụng Javascript cho việc này. Với jQuery:

$('.OwnerJoe').each(function() {
  $(this).before($('<span>').text("Joe's Task: "));
});

4
Nên là một khoảng trống sau đại tràng.
hệ thống PAUSE

7
Các thử nghiệm ban đầu cho thấy tài sản nội dung hoạt động tốt. Chúc mừng bạn đã tìm được câu trả lời khi những người khác nói rằng điều đó không thể thực hiện được. :)
abelenky

8
Để bao quát IE cũ hơn, bạn có thể bao gồm code.google.com/p/ie7-js một cách có điều kiện, điều này sẽ cho phép CSS của bạn giữ nguyên cho tất cả các trình duyệt. Đây là một giải pháp thay thế cho jQuery gần với các tiêu chuẩn hơn.
hệ thống PAUSE

14
Tại sao bạn muốn giới thiệu sử dụng Javascript?
Rikki

Thú vị: dường như làm việc với một hoặc hai dấu hai chấm, ví dụ .OwnerJoe:before.OwnerJoe::before
Ông Kennedy

40

Câu trả lời sử dụng jQuery mà mọi người dường như thích đều có một lỗ hổng lớn, đó là nó không thể mở rộng được (ít nhất là khi nó được viết). Tôi nghĩ Martin Hansen có ý tưởng đúng, đó là sử dụng các data-*thuộc tính HTML5 . Và bạn thậm chí có thể sử dụng dấu nháy đơn một cách chính xác:

html:

<div class="task" data-task-owner="Joe">mop kitchen</div>
<div class="task" data-task-owner="Charles" data-apos="1">vacuum hallway</div>

css:

div.task:before { content: attr(data-task-owner)"'s task - " ; }
div.task[data-apos]:before { content: attr(data-task-owner)"' task - " ; }

đầu ra:

Joe's task - mop kitchen
Charles' task - vacuum hallway

19
Một tác dụng phụ thú vị khi sử dụng nội dung css trái ngược với jQuery là văn bản được cung cấp bởi thuộc tính nội dung không thể chọn được, điều này có thể hoặc không thể mong muốn ....
Jeff

Nếu văn bản là một phần của bố cục trang và không phải là một phần của nội dung, có thể CSS là nơi phù hợp cho nó. Ví dụ: nếu bạn muốn trang của bạn trên tất cả các trang là dòng chữ "Hello World" màu tím trên nền màu xanh lá cây vôi, điều đó sẽ có ý nghĩa. Tất cả những gì bạn cần để thay đổi tiêu đề trang của bạn là chỉnh sửa một tệp CSS. Nếu bạn có văn bản trong HTML, nó sẽ chỉnh sửa từng trang trên trang web của bạn và có lẽ cũng thay đổi đối với ứng dụng web của bạn.

28

Ngoài ra kiểm tra hàm attr () của thuộc tính nội dung CSS. Nó xuất ra một thuộc tính đã cho của phần tử dưới dạng nút văn bản. Sử dụng nó như vậy:

<div class="Owner Joe" />

div:before {
  content: attr(class);
}

Hoặc thậm chí với các thuộc tính dữ liệu tùy chỉnh HTML5 mới:

<div data-employeename="Owner Joe" />

div:before {
  content: attr(data-employeename);
}

2
Đó là một ý tưởng tốt hơn - tôi ghét ý tưởng tạo một lớp css để hiển thị nội dung. Nó có thể kết thúc việc tạo css một cách linh hoạt dựa trên truy vấn sql. Tôi sẽ thay thế bộ chọn bằng div[data-employeename]:before.
Johnny5

6

Chỉ cần mã nó như thế này:

.OwnerJoe {
  //other things here
  &:before{
    content: "Joe's Task: ";
  }
}

18
Đây không phải là CSS hợp lệ, nhưng cú pháp Sass.
Asfand Qazi 17/03/2016
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.