react-dnd-crop
Version:
React custom Drag and drop with Cropper
214 lines (213 loc) • 5.97 kB
CSS
.Cropper {
position: relative;
display: inline-block;
cursor: crosshair;
overflow: hidden;
max-width: 100%;
}
.Cropper:focus {
outline: none;
}
.Cropper--disabled,
.Cropper--locked {
cursor: inherit;
}
.Cropper__image {
display: block;
height: 300px;
max-width: 100%;
touch-action: manipulation;
}
.Cropper--crop-invisible .Cropper__image {
opacity: 0.5;
}
.Cropper__crop-selection {
position: absolute;
top: 0;
left: 0;
transform: translate3d(0, 0, 0);
box-sizing: border-box;
cursor: move;
box-shadow: 0 0 0 9999em rgba(0, 0, 0, 0.5);
touch-action: manipulation;
border: 1px solid;
border-image-source: url("data:image/gif;base64,R0lGODlhCgAKAJECAAAAAP///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OEI5RDc5MTFDNkE2MTFFM0JCMDZEODI2QTI4MzJBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OEI5RDc5MTBDNkE2MTFFM0JCMDZEODI2QTI4MzJBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuZGlkOjAyODAxMTc0MDcyMDY4MTE4MDgzQzNDMjA5MzREQ0ZDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAyODAxMTc0MDcyMDY4MTE4MDgzQzNDMjA5MzREQ0ZDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEBQoAAgAsAAAAAAoACgAAAhWEERkn7W3ei7KlagMWF/dKgYeyGAUAIfkEBQoAAgAsAAAAAAoACgAAAg+UYwLJ7RnQm7QmsCyVKhUAIfkEBQoAAgAsAAAAAAoACgAAAhCUYgLJHdiinNSAVfOEKoUCACH5BAUKAAIALAAAAAAKAAoAAAIRVISAdusPo3RAzYtjaMIaUQAAIfkEBQoAAgAsAAAAAAoACgAAAg+MDiem7Q8bSLFaG5il6xQAIfkEBQoAAgAsAAAAAAoACgAAAg+UYRLJ7QnQm7SmsCyVKhUAIfkEBQoAAgAsAAAAAAoACgAAAhCUYBLJDdiinNSEVfOEKoECACH5BAUKAAIALAAAAAAKAAoAAAIRFISBdusPo3RBzYsjaMIaUQAAOw==");
border-image-slice: 1;
border-image-repeat: repeat;
}
.Cropper--disabled .Cropper__crop-selection {
cursor: inherit;
}
.Cropper--circular-crop .Cropper__crop-selection {
border-radius: 50%;
box-shadow: 0px 0px 1px 1px white, 0 0 0 9999em rgba(0, 0, 0, 0.5);
}
.Cropper__rule-of-thirds-vt::before,
.Cropper__rule-of-thirds-vt::after,
.Cropper__rule-of-thirds-hz::before,
.Cropper__rule-of-thirds-hz::after {
content: "";
display: block;
position: absolute;
background-color: rgba(255, 255, 255, 0.4);
}
.Cropper__rule-of-thirds-vt::before,
.Cropper__rule-of-thirds-vt::after {
width: 1px;
top: 0;
bottom: 0;
}
.Cropper__rule-of-thirds-vt::before {
left: 33.3333%;
left: calc(100% / 3);
}
.Cropper__rule-of-thirds-vt::after {
left: 66.6666%;
left: calc(100% / 3 * 2);
}
.Cropper__rule-of-thirds-hz::before,
.Cropper__rule-of-thirds-hz::after {
left: 0;
right: 0;
height: 1px;
}
.Cropper__rule-of-thirds-hz::before {
top: 33.3333%;
top: calc(100% / 3);
}
.Cropper__rule-of-thirds-hz::after {
top: 66.6666%;
top: calc(100% / 3 * 2);
}
.Cropper__drag-handle {
position: absolute;
width: 10px;
height: 10px;
background-color: rgba(0, 0, 0, 0.2);
border: 1px solid rgba(255, 255, 255, 0.7);
box-sizing: border-box;
outline: 1px solid transparent;
}
.Cropper .ord-nw {
top: 0;
left: 0;
margin-top: -5px;
margin-left: -5px;
cursor: nw-resize;
}
.Cropper .ord-n {
top: 0;
left: 50%;
margin-top: -5px;
margin-left: -5px;
cursor: n-resize;
}
.Cropper .ord-ne {
top: 0;
right: 0;
margin-top: -5px;
margin-right: -5px;
cursor: ne-resize;
}
.Cropper .ord-e {
top: 50%;
right: 0;
margin-top: -5px;
margin-right: -5px;
cursor: e-resize;
}
.Cropper .ord-se {
bottom: 0;
right: 0;
margin-bottom: -5px;
margin-right: -5px;
cursor: se-resize;
}
.Cropper .ord-s {
bottom: 0;
left: 50%;
margin-bottom: -5px;
margin-left: -5px;
cursor: s-resize;
}
.Cropper .ord-sw {
bottom: 0;
left: 0;
margin-bottom: -5px;
margin-left: -5px;
cursor: sw-resize;
}
.Cropper .ord-w {
top: 50%;
left: 0;
margin-top: -5px;
margin-left: -5px;
cursor: w-resize;
}
.Cropper__disabled .Cropper__drag-handle {
cursor: inherit;
}
.Cropper__drag-bar {
position: absolute;
}
.Cropper__drag-bar.ord-n {
top: 0;
left: 0;
width: 100%;
height: 6px;
margin-top: -3px;
}
.Cropper__drag-bar.ord-e {
right: 0;
top: 0;
width: 6px;
height: 100%;
margin-right: -3px;
}
.Cropper__drag-bar.ord-s {
bottom: 0;
left: 0;
width: 100%;
height: 6px;
margin-bottom: -3px;
}
.Cropper__drag-bar.ord-w {
top: 0;
left: 0;
width: 6px;
height: 100%;
margin-left: -3px;
}
.Cropper--new-crop .Cropper__drag-bar,
.Cropper--new-crop .Cropper__drag-handle,
.Cropper--fixed-aspect .Cropper__drag-bar {
display: none;
}
.Cropper--fixed-aspect .Cropper__drag-handle.ord-n,
.Cropper--fixed-aspect .Cropper__drag-handle.ord-e,
.Cropper--fixed-aspect .Cropper__drag-handle.ord-s,
.Cropper--fixed-aspect .Cropper__drag-handle.ord-w {
display: none;
}
@media (pointer: coarse) {
.Cropper__drag-handle {
width: 34px;
height: 34px;
}
.Cropper__drag-bar {
display: none;
}
.Cropper .ord-nw,
.Cropper .ord-n,
.Cropper .ord-ne,
.Cropper .ord-e,
.Cropper .ord-s,
.Cropper .ord-sw,
.Cropper .ord-w {
display: none;
}
.Cropper .ord-se {
margin-bottom: -1px;
margin-right: -1px;
}
}