2つのdivがあり、どちらも不透明度0.6です。私はそれらを重ねる必要がありますが、それらの不透明度を保持し、新しい結合された不透明度レベルを作成しません。画像が使用できません。
編集-小さな円にはキャンバス要素が含まれているはずです。疑似要素が最適なソリューションになるかどうかはわかりません。
これをCSSで行う方法はありますか、それともキャンバスを使用するだけですか?
例-
http://dabblet.com/Gist/1566209
HTML:
<div id="foo">
<div id="bar">
</div>
</div>
CSS:
/**
* Double Opacity
*/
body{background:green;}
#foo{
height:150px;
width:250px;
background:rgba(0, 0, 0, 0.6);
position:absolute;
left:40%;
top:20%;
}
#bar{
height:40px;
width:40px;
background:rgba(0, 0, 0, 0.6);
border-radius:40px;
position:absolute;
top:-15px;
left:-15px;
}
要約:
必要なものによっては難しい場合もありますが、基本的なアプローチはかなり単純です。
それについての記事全体をここに書きました:
読みやすいかもしれません。
http://dream-world.us/2012/01/07/overlapping-transparent-divs-with-one-border/
このアプローチは私の最初の考えとは少し異なりますが、これは同じ結果になります。
:before
_に設定しました。rotate(180deg)
に変換され、_<div>
_の角に合うように移動されます。opacity
を_0.6
_に設定します。<div>
_自体はopacity
の影響を受けません。:after
_要素を追加し、画像をbackground
として配置しました(必要に応じて、jsを使用してこれを制御できます)border-radius
_、_box-shadow
_、border
)を追加して、この要素をいかに簡単かつ独立して制御できるかを示しました。opacity
を_0.3
_に設定して結果を表示しましたここに問題があります: http://jsfiddle.net/pixelass/nPjQh/4/
いくつかのクレイジーな結果については、このバージョンを見てください:http://jsfiddle.net/pixelass/nPjQh/5/
これらの各例では、単一のdiv
要素のみを使用しています
基本的なルール。 (これらのルールは、jsで動的な動作を作成するために使用できます)
位置=絶対;
top = circleHeight/-2;
左= circleHeight/-2; //(左=上)
回転= 180度;
opacity = valueAofBackground;
bgColor = valueRGBofBackground;
_#inner {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
z-index: -1;
background-color: rgba(0, 0, 0, 0.3);
padding:20px;
border-radius: 20px;
border-top-left-radius: 0;
}
#inner:before {
content: "";
background-image: -webkit-linear-gradient(transparent 50%, rgb(0, 0, 0) 50%, rgb(0, 0, 0)),
-webkit-linear-gradient(0deg, transparent 50%, rgb(0, 0, 0) 50%, rgb(0, 0, 0));
height: 40px;
width: 40px;
border-radius: 40px;
position: absolute;
top: -20px;
left: -20px;
-webkit-transform: rotateZ(180deg);
opacity:0.3;
}
#inner:after {
content: "";
background: url('http://lorempixel.com/10/10/sports/1/') no-repeat;
background-position:0;
height: 10px;
width: 10px;
border-radius: 10px;
position: absolute;
top: -6px;
left: -6px;
-webkit-box-shadow: 0 0 10px rgb(255,255,255);
border: 1px rgb(255,255,255) solid;
}
_
より良い説明
元のコメントバージョン http://jsfiddle.net/pixelass/nPjQh/10/
以下のコードのコメントを参照してください
_#inner {
background: rgba(0,0,0,0.5) /*this is the full color-code of the div (with alpha)*/
}
#inner:before {
/*the solid color of the circle = rgbValue of the div*/
background-image: -webkit-linear-gradient(transparent 50%, rgb(0, 0, 0) 50%, rgb(0, 0, 0)),
-webkit-linear-gradient(0deg, transparent 50%, rgb(0, 0, 0) 50%, rgb(0, 0, 0));
/*opacity of the circle = alpha of the div*/
opacity: 0.5;
}
_
この例は完全に透明ですdiv
...円は「パックマン」です-形状: http://jsfiddle.net/pixelass/nPjQh/14/
円のオフセットの管理
円のオフセットを処理するこれらの例を見てください(NOT USING PSEUDEO-ELEMENTS)
OPのコードの1:1コピー(15pxオフセット): http://jsfiddle.net/pixelass/nPjQh/12/
はるかに小さいオフセット(5px)の場合: http://jsfiddle.net/pixelass/nPjQh/13/
(コンテンツは円と同じ不透明度を持っています)
オフセットはどのように機能しますか?
_background-size
_とtop
およびleft
を制御する
ルール:
上部=左;
background-size = elementHeight * 2 + top * 2;
花を見てください(疑似要素を持つ_<div>
_も1つだけです)_background-size
_は円よりも大きいです。底に緑の葉を作ります
http://jsfiddle.net/pixelass/nPjQh/15/
現在の問題
このフィドルを参照してください: http://jsfiddle.net/pixelass/nPjQh/16/
投稿の上部の例にあるように別のレイヤーを使用しない場合、コンテンツは透明になります。したがって、円の内側にある画像のみが必要な場合は、上記の例で問題ありません。
この問題を解決する方法
キャンバスまたは円の内側に別のdivが必要な場合は、円をdivに配置し、必要なdivを円の上に重ねる必要があります
このフィドルを参照してください: http://jsfiddle.net/pixelass/nPjQh/17/
少し変えてみればうまくいきます。親からコードを取得する
異なる形状/高度なスタイリング
側面が平らな別の形状を使用する場合は、2つのdivの合計の周りに境界線を付けることもできます。
まだ単純なマークアップを使用しています..。
_<div id="foo">
<div id="bar">
</div>
</div>
_
ボックスシャドウのフィドルを参照してください。 http://jsfiddle.net/pixelass/nPjQh/21/
円にボーダーを適用します
_-webkit-mask-image
_を使用して、円に境界線を追加できます。 http://jsfiddle.net/pixelass/nPjQh/24/
その他の例:
divの周りの4つの円
http://jsfiddle.net/pixelass/nPjQh/25/
マークアップ:
_<div id="foo">
<div id="bar1"></div>
<div id="bar2"></div>
<div id="bar3"></div>
<div id="bar4"></div>
</div>
_
このテクニックを使用してツールチップを作成する
http://jsfiddle.net/pixelass/nPjQh/31/
マークアップ:
_<div id="foo">
<div id="bar"></div>
I am a pure css tooltip with a semi-transparent background and a black border. <br/>
My width is static an my height is dynamic...
</div>
_
唯一の方法は、不透明度を個別に行うことだと思います、
改訂された回答
このフィドル は IE9 と互換性があり、元の回答で必要な背景の重複を解決します。疑似要素を使用して円を生成します。このソリューションは、pixelassの「pacman」のアイデアをスピンオフし、新しい背景のグラデーションのcssを使用して生成する代わりに、古い(そして 少し使用または理解された )clip
プロパティを使用して2つの部分で円。これにより、サークルがコーナーの「中心」にならない問題が解決されました。
#foo {
height:150px;
width:250px;
background: rgba(0, 0, 0, 0.6);
position:absolute;
left:40%;
top:20%;
}
#bar {
height:40px;
width:40px;
position:absolute;
top:-15px;
left:-15px;
line-height: 40px;
}
#bar:before,
#bar:after {
content: '';
display: block;
background: rgba(0, 0, 0, 0.6);
border-radius: 40px;
width: 100%;
height: 100%;
position: absolute;
z-index: -1;
top: 0;
left: 0;
}
#bar:before {
clip: rect(0 40px 15px 0);
}
#bar:after {
clip: rect(15px 15px 40px 0);
}
元の回答
これを行うことができます( フィドルを参照 )。下の円を押して、疑似要素と重なる部分を「オーバーレイ」して、ボディの背景色を再確立します。
body{background:green;}
#foo{
height:150px;
width:250px;
background:rgba(0, 0, 0, 0.6);
position:absolute;
left:40%;
top:20%;
}
#bar{
height:40px;
width:40px;
background:rgba(0, 0, 0, 0.6);
border-radius:40px;
position:absolute;
top:-15px;
left:-15px;
z-index: -1;
}
#bar:after {
content: '';
display: block;
background: green;
position: absolute;
right: 0;
bottom: 0;
width: 25px;
height: 25px;
}
これはどうですか: http://jsfiddle.net/rudiedirkx/TqRCw/
(ダッブルの編集者はうんざり!!)
悲しいことに、疑似要素だけではできません=(
それは疑似要素のみで実行できます!pixelassの回答を参照してください。ただし、CSS3は必須です。
このシナリオを処理するためのQ/Aを作成し、そのようなオーバーラップした要素の「ホバー」を使用しました。
解決策は基本的に、JSを使用して、子要素に直接ではなく親レベルで不透明度を設定し、ホバー中にそれらを切り替えることです。
<div class="wrapper">
<div class="first"></div>
<div class="second"></div>
</div>
$(".first, .second").hover(function() {
$(".wrapper, .first, .second").not(this).toggleClass("add-opacity");
});
お役に立てれば。