是否可以使元素透明并查看其父级不透明背景

时间:2015-06-16 16:36:40

标签: html css background transparency

您好我正在设计一个表单(HTML / CSS / JS),当用户想要订阅或登录时,该表单会弹出内容。整个表单背景是固体不透明的颜色,但我希望输入具有透明背景,以便我们可以通过它看到表单背后的内容。我没有任何问题设置输入透明,但我不知道如何让他们“通过”他们的父背景颜色。我开始认为只有CSS是不可能的。我可以共享代码,但它更像是一个通用的问题。感谢

enter image description here

4 个答案:

答案 0 :(得分:6)

您可以通过使用更多元素和一点点创意来使您的输入看起来像是一个剪贴画而作弊...

<强> Working Example

&#13;
&#13;
$('.wrap').draggable();// demo only, used to show off cutout effect. Not necessary 
&#13;
.wrap {
    position:absolute;
}
.top, .bottom {
    background:grey;
}
input, .top, .bottom {
    width: 100%;
    border: 30px solid grey;
}
input {
    background: transparent;
    color: red;
    border: 29px solid grey;
    outline: none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<div class="wrap">
    <div class="top">This may be cheating, but it works...</div>
    <input type="text" placeholder="testing"/>
    <div class="bottom"></div>
</div>
<p>Zombie ipsum reversus ab viral inferno, nam rick grimes malum cerebro. De carne lumbering animata corpora quaeritis. Summus brains sit​​, morbo vel maleficia? De apocalypsi gorger omero undead survivor dictum mauris. Hi mindless mortuis soulless creaturas, imo evil stalking monstra adventus resi dentevil vultus comedat cerebella viventium. Qui animated corpse, cricket bat max brucks terribilem incessu zomby. The voodoo sacerdos flesh eater, suscitat mortuos comedere carnem virus. Zonbi tattered for solum oculi eorum defunctis go lum cerebro. Nescio brains an Undead zombies. Sicut malus putrid voodoo horror. Nigh tofth eliv ingdead. Cum horribilem walking dead resurgere de crazed sepulcris creaturis, zombie sicut de grave feeding iride et serpens. Pestilentia, shaun ofthe dead scythe animated corpses ipsa screams. Pestilentia est plague haec decaying ambulabat mortuos. Sicut zeder apathetic malus voodoo. Aenean a dolor plan et terror soulless vulnerum contagium accedunt, mortui iam vivam unlife. Qui tardius moveri, brid eof reanimator sed in magna copia sint terribiles undeath legionis. Alii missing oculis aliorum sicut serpere crabs nostram. Putridi braindead odores kill and infect, aere implent left four dead. Lucio fulci tremor est dark vivos magna. Expansis creepy arm yof darkness ulnis witchcraft missing carnem armis Kirkman Moore and Adlard caeruleum in locis. Romero morbo Congress amarus in auras. Nihil horum sagittis tincidunt, zombie slack-jawed gelida survival portenta. The unleashed virus est, et iam zombie mortui ambulabunt super terram. Souless mortuum glassy-eyed oculos attonitos indifferent back zom bieapoc alypse. An hoc dead snow braaaiiiins sociopathic incipere Clairvius Narcisse, an ante? Is bello mundi z?</p>
&#13;
&#13;
&#13;

答案 1 :(得分:4)

完全不同的解决方案是使用<svg>,甚至是.png(虽然这将是额外的http请求)。

<div class='container is--transparent'>
    <svg>
        # I am the same size as the background and have transparent parts where required
        # Indeed, I could be a div, with a .png background, if you needed to support older browsers
    </svg>
    <input class='input-one' />
    <input class='input-two' />
</div>

然后使用css设置:

    关于背景div中的所有内容的
  1. position: absolute;
  2. svg为top: 0; left: 0;所以它完全覆盖了容器
  3. 要定位在SVG透明部分上的输入
  4. 输入的背景是透明的
  5. 这样输入下的所有内容都是透明的,无论背景如何都会闪耀。

    对svgs的支持也非常好,你必须回到IE8才会出现问题。

答案 2 :(得分:2)

是的,您可以使用mask

Support is not perfect,但后备只是没有透明度,因此它会很好地降级。这也将随着时间的推移而改善。

这将允许元素背后的任何东西透过,平面颜色,纹理,渐变,多个元素,图像甚至视频。

另外,它将样式保存在css(和图像)所在的位置。

我做了一个JSFiddle to demonstrate - 真的很简单:

<div class="background">
    <div class='masked'>
    </div>
</div>

标记在那里,背景包含要屏蔽的元素。掩模本身是由任何透明度(包括完全透明)的黑色区域组成的图像。这是:

enter image description here

两个字母框形状是透明位,是背景燃烧到前景的地方。底部的条形图是50%透明的,用于演示如何使用alpha值。

css在这里:

.background {
    background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#959595), color-stop(46%,#0d0d0d), color-stop(50%,#010101), color-stop(53%,#0a0a0a), color-stop(76%,#4e4e4e), color-stop(87%,#383838), color-stop(100%,#1b1b1b));
    width: 250px;
    height: 250px;
    float:left;
}
.masked {
    background: #fff;
    width: 200px;
    margin: 25px;
    height: 200px;
    background-color: #4f6;
    -webkit-mask-image: url(http://stackoverflowimages.excitedstatelaboratory.com/mask-example-image-2.png);
}

你可以看到一些特定于演示的定位和大小的东西,但重要的是-webkit-mask-image就像背景图像一样,可以找到所需的png。

我们可以通过使其属性无效来break the mask image,这模拟了如果浏览器不理解该属性会发生什么。

最后一点,你放入插槽的任何东西都必须将它自己的背景设置为透明,以便通过插槽的内容可见,但是this is easy

答案 3 :(得分:-1)

看一下这个解决方案https://jsfiddle.net/bnnp2pvj/1/

var color = $('.container').css('background-color');
color = color.replace(')', ', 0.2)').replace('rgb', 'rgba');
$('.background-match').css({"background-color":color});