Sử dụng: trước phần tử giả CSS để thêm hình ảnh vào phương thức


116

Tôi có một lớp CSS Modalđược định vị tuyệt đối, được lập chỉ mục z phía trên lớp cha của nó và được định vị độc đáo với JQuery. Tôi muốn thêm hình dấu mũ (^) vào đầu hộp phương thức và đang xem xét việc sử dụng :beforebộ chọn giả CSS để thực hiện việc này một cách rõ ràng.

Hình ảnh cần được định vị tuyệt đối và được lập chỉ mục z phía trên phương thức, nhưng tôi không tìm thấy bất kỳ cách nào để thêm lớp thích hợp vào hình ảnh trong contentthuộc tính:

.Modal:before{
  content:url('blackCarrot.png') /* with class ModalCarrot ??*/
}

.ModalCarrot{
   position:absolute;
   left:50%;
   margin-left:-8px;
   top:-16px;
}

Tùy chọn tốt nhất thứ hai- tôi có thể thêm nội tuyến kiểu trong thuộc tính nội dung không?

Câu trả lời:


175

http://caniuse.com/#search=: after

:after:beforecontentthể sử dụng vì chúng được hỗ trợ trong mọi trình duyệt chính ngoài Internet Explorer ít nhất 5 phiên bản trở lại. Internet Explorer hỗ trợ hoàn toàn trong phiên bản 9+ và hỗ trợ một phần trong phiên bản 8.

Đây có phải là những gì bạn đang tìm kiếm?

.Modal:after{
  content:url('blackCarrot.png'); /* with class ModalCarrot ??*/
  position:relative; /*or absolute*/
  z-index:100000; /*a number that's more than the modal box*/
  left:-50px;
  top:10px;
}

.ModalCarrot{
   position:absolute;
   left:50%;
   margin-left:-8px;
   top:-16px;
}

Nếu không, bạn có thể giải thích rõ hơn một chút?

hoặc bạn có thể sử dụng jQuery, như Joshua đã nói:

$(".Modal").before("<img src='blackCarrot.png' class='ModalCarrot' />");


2
Điều này. Tuy nhiên, quan điểm của Joshua về khả năng tương thích của trình duyệt cũng đúng - IE8 hiển thị hình ảnh trong: sau nội dung, nhưng sẽ không hiển thị các phần của nó nằm ngoài biên giới gốc.
RSG

Hiện tại (năm 2017), IE 11 là phiên bản IE duy nhất vẫn được Microsoft hỗ trợ; vì vậy, không có gì đáng lo ngại về khả năng tương thích của IE8. Ngoài ra, giải pháp CSS hầu như luôn tốt hơn giải pháp jQuery vì chúng có xu hướng tải nhanh hơn nhiều và jQuery có thể gây nhấp nháy màn hình bằng cách viết lại bố cục của bạn sau khi trang được tải.
Nosajimiki

1
@Nosajimiki việc bạn có nên lo lắng về các trình duyệt cũ hơn hay không chủ yếu phụ thuộc vào khách truy cập của bạn.
Jose Faeti

35

Bạn nên sử dụng thuộc tính background để cung cấp hình ảnh cho phần tử đó và tôi sẽ sử dụng :: after thay vì trước đó, theo cách này, nó sẽ được vẽ trên đầu phần tử của bạn.

.Modal:before{
  content: '';
  background:url('blackCarrot.png');
  width: /* width of the image */;
  height: /* height of the image */;
  display: block;
}

Cảm ơn bạn đã gợi ý - phương thức có đường viền nên tôi không nghĩ mình có thể sử dụng hình nền để định vị hình ảnh củ cà rốt phía trên đường viền / màu bg khi cần thiết.
RSG

Tại sao không? nếu bạn hoàn toàn định vị phần tử giả đó, bạn có thể di chuyển nó xung quanh bằng các lề. Nó sẽ được vẽ trên đầu các đường viền phần tử khác và / hoặc màu bg.
Jose Faeti

Hình nền không thể mở rộng ra ngoài đường viền của div?
RSG

12
Bạn có thể cần thêm nội dung: ''; này để làm cho nó xuất hiện
Willster

13

1. đây là câu trả lời của tôi cho vấn đề của bạn.

.ModalCarrot::before {
content:'';
background: url('blackCarrot.png'); /*url of image*/
height: 16px; /*height of image*/
width: 33px;  /*width of image*/
position: absolute;
}

5
Tôi đã thêm background-size: 33px 16px; background-repeat: no-repeat;để chia tỷ lệ hình ảnh!
Hasse Björk

-4

Nội dung và trước đó đều không đáng tin cậy trên các trình duyệt. Tôi khuyên bạn nên gắn bó với jQuery để thực hiện điều này. Tôi không chắc bạn đang làm gì để tìm ra liệu cà rốt này có cần được bổ sung hay không, nhưng bạn nên có ý tưởng tổng thể:

$(".Modal").before("<img src='blackCarrot.png' class='ModalCarrot' />");

1
Điều này làm cho tôi buồn. Chúng tôi có một tập hợp các trình duyệt được nhắm mục tiêu rất hạn chế, vì vậy tôi vẫn quan tâm đến những gì có thể với CSS.
RSG

Ngay cả khi nội dung được sử dụng nhiều trong CSS3, theo những gì tôi đã thấy, nó vẫn là một trong những nội dung không được hỗ trợ đầy đủ ở bất kỳ đâu. Tôi tin rằng điều này liên quan đến một số nỗi sợ hãi có thể tiêm nhiễm những thứ xấu xa. Ngoài ra, tôi tin rằng nội dung cần một phần tử đã có sẵn để đưa vào - không chắc liệu tôi có thể tự mình thao tác DOM nhiều như vậy hay không.
Joshua

4
Câu trả lời này sai vì nó có hỗ trợ không đáng tin cậy trên các trình duyệt. Contentafter/beforerất đáng tin cậy trên mọi trình duyệt chính, nó đã hoạt động kể từ tức là 8, ít nhất là FF3.5, ít nhất là Chrome 9, ít nhất là Opera 10.6, ít nhất là Safari 3.2, mọi phiên bản iOS Safari, mọi phiên bản Opera mini, mọi phiên bản của Opera Mobile và phiên bản của trình duyệt Android. nếu bạn muốn biết nếu có điều gì được hỗ trợ qua trình duyệt, hãy kiểm tra: caniuse.com/#search=:after
android.nick

Chỉ vì internet nói rằng nó là như vậy, không có nghĩa là nó đúng. Làm việc với họ, họ hoạt động khác nhau trong mọi trình duyệt. Và IE 7 vẫn là một trình duyệt rất phổ biến, không hỗ trợ một trong hai trình duyệt này.
Joshua

3
Trên thực tế, bạn đang tốt hơn off với CSShơn JavaScriptvề thế này. Dù trình duyệt có chảy máu đến đâu, người dùng vẫn có thể JavaScriptbị vô hiệu hóa ... May mắn thay, trong trường hợp này :before, :afterbộ chọn và và được hỗ trợ rộng rãi; quirksmode.org/css/selectors
Steve Buzonas
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.