traduccion ejemplos drop bootstrap and html css html5 firefox draggable

html - ejemplos - Evitar que una imagen sea arrastrable o seleccionable sin usar JS



draggable js (7)

¿Alguien sabe de una manera de hacer que una imagen no sea arrastrable y no se pueda seleccionar, al mismo tiempo, en Firefox, sin recurrir a Javascript? Parece trivial, pero aquí está el problema:

1) Se puede arrastrar y resaltar en Firefox:

<img src="...">

2) Así que agregamos esto, pero la imagen aún se puede resaltar mientras se arrastra:

<img src="..." draggable="false">

3) Así que agregamos esto, para corregir el problema de resaltado, pero luego, en contra de la intuición , la imagen se puede volver a arrastrar. ¡Extraño, lo sé! Usando FF 16.0.1

<img src="..." draggable="false" style="-moz-user-select: none;">

Entonces, ¿alguien sabe por qué agregar "-moz-user-select: none", de alguna manera prevalecería y desactivaría "draggable = false"? Por supuesto, webkit funciona como se esperaba. No hay nada en los Interwebs sobre esto ... Sería genial si pudiéramos sacar algo de luz sobre esto juntos.

¡¡Gracias!!

Editar: se trata de evitar el arrastre inadvertido de los elementos de la interfaz de usuario y mejorar la usabilidad, no un intento fallido de un esquema de protección contra copia :-)


Dependiendo de la situación, a menudo es útil hacer que la imagen sea una imagen de fondo de un div con CSS.

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

Luego en CSS:

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

Vea este JSFiddle para un ejemplo en vivo con un botón y una opción de tamaño diferente.


Establezca las siguientes propiedades CSS para la imagen:

user-drag: none; user-select: none; -moz-user-select: none; -webkit-user-drag: none; -webkit-user-select: none; -ms-user-select: none;


Me he olvidado de compartir mi solución, no pude encontrar una manera de hacerlo sin usar JS. Hay algunos casos de esquina donde el CSS sugerido de @Jeffery A Wooden simplemente no cubrirá.

Esto es lo que aplico a todos mis contenedores de UI, no es necesario aplicarlo a cada elemento, ya que se aplica a todos los elementos secundarios.

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

Esto era mucho más complicado de lo necesario.


Probablemente podrías simplemente recurrir a

<img src="..." style="pointer-events: none;">


Puede establecer la imagen como una imagen de fondo. Como reside en un div y el div es indivisible, la imagen será indivisible:

<div style="background-image: url("image.jpg");"> </div>


Puede usar la propiedad de pointer-events en su CSS y establecerla igual a ''ninguno''

img { pointer-events: none; }

Editado

esto bloqueará el evento (clic). Entonces, una mejor solución sería

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


Una solución genérica especialmente para el navegador Windows Edge (ya que la regla CSS -ms-user-select: none no funciona):

window.ondragstart = function () {return false}

Nota: Esto puede ahorrarle tener que agregar draggable = false a cada etiqueta img cuando aún necesita el evento click (es decir, no puede usar pointer-events = none), pero no desea que aparezca la imagen del icono de arrastre.