开发者

Creating a "disabled" look by using a mask

I'm trying to create the following:

Creating a "disabled" look by using a mask

Using two images: one as mask (the diagonal lines) and the other the image and text themselves (the mask and image+text are the same size):

Creating a "disabled" look by using a mask

Creating a "disabled" look by using a mask

..and I just can't get it done!

I've tried all combinations with divs and z-indeces, opacity and background-image.. (should mention I'm noob to html).

Here's one shot I got at it (with only the mask and an image):

div {
    position: absolute;
    top: 775px;
    left: 0px;
    height: 188px;
    width: 272px;
    background-image: url('grey-out.png');
}

img {
    z-index: 1000; 
}

<div></div>
<img src="41_large.png" />

Which just gives the diagonal lines themselves..

Can someone please help me out? How do I make that "disabled" look combining the (semi-t开发者_StackOverflow中文版ransparent) mask and the div?

Thanks!


This approach works:

<div id="pspThing" class="disabled">
    <img class="disabled" src="http://i.stack.imgur.com/lCTVr.png" />
</div>

#pspThing {
    background: transparent url(http://i.stack.imgur.com/WpgNy.jpg) 0 0 no-repeat;
    height: 93px;
    width: 273px;
    border: 1px solid #000;
    margin: 0 auto;
    overflow: hidden;
}
#pspThing img {
    display: none;
    opacity: 0.5;
}
#pspThing img.disabled {
    display: block;
}

JS Fiddle demo

Bearing in mind that there's no transparency in your striped png (so far as the imgur hosted image is concerned, anyway, so I'm using opacity instead). Also the JS Fiddle demo's a little more complicated than necessary, so's I could show the disabled/enabled states.


Pleass consider this simple snippet. Very universal solution. Acts and feels very much like the 'disable' attribute of input elements. See the snippet

function disable(elementId, enabling) {

  el = document.getElementById(elementId);


  if (enabling) {
    el.classList.remove("masked");
  } else

  {
    el.classList.add("masked");
  }
}
.masked {
  position: relative;
  pointer-events: none;
  display: inline-block;
  //visibility:hidden; /* Uncomment this for complete disabling  */
}
.masked::before {
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0px;
  left: 0px;
  visibility: visible;
  opacity: 0.5;
  background-color: black;
  //background: url('http://i.imgur.com/lCTVr.png'); /* Uncomment this  to use the image */
  content: "";
}
<button onclick="alert('Now, click \'OK\' then \'Tab\' key to focus next button.\nThen click \'Enter\' to activate it.');">Test</button>
<div id="div1" style="display:inline-block" class="masked">
  <button onclick="alert('Sample button was clicked.')">Maskakable</button>
  <button onclick="alert('Sample button was clicked.')">Maskakable</button><br/>
  <br/>
  <button onclick="alert('Sample button was clicked.')">Maskakable</button>
  <button onclick="alert('Sample button was clicked.')">Maskakable</button><br/>
  <img src="http://i.stack.imgur.com/WpgNy.jpg">
</div>
<button>Dummy</button>

<br/>
<button id="enableBtn" onclick="disable('div1',true);disable('enableBtn',false);disable('disableBtn',true);">Enable</button>
<button id="disableBtn" onclick="disable('div1',false);disable('enableBtn',true);disable('disableBtn',false);"  class="masked">Disable</button>


I built an example here. I doubt that the position:absolute approach is the best way to handle this since you need to know the size of the image.


For doing it by z-index your both images should be in the container with img tag.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