:before CSS疑似要素を使用して画像をモーダルに追加する


116

私は、Modal絶対的に配置され、親の上にzインデックスが付けられ、JQueryで適切に配置されたCSSクラスを持っています。モーダルボックスの上部にキャレット画像(^)を追加したいのですが、:beforeCSS疑似セレクターを使用してこれをきれいに行うことを検討していました。

画像は絶対的にモーダルの上に配置し、Zインデックスを付ける必要がありますが、適切なクラスを画像のcontent属性に追加する方法が見つかりませんでした。

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

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

次善のオプション-スタイルをインラインでcontent属性に追加できますか?

回答:


175

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

:afterそして、:beforeではcontent、彼らは少なくとも5つのバージョンのバックInternet Explorer以外のすべての主要なブラウザでサポートされているように使用しても大丈夫です。Internet Explorerは、バージョン9以降で完全にサポートされており、バージョン8では部分的にサポートされています。

これはあなたが探しているものですか?

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

そうでない場合、もう少し説明できますか?

または、ジョシュアが言ったように、jQueryを使用することもできます。

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


2
この。ブラウザーの互換性に関するJoshuaのポイントも正しいですが、IE8は:afterコンテンツで画像をレンダリングしますが、親の境界の外側にあるその部分をレンダリングしません。
RSG、2011

現在(2017年)、IE 11は、MicrosoftがサポートしているIEの唯一のバージョンです。したがって、IE8の互換性について心配することはあまり意味がありません。また、CSSソリューションは、ほとんどの場合jQueryソリューションよりも優れています。これは、CSSソリューションが非常に速く読み込まれる傾向があり、ページが読み込まれた後にjQueryがレイアウトを書き換えることによって画面のちらつきを引き起こす可能性があるためです。
Nosajimiki

1
@Nosajimikiは、古いブラウザーについて心配する必要があるかどうかは、主に訪問者に依存します。
Jose Faeti

35

その要素に画像を与えるにはbackground属性を使用する必要があり、私は前ではなく:: afterを使用します。これにより、要素の上に既に描画されます。

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

提案をありがとう-モーダルはボーダーを持っているので、背景画像を使用してニンジン画像をボーダー/ bgカラーの上に配置することはできません。
RSG、2011

何故なの?その疑似要素を完全に配置すると、余白を付けて移動できます。他の要素の境界線やbg色の上に描画されます。
Jose Faeti

背景画像はdivの境界の外に拡張できませんか?
RSG、2011

12
おそらくコンテンツを追加する必要があります: ''; これを表示するには
Willster

13

1.これはあなたの問題に対する私の答えです。

.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;画像を拡大縮小して追加しました!
HasseBjörk2016

-4

コンテンツとそれ以前は、ブラウザー間で非常に信頼性が低くなっています。これを実現するためにjQueryを使用することをお勧めします。このにんじんを追加する必要があるかどうかを判断するために何をしているのかはわかりませんが、全体的な考えを理解する必要があります。

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

1
これは私を悲しくさせます。対象となるブラウザのセットは非常に制限されているので、CSSで何ができるのかまだ興味があります。
RSG、2011

CSS3でコンテンツが頻繁に使用されている場合でも、私が見たところ、まだ完全にサポートされていないコンテンツの1つです。これは、邪悪なものを注入することができるのではないかという恐れと関係があると私は信じています。また、コンテンツには既存の要素を挿入する必要があると思います。DOMをそれだけで操作できるかどうかはわかりません。
ジョシュア

4
この回答は、ブラウザ間でのサポートの信頼性が低いという点で誤りです。Contentそしてafter/before一つ一つの主要なブラウザ間で非常に信頼性があり、それは少なくともサファリ3.2、iOS版のSafari、Opera Miniは、すべてのバージョンのすべてのバージョンのすべてのバージョンでは、少なくともオペラ10.6、少なくともクロム9、で、少なくともFF3.5で、IE8以降に働いていますOpera Mobile、およびこれまでのバージョンのAndroidブラウザ。ブラウザ間でサポートされているものがあるかどうかを知りたい場合は、以下をチェックしてください。caniuse.com
android.nick

インターネットがそうであると言ったからといって、それが本当であるとは限りません。それらを使用して、彼らはすべてのブラウザーで異なる動作をします。また、IE 7は依然として非常に人気のあるブラウザーであり、どちらもサポートしていません。
ジョシュア

3
実は、これでCSS終わりJavaScriptです。ブラウザーの最先端であっても、ユーザーはJavaScript無効にできます。幸いなことに、この場合、:beforeおよび:afterセレクターは広くサポートされています。quirksmode.org/css/selectors
Steve Buzonas 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.