Sử dụng CSS: trước và: sau các phần tử giả với CSS nội tuyến?


141

Tôi đang tạo một chữ ký email HTML bằng CSS nội tuyến (nghĩa là CSS trong stylecác thuộc tính) và tôi tò mò liệu có thể sử dụng các phần tử giả :before:aftergiả hay không.

Nếu vậy, làm thế nào tôi có thể thực hiện một cái gì đó như thế này với CSS nội tuyến?

td { text-align: justify; }
td:after { content: ""; display: inline-block; width: 100%; }

8
Bạn không thể sử dụng các kiểu nội tuyến để nhắm mục tiêu các lớp giả hoặc các phần tử giả.
David nói phục hồi Monica


2
@Champ: Không phải cùng một câu hỏi, vì các phần tử giả và các lớp giả không giống nhau. Tôi đã viết câu trả lời của riêng tôi ở đây để giải thích.
BoltClock

Câu trả lời:


123

Bạn không thể chỉ định kiểu nội tuyến cho các phần tử giả.

Điều này là do các phần tử giả, như các lớp giả (xem câu trả lời của tôi cho câu hỏi khác này ), được định nghĩa trong CSS bằng cách sử dụng các bộ chọn làm trừu tượng của cây tài liệu không thể được biểu thị trong HTML. styleMặt khác, một thuộc tính nội tuyến được chỉ định trong HTML cho một thành phần cụ thể.

Vì các kiểu nội tuyến chỉ có thể xảy ra trong HTML, nên chúng sẽ chỉ áp dụng cho phần tử HTML mà chúng được xác định và không áp dụng cho bất kỳ phần tử giả nào mà nó tạo ra.

Bên cạnh đó, sự khác biệt chính giữa các phần tử giả và các lớp giả trong khía cạnh này là các thuộc tính được kế thừa theo mặc định sẽ được kế thừa bởi :before:aftertừ phần tử tạo, trong khi các kiểu giả lớp hoàn toàn không áp dụng. Trong trường hợp của bạn, ví dụ, nếu bạn đặt text-align: justifythuộc tính kiểu nội tuyến cho một tdphần tử, nó sẽ được kế thừa bởi td:after. Thông báo trước là bạn không thể khai báo td:aftervới thuộc tính kiểu nội tuyến; bạn phải làm điều đó trong bản định kiểu.


37

như đã đề cập ở trên: không thể gọi một dòng giả css-class / -element. những gì tôi đã làm bây giờ là: cung cấp cho phần tử của bạn một mã định danh duy nhất, f.ex. một id hoặc một lớp duy nhất. và viết một <style>yếu tố phù hợp

<style>#id29:before { content: "*";}</style>
<article id="id29">
  <!-- something -->
</article>

fugly, nhưng css nội tuyến nào không ..?


6
Đó không phải là CSS nội tuyến. CSS nội tuyến yêu cầu thuộc tính style = "" được truyền cho các thành phần HTML riêng lẻ. Thường được yêu cầu để gửi CSS được định dạng tới Gmail, loại bỏ mọi thứ trong thẻ <style>. Xem tại đây ( zurb.com/ink/inliner.php ) để biết thiết bị tự động
kez

Tôi nghĩ rằng đây là lần gần nhất bạn có thể nhận được các phần tử giả nội tuyến. Tốt hơn nữa, sử dụng các scopedkiểu mới và :rootlớp psuedo (điều này thật tuyệt) : <article><style scoped>:root:before { content: "*";}</style><!-- something --></article>.
Ben J

3
Sửa chữa: Sử dụng lớp :scopegiả:<article><style scoped>:scope:before { content: "*";}</style><!-- something --></article>
Ben J

1
Công cụ này rất mới, có thể không được thực hiện và có thể sẽ thay đổi. Đó là trong đặc tả HTMLscope hiện tại ( kiểu d)CSS Spec ( :scope) . Tôi cần phải có được rõ ràng hơn.
Ben J

Sử dụng thẻ <style> ... </ style> được gọi là CSS nội bộ hoặc nhúng, KHÔNG phải CSS nội tuyến.
James Anderson Jr.

14

Bạn có thể sử dụng dữ liệu trong dòng

 <style>   
 td { text-align: justify; }
 td:after { content: attr(data-content); display: inline-block; width: 100%; }
</style>

<table><tr><td data-content="post"></td></tr></table>

2
Điều này in data-contentthuộc tính như contentcho một phần tử giả. Nó không có gì để làm với việc tạo các phần tử giả bằng CSS nội tuyến.
Nils Muffersson

