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?

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' />");


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

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

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' />");

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.