Kullanarak: kalıba görüntü eklemek için CSS sözde öğesinden önce


116

ModalKesinlikle konumlandırılmış, ebeveyninin üzerinde z-endeksli ve JQuery ile güzel bir şekilde konumlandırılmış bir CSS sınıfım var . Kalıcı kutunun üstüne bir düzeltme resmi (^) eklemek istiyorum ve :beforebunu temiz bir şekilde yapmak için CSS sözde seçiciyi kullanmaya bakıyordum .

Görüntünün kesinlikle modal üzerinde konumlandırılması ve z-endekslenmesi gerekiyor, ancak contentöznitelikteki görüntüye uygun sınıfı eklemenin herhangi bir yolunu bulamadım :

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

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

İkinci en iyi seçenek - stilleri içerik özelliğine satır içi ekleyebilir miyim?

Yanıtlar:


175

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

:afterve :beforeile contentInternet Explorer dışındaki tüm büyük tarayıcılarda desteklendikleri için en az 5 sürüm geriye dönük olarak kullanılabilir. Internet Explorer, 9+ sürümünde tam desteğe ve sürüm 8'de kısmi desteğe sahiptir.

Aradığınız bu mu?

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

Değilse, biraz daha iyi açıklayabilir misin?

ya da Joshua'nın dediği gibi jQuery'yi kullanabilirsiniz:

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


2
Bu. Joshua'nın tarayıcı uyumluluğu hakkındaki düşüncesi de doğrudur - IE8, görüntüyü: after içeriğinde işler, ancak onun üst sınırının dışındaki kısımlarını oluşturmaz.
RSG

Şimdi (2017'de), IE 11, Microsoft tarafından hala desteklenen IE'nin tek sürümüdür; bu nedenle, IE8 uyumluluğu konusunda endişelenmenin pek bir anlamı yok. Ayrıca, bir CSS çözümü neredeyse her zaman jQuery çözümünden daha iyidir çünkü çok daha hızlı yükleme eğilimindedirler ve jQuery, sayfa yüklendikten sonra mizanpajınızı yeniden yazarak ekran titremesine neden olabilir.
Nosajimiki

1
@Nosajimiki eski tarayıcılar hakkında endişelenmeniz gerekip gerekmediği çoğunlukla ziyaretçilerinize bağlıdır.
Jose Faeti

35

Bu elemana bir resim vermek için background özniteliğini kullanmalısınız ve ben önce yerine :: after kullanacağım, bu şekilde zaten elemanınızın üstüne çizilmelidir.

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

Öneriniz için teşekkürler - modelin bir sınırı var, bu yüzden havuç görüntüsünü gerektiği gibi sınır / bg renginin üzerine yerleştirmek için arka plan görüntüsünü kullanabileceğimi sanmıyorum.
RSG

Neden olmasın? sözde öğeyi kesinlikle konumlandırırsanız, kenar boşlukları ile hareket ettirebilirsiniz. Diğer eleman sınırlarının ve / veya bg renginin üstüne çizilecektir.
Jose Faeti

Arka plan görüntüsü div sınırının dışına taşamaz mı?
RSG

12
Muhtemelen bir içerik eklemeniz gerekiyor: ''; görünmesini sağlamak için
Willster

13

1. bu, sorunun için cevabım.

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

5
background-size: 33px 16px; background-repeat: no-repeat;Resmi ölçeklemek için ekledim !
Hasse Björk

-4

İçerik ve öncesi, tarayıcılar arasında son derece güvenilmezdir. Bunu başarmak için jQuery'ye bağlı kalmanızı öneririm. Bu havucun eklenmesi gerekip gerekmediğini anlamak için ne yaptığınızdan emin değilim, ancak genel fikri almalısınız:

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

1
Bu beni üzüyor. Merhametli bir şekilde sınırlı sayıda hedeflenmiş tarayıcıya sahibiz, bu yüzden hala CSS ile nelerin mümkün olabileceğiyle ilgileniyorum.
RSG

CSS3'te yoğun bir şekilde kullanılan içerik olsa bile, gördüğüm kadarıyla hala hiçbir yerde tam olarak desteklenmeyenlerden biri. Bunun kötü şeyler enjekte etme korkusuyla ilgisi olduğuna inanıyorum. Ayrıca, içeriğin enjekte edilmesi için zaten var olan bir öğeye ihtiyacı olduğuna inanıyorum - DOM'u kendi başına bu kadar çok işleyebileceğimden emin değilim.
Joshua

4
Bu yanıt, tarayıcılar arasında güvenilmez bir desteğe sahip olduğu konusunda yanlıştır. Contentve after/beforeher bir ana tarayıcıda çok güvenilir, ie8'den beri çalışıyor, en azından FF3.5, en azından Chrome 9, en azından Opera 10.6, en azından Safari 3.2, iOS Safari'nin her sürümü, Opera mini'nin her sürümü, her sürüm Opera Mobile ve Android tarayıcının her sürümü. Tarayıcılar arası bir şeyin desteklenip desteklenmediğini öğrenmek istiyorsanız, şu adrese
android.nick

İnternet öyle diyor diye, doğru olduğu anlamına gelmez. Onlarla çalışın, her tarayıcıda farklı davranırlar. Ve IE 7 hala çok popüler bir tarayıcı ve ikisini de desteklemiyor.
Joshua

3
Aslında, daha iyi durumda olan vardır CSSüzerinde JavaScriptbu sefer. Tarayıcı ne kadar gelişmiş olursa olsun, kullanıcı yine de JavaScriptdevre dışı bırakmış olabilir ... Neyse ki bu durumda :beforeve :afterseçiciler yaygın olarak destekleniyor; quirksmode.org/css/selectors
Steve Buzonas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.