Preventing an image from being draggable or selectable without using JS

前端 未结 8 2071
忘了有多久
忘了有多久 2020-12-04 05:28

Does anyone know of a way to make an image not draggable and not selectable -- at the same time -- in Firefox, without resorting to Javascript? Seems trivial, but here\'s th

相关标签:
8条回答
  • 2020-12-04 05:38

    A generic solution especially for Windows Edge browser (as the -ms-user-select: none; CSS rule doesn't work):

    window.ondragstart = function() {return false}
    

    Note: This can save you having to add draggable="false" to every img tag when you still need the click event (i.e. you can't use pointer-events: none), but don't want the drag icon image to appear.

    0 讨论(0)
  • 2020-12-04 05:43

    Depending on the situation, it is often helpful to make the image a background image of a div with CSS.

    <div id='my-image'></div>
    

    Then in CSS:

    #my-image {
        background-image: url('/img/foo.png');
        width: ???px;
        height: ???px;
    }
    

    See this JSFiddle for a live example with a button and a different sizing option.

    0 讨论(0)
  • 2020-12-04 05:43

    I created a div element which has the same size as the image and is positioned on top of the image. Then, the mouse events do not go to the image element.

    0 讨论(0)
  • 2020-12-04 05:44

    You could probably just resort to

    <img src="..." style="pointer-events: none;">
    
    0 讨论(0)
  • 2020-12-04 05:46

    I've been forgetting to share my solution, I couldn't find a way to do this without using JS. There are some corner cases where @Jeffery A Wooden's suggested CSS just wont cover.

    This is what I apply to all of my UI containers, no need to apply to each element since it recuses on all the child elements.

    CSS:

    .unselectable {
        /* For Opera and <= IE9, we need to add unselectable="on" attribute onto each element */
        /* Check this site for more details: http://help.dottoro.com/lhwdpnva.php */
        -moz-user-select: none; /* These user-select properties are inheritable, used to prevent text selection */
        -webkit-user-select: none;
        -ms-user-select: none; /* From IE10 only */
        user-select: none; /* Not valid CSS yet, as of July 2012 */
    
        -webkit-user-drag: none; /* Prevents dragging of images/divs etc */
        user-drag: none;
    }
    

    JS:

    var makeUnselectable = function( $target ) {
        $target
            .addClass( 'unselectable' ) // All these attributes are inheritable
            .attr( 'unselectable', 'on' ) // For IE9 - This property is not inherited, needs to be placed onto everything
            .attr( 'draggable', 'false' ) // For moz and webkit, although Firefox 16 ignores this when -moz-user-select: none; is set, it's like these properties are mutually exclusive, seems to be a bug.
            .on( 'dragstart', function() { return false; } );  // Needed since Firefox 16 seems to ingore the 'draggable' attribute we just applied above when '-moz-user-select: none' is applied to the CSS 
    
        $target // Apply non-inheritable properties to the child elements
            .find( '*' )
            .attr( 'draggable', 'false' )
            .attr( 'unselectable', 'on' ); 
    };
    

    This was way more complicated than it needed to be.

    0 讨论(0)
  • 2020-12-04 05:47

    You can use the pointer-events property in your CSS, and set it equal to 'none'

    img {
        pointer-events: none;
    }
    

    Edited

    this will block (click) event. So better solution would be

    <img draggable="false" (dragstart)="false;" class="unselectable">
    
    .unselectable {
      user-drag: none; 
      user-select: none;
      -moz-user-select: none;
      -webkit-user-drag: none;
      -webkit-user-select: none;
      -ms-user-select: none;
    }
    
    0 讨论(0)
提交回复
热议问题