4
Tôi đến đây để tìm cách áp dụng các bộ chọn giả trong CSS nội tuyến và câu trả lời này cho tôi thấy một cách khác để đạt được điều tương tự. Nội dung cần phải dựa trên một số lượng lớn các tùy chọn có thể được tạo một cách linh hoạt và do đó không thực tế khi viết hàng đống bộ chọn CSS riêng cho mọi kết quả có thể.
wunth

4
Đây thực sự là một câu trả lời rất tốt cho ai đó đang tìm cách thêm nội dung động vào nội dung sau. Có thể không liên quan đến vấn đề này, nhưng câu hỏi này đang được hiển thị khi tìm kiếm giải pháp này thông qua Google.
Aleks


8

Không có bạn không thể nhắm mục tiêu các lớp giả hoặc các phần tử giả trong dòng-css như David Thomas nói. Để biết thêm chi tiết, hãy xem câu trả lời này của BoltClock về các lớp giả

Không. Thuộc tính style chỉ xác định các thuộc tính kiểu cho một phần tử HTML đã cho. Các lớp giả là một thành viên của họ các bộ chọn, không xuất hiện trong thuộc tính .....

Chúng ta cũng có thể viết sử dụng tương tự cho các phần tử giả

Không. Thuộc tính style chỉ xác định các thuộc tính kiểu cho một phần tử HTML đã cho. Các lớp giả và các phần tử giả là thành viên của họ bộ chọn, không xuất hiện trong thuộc tính để bạn không thể tạo kiểu cho chúng theo dòng.


Xem câu trả lời của tôi và nhận xét của tôi về câu hỏi.
BoltClock

vâng, không giống nhau. Nhưng lý do đằng sau mà họ không thể được sử dụng nội tuyến là như nhau phải không?
Champ

Các câu trả lời tương tự nhau, nhưng các câu hỏi rất khác nhau.
BoltClock

6

Bạn không thể tạo các phần tử giả trong css nội tuyến.

Tuy nhiên, nếu bạn có thể tạo phần tử giả trong biểu định kiểu, thì có một cách để định kiểu nội tuyến bằng cách đặt kiểu nội tuyến cho phần tử cha của nó, sau đó sử dụng từ khóa kế thừa để tạo kiểu cho phần tử giả, như sau:

<parent style="background-image:url(path/to/file); background-size:0px;"></p>

<style> 
   parent:before{
      content:'';
      background-image:inherit;
      (other)
   }
</style>

đôi khi điều này có thể được tiện dụng.


5

Có, có thể , chỉ cần thêm kiểu nội tuyến cho phần tử mà bạn thêm sau hoặc trước, Ví dụ

 <style>
     .horizontalProgress:after { width: 45%; }
 </style><!-- Change Value from Here -->

 <div class="horizontalProgress"></div>

22
Đây là một bản định kiểu nội tuyến. Không phải css nội tuyến.
Esger

4
Khác với thực tế là điều này không giải quyết được câu hỏi thực tế, mã này là sai ::after::beforecác phần tử giả cần content: valuenếu không nó mặc định dẫn đến content:nonekết quả là về cơ bản không có gì.
zer00ne

Sử dụng thẻ <style> ... </ style> được gọi là CSS nội bộ hoặc nhúng, KHÔNG phải CSS nội tuyến.
James Anderson Jr.

1

Như đã đề cập trước đó, bạn không thể sử dụng các phần tử nội tuyến để tạo kiểu các lớp giả . Trước và sau các lớp giả là trạng thái của các phần tử, không phải là các phần tử thực tế. Bạn chỉ có thể sử dụng JavaScript cho việc này.


Chúng là các yếu tố giả không phải là trạng thái.
dùng4642212

0

Nếu bạn có quyền kiểm soát HTML thì bạn có thể thêm một yếu tố thực sự thay vì giả. : before và: after các phần tử giả được hiển thị ngay sau thẻ mở hoặc ngay trước thẻ đóng. Tương đương nội tuyến cho css này

td { text-align: justify; }
td:after { content: ""; display: inline-block; width: 100%; }

Sẽ là một cái gì đó như thế này:

<table>
<tr>
<td style="text-align: justify;">
TD Content
<span class="inline_td_after" style="display: inline-block; width: 100%;"></span>
</td>
</tr>
</table>

Ghi nhớ; Các phần tử "thực" trước và sau của bạn và bất cứ thứ gì có css nội tuyến sẽ làm tăng đáng kể kích thước trang của bạn và bỏ qua tối ưu hóa tải trang mà các phần tử css và giả bên ngoài có thể thực hiện được.


0

bạn có thể dùng

parent.style.setProperty("--padding-top", (height*100/width).toFixed(2)+"%");

trong css

el:after{
  ....
  padding-top:var(--padding-top, 0px);
}
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.