Menggunakan: sebelum elemen pseudo CSS untuk menambahkan gambar ke modal

116

Saya memiliki kelas CSS Modalyang benar-benar diposisikan, diindeks-z di atas induknya, dan diposisikan dengan baik dengan JQuery. Saya ingin menambahkan gambar sisipan (^) ke bagian atas kotak modal dan sedang menggunakan :beforeselektor semu CSS untuk melakukan ini dengan rapi.

Gambar harus benar-benar diposisikan dan diindeks z di atas modal, tetapi saya belum menemukan cara untuk menambahkan kelas yang sesuai ke gambar di contentatribut:

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

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

Opsi terbaik kedua- dapatkah saya menambahkan gaya sebaris di atribut konten?

RSG
sumber

Jawaban:

175

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

:afterdan :beforedengan contentboleh digunakan karena didukung di setiap browser utama selain Internet Explorer setidaknya 5 versi sebelumnya. Internet Explorer memiliki dukungan penuh pada versi 9+ dan dukungan parsial pada versi 8.

Apakah ini yang kamu cari?

.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;
}

Jika tidak, dapatkah Anda menjelaskan sedikit lebih baik?

atau Anda bisa menggunakan jQuery, seperti yang dikatakan Joshua:

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

android.nick
sumber
2
Ini. Poin Joshua tentang kompatibilitas browser juga benar- IE8 membuat gambar di: setelah konten, tetapi tidak akan membuat bagian-bagiannya yang berada di luar batas induk.
RSG
Sekarang (tahun 2017), IE 11 adalah satu-satunya versi IE yang masih didukung oleh Microsoft; jadi, tidak ada gunanya mengkhawatirkan kompatibilitas IE8. Selain itu, solusi CSS hampir selalu lebih baik daripada solusi jQuery karena cenderung memuat lebih cepat dan jQuery dapat menyebabkan layar berkedip dengan menulis ulang tata letak Anda setelah halaman dimuat.
Nosajimiki
1
@Nosajimiki perlu atau tidaknya Anda khawatir tentang peramban lama sangat bergantung pada pengunjung Anda.
Jose Faeti
35

Anda harus menggunakan atribut background untuk memberikan gambar ke elemen itu, dan saya akan menggunakan :: setelah daripada sebelumnya, dengan cara ini seharusnya sudah digambar di atas elemen Anda.

.Modal:before{
  content: '';
  background:url('blackCarrot.png');
  width: /* width of the image */;
  height: /* height of the image */;
  display: block;
}
Jose Faeti
sumber
Terima kasih atas sarannya- modal memiliki batas jadi saya rasa saya tidak dapat menggunakan gambar latar belakang untuk memposisikan gambar wortel di atas warna batas / bg sesuai kebutuhan.
RSG
Kenapa tidak? jika Anda benar-benar memposisikan elemen semu itu, Anda dapat memindahkannya dengan margin. Ini akan digambar di atas batas elemen lain dan / atau warna bg.
Jose Faeti
Gambar latar belakang tidak boleh melampaui batas div?
RSG
12
Anda mungkin perlu menambahkan konten: ''; untuk membuatnya muncul
Willster
13

1. inilah jawaban saya untuk masalah Anda.

.ModalCarrot::before {
content:'';
background: url('blackCarrot.png'); /*url of image*/
height: 16px; /*height of image*/
width: 33px;  /*width of image*/
position: absolute;
}
hoang thao
sumber
5
Saya menambahkan background-size: 33px 16px; background-repeat: no-repeat;untuk menskalakan gambar!
Hasse Björk
-4

Konten dan sebelumnya keduanya sangat tidak dapat diandalkan di seluruh browser. Saya menyarankan tetap menggunakan jQuery untuk mencapai ini. Saya tidak yakin apa yang Anda lakukan untuk mengetahui apakah wortel ini perlu ditambahkan atau tidak, tetapi Anda harus mendapatkan gambaran keseluruhan:

$(".Modal").before("<img src='blackCarrot.png' class='ModalCarrot' />");
Joshua
sumber
1
Ini membuatku sedih. Untungnya, kami memiliki seperangkat browser target yang terbatas, jadi saya masih tertarik dengan apa yang bisa dilakukan dengan CSS.
RSG
Bahkan dengan konten yang banyak digunakan di CSS3, dari apa yang saya lihat itu masih salah satu yang tidak sepenuhnya didukung di mana pun. Saya percaya ini ada hubungannya dengan beberapa ketakutan bisa menyuntikkan hal-hal jahat. Selain itu, saya yakin konten membutuhkan elemen yang sudah ada untuk dimasukkan - tidak yakin apakah saya dapat memanipulasi DOM sebanyak itu sendiri.
Joshua
4
Jawaban ini salah karena memiliki dukungan yang tidak dapat diandalkan di seluruh browser. Contentdan after/beforesangat andal di setiap browser utama, ini berfungsi sejak ie8, setidaknya FF3.5, setidaknya Chrome 9, setidaknya Opera 10.6, setidaknya Safari 3.2, setiap versi iOS Safari, setiap versi Opera mini, setiap versi Opera Mobile, dan versi browser Android yang pernah ada. jika Anda ingin tahu apakah ada sesuatu yang didukung lintas-browser, lihat: caniuse.com/#search=:after
android.nick
Hanya karena internet mengatakan demikian, tidak berarti itu benar. Bekerja dengan mereka, mereka bertindak berbeda di setiap browser. Dan IE 7 masih merupakan browser yang sangat populer, yang tidak mendukung keduanya.
Joshua
3
Sebenarnya, Anda lebih baik dengan CSSlebih JavaScriptsatu ini. Tidak peduli seberapa canggih browser tersebut, pengguna masih dapat JavaScriptmenonaktifkannya ... Untungnya dalam hal ini pemilih :beforedan :afterdidukung secara luas; quirksmode.org/css/selectors
Steve Buzonas