react-mobile-cropper
Version:
The react mobile cropper inspired by Android mobile croppers
821 lines (710 loc) • 17.5 kB
CSS
.advanced-cropper-line-wrapper--north, .advanced-cropper-line-wrapper--south {
height: 12px;
width: 100%;
}
.advanced-cropper-line-wrapper--north {
cursor: n-resize;
}
.advanced-cropper-line-wrapper--south {
cursor: s-resize;
}
.advanced-cropper-line-wrapper--east, .advanced-cropper-line-wrapper--west {
width: 12px;
height: 100%;
}
.advanced-cropper-line-wrapper--east {
cursor: e-resize;
}
.advanced-cropper-line-wrapper--west {
cursor: w-resize;
}
.advanced-cropper-line-wrapper--disabled {
cursor: auto;
}
.advanced-cropper-line-wrapper__content {
position: absolute;
}
.advanced-cropper-line-wrapper__content--east, .advanced-cropper-line-wrapper__content--west {
height: 100%;
}
.advanced-cropper-line-wrapper__content--north, .advanced-cropper-line-wrapper__content--south {
width: 100%;
}
.advanced-cropper-line-wrapper__content--east {
left: 50%;
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
}
.advanced-cropper-line-wrapper__content--west {
right: 50%;
-webkit-transform: translateX(100%);
transform: translateX(100%);
}
.advanced-cropper-line-wrapper__content--north {
top: 50%;
}
.advanced-cropper-line-wrapper__content--south {
bottom: 50%;
}
.advanced-cropper-handler-wrapper {
position: absolute;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
width: 30px;
height: 30px;
}
.advanced-cropper-handler-wrapper__draggable {
width: 100%;
height: 100%;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
}
.advanced-cropper-handler-wrapper--west-north {
cursor: nw-resize;
}
.advanced-cropper-handler-wrapper--north {
cursor: n-resize;
}
.advanced-cropper-handler-wrapper--east-north {
cursor: ne-resize;
}
.advanced-cropper-handler-wrapper--east {
cursor: e-resize;
}
.advanced-cropper-handler-wrapper--east-south {
cursor: se-resize;
}
.advanced-cropper-handler-wrapper--south {
cursor: s-resize;
}
.advanced-cropper-handler-wrapper--west-south {
cursor: sw-resize;
}
.advanced-cropper-handler-wrapper--west {
cursor: w-resize;
}
.advanced-cropper-handler-wrapper--disabled {
cursor: auto;
}
.advanced-cropper-bounding-box {
position: relative;
height: 100%;
width: 100%;
}
.advanced-cropper-bounding-box__handler-wrapper {
position: absolute;
}
.advanced-cropper-bounding-box__handler-wrapper--east, .advanced-cropper-bounding-box__handler-wrapper--west {
top: 50%;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
height: 100%;
}
.advanced-cropper-bounding-box__handler-wrapper--south, .advanced-cropper-bounding-box__handler-wrapper--north {
left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
width: 100%;
}
.advanced-cropper-bounding-box__handler-wrapper--west, .advanced-cropper-bounding-box__handler-wrapper--west-north, .advanced-cropper-bounding-box__handler-wrapper--west-south {
left: 0;
}
.advanced-cropper-bounding-box__handler-wrapper--east, .advanced-cropper-bounding-box__handler-wrapper--east-north, .advanced-cropper-bounding-box__handler-wrapper--east-south {
left: 100%;
}
.advanced-cropper-bounding-box__handler-wrapper--north, .advanced-cropper-bounding-box__handler-wrapper--west-north, .advanced-cropper-bounding-box__handler-wrapper--east-north {
top: 0;
}
.advanced-cropper-bounding-box__handler-wrapper--south, .advanced-cropper-bounding-box__handler-wrapper--west-south, .advanced-cropper-bounding-box__handler-wrapper--east-south {
top: 100%;
}
.advanced-cropper-bounding-box__handler {
position: absolute;
}
.advanced-cropper-bounding-box__handler--west-north {
left: 0;
top: 0;
}
.advanced-cropper-bounding-box__handler--north {
left: 50%;
top: 0;
}
.advanced-cropper-bounding-box__handler--east-north {
left: 100%;
top: 0;
}
.advanced-cropper-bounding-box__handler--east {
left: 100%;
top: 50%;
}
.advanced-cropper-bounding-box__handler--east-south {
left: 100%;
top: 100%;
}
.advanced-cropper-bounding-box__handler--south {
left: 50%;
top: 100%;
}
.advanced-cropper-bounding-box__handler--west-south {
left: 0;
top: 100%;
}
.advanced-cropper-bounding-box__handler--west {
left: 0;
top: 50%;
}
.advanced-cropper-bounding-box__line {
position: absolute;
}
.advanced-cropper-bounding-box__line--north, .advanced-cropper-bounding-box__line--south {
left: 0;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
.advanced-cropper-bounding-box__line--north {
top: 0;
}
.advanced-cropper-bounding-box__line--south {
top: 100%;
}
.advanced-cropper-bounding-box__line--west, .advanced-cropper-bounding-box__line--east {
top: 0;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
}
.advanced-cropper-bounding-box__line--west {
left: 0;
}
.advanced-cropper-bounding-box__line--east {
left: 100%;
}
.advanced-cropper-artificial-transition {
will-change: transform;
}
.advanced-cropper-background-image {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
position: absolute;
-webkit-transform-origin: center;
transform-origin: center;
pointer-events: none;
max-width: none ;
}
.advanced-cropper-canvas {
display: none;
}
.advanced-cropper-source {
width: 1px;
height: 1px;
visibility: hidden;
position: absolute;
opacity: 0;
}
.advanced-cropper-fade {
visibility: hidden;
opacity: 0;
-webkit-transition: 0.5s;
transition: 0.5s;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
}
.advanced-cropper-fade--visible {
opacity: 1;
visibility: visible;
}
.advanced-cropper-wrapper__fade {
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
min-height: 0;
}
.advanced-cropper-stencil-grid {
display: table;
border-collapse: collapse;
table-layout: fixed;
opacity: 0;
-webkit-transition: opacity 0.3s;
transition: opacity 0.3s;
}
.advanced-cropper-stencil-grid--visible {
opacity: 1;
}
.advanced-cropper-stencil-grid__row {
display: table-row;
}
.advanced-cropper-stencil-grid__cell {
display: table-cell;
width: 1%;
height: 1%;
border: currentColor solid 1px;
}
.advanced-cropper-stencil-grid__cell--top {
border-top-color: transparent;
}
.advanced-cropper-stencil-grid__cell--left {
border-left-color: transparent;
}
.advanced-cropper-stencil-grid__cell--right {
border-right-color: transparent;
}
.advanced-cropper-stencil-grid__cell--bottom {
border-bottom-color: transparent;
}
.advanced-cropper-stencil-overlay {
-webkit-box-sizing: content-box;
box-sizing: content-box;
-webkit-box-shadow: 0 0 0 1000px currentColor;
box-shadow: 0 0 0 1000px currentColor;
pointer-events: none;
width: 100%;
height: 100%;
position: absolute;
-webkit-backface-visibility: hidden;
}
.advanced-cropper-stencil-wrapper {
will-change: transform;
}
.advanced-cropper-boundary {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
direction: ltr;
position: relative;
}
.advanced-cropper-boundary__content {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
.advanced-cropper-boundary__stretcher {
pointer-events: none;
position: relative;
max-width: 100%;
max-height: 100%;
}
.advanced-cropper-circle-stencil {
position: absolute;
height: 100%;
width: 100%;
-webkit-box-sizing: content-box;
box-sizing: content-box;
-webkit-backface-visibility: hidden;
-webkit-transform-style: preserve-3d;
}
.advanced-cropper-circle-stencil__overlay {
border-radius: 50%;
overflow: hidden;
}
.advanced-cropper-circle-stencil__preview {
border-radius: 50%;
}
.advanced-cropper-circle-stencil__draggable-area, .advanced-cropper-circle-stencil__overlay, .advanced-cropper-circle-stencil__preview, .advanced-cropper-circle-stencil__grid {
position: absolute;
height: 100%;
width: 100%;
}
.advanced-cropper-circle-stencil--movable {
cursor: move;
}
.advanced-cropper-rectangle-stencil {
position: absolute;
height: 100%;
width: 100%;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-webkit-backface-visibility: hidden;
-webkit-transform-style: preserve-3d;
}
.advanced-cropper-rectangle-stencil__draggable-area, .advanced-cropper-rectangle-stencil__overlay, .advanced-cropper-rectangle-stencil__preview, .advanced-cropper-rectangle-stencil__grid {
position: absolute;
height: 100%;
width: 100%;
}
.advanced-cropper-rectangle-stencil--movable {
cursor: move;
}
.advanced-cropper-simple-line {
background: none;
border-width: 0;
}
.advanced-cropper-simple-line--south, .advanced-cropper-simple-line--north {
height: 0;
width: 100%;
}
.advanced-cropper-simple-line--east, .advanced-cropper-simple-line--west {
height: 100%;
width: 0;
}
.advanced-cropper-simple-line--east {
border-right-width: 1px;
}
.advanced-cropper-simple-line--west {
border-left-width: 1px;
}
.advanced-cropper-simple-line--south {
border-bottom-width: 1px;
}
.advanced-cropper-simple-line--north {
border-top-width: 1px;
}
.advanced-cropper-simple-handler {
display: block;
}
.advanced-cropper-preview {
overflow: hidden;
-webkit-box-sizing: border-box;
box-sizing: border-box;
position: relative;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
}
.advanced-cropper-preview__content {
overflow: hidden;
position: absolute;
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
.advanced-cropper-preview__image {
display: none;
pointer-events: none;
position: absolute;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-transform-origin: center;
transform-origin: center;
max-width: none ;
}
.advanced-cropper-preview__image--visible {
display: block;
}
.advanced-cropper-preview__boundary {
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
min-height: 0;
min-width: 0;
}
.cropper-preview-wrapper__fade {
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
min-height: 0;
width: 100%;
}
.advanced-cropper {
overflow: hidden;
max-height: 100%;
background: black;
position: relative;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
color: white;
}
.advanced-cropper__boundary {
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
min-height: 0;
min-width: 0;
}
.advanced-cropper__wrapper, .advanced-cropper__background-wrapper {
left: 0;
top: 0;
right: 0;
bottom: 0;
position: absolute;
}
.advanced-cropper__stencil-wrapper {
position: absolute;
}
.advanced-cropper * {
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.advanced-cropper-simple-handler {
background: currentColor;
height: 10px;
width: 10px;
}
.advanced-cropper-simple-line {
-webkit-transition: border 0.5s;
transition: border 0.5s;
border-color: rgba(255, 255, 255, 0.3);
border-style: solid;
}
.advanced-cropper-simple-line--hover {
border-color: white;
}
.advanced-cropper-circle-stencil__preview {
border: solid 2px rgba(255, 255, 255, 0.2);
}
.advanced-cropper-stencil-overlay {
color: rgba(0, 0, 0, 0.5);
}
.advanced-cropper-stencil-grid {
color: rgba(255, 255, 255, 0.4);
}
.advanced-cropper-simple-line {
border-color: rgba(255, 255, 255, 0.7);
}
.advanced-cropper-simple-line--east {
border-right-width: 2px;
}
.advanced-cropper-simple-line--west {
border-left-width: 2px;
}
.advanced-cropper-simple-line--south {
border-bottom-width: 2px;
}
.advanced-cropper-simple-line--north {
border-top-width: 2px;
}
.advanced-cropper-simple-line--hover {
border-color: white;
}
.advanced-cropper-bounding-box__handler {
width: 24px;
height: 24px;
}
.advanced-cropper-bounding-box__handler--west-north {
-webkit-transform: translate(-5px, -5px);
transform: translate(-5px, -5px);
}
.advanced-cropper-bounding-box__handler--east-south {
-webkit-transform: translate(-19px, -19px);
transform: translate(-19px, -19px);
}
.advanced-cropper-bounding-box__handler--west-south {
-webkit-transform: translate(-5px, -19px);
transform: translate(-5px, -19px);
}
.advanced-cropper-bounding-box__handler--east-north {
-webkit-transform: translate(-19px, -5px);
transform: translate(-19px, -5px);
}
.advanced-cropper-simple-handler {
display: block;
position: relative;
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-transition: opacity 0.5s;
transition: opacity 0.5s;
border: none;
background: currentColor;
top: auto;
left: auto;
height: 0px;
width: 0px;
opacity: 0;
}
.advanced-cropper-simple-handler--west-north, .advanced-cropper-simple-handler--east-south, .advanced-cropper-simple-handler--west-south, .advanced-cropper-simple-handler--east-north {
display: block;
height: 16px;
width: 16px;
background: none;
opacity: 1;
}
.advanced-cropper-simple-handler--west-north {
border-left: solid 3px currentColor;
border-top: solid 3px currentColor;
}
.advanced-cropper-simple-handler--east-south {
border-right: solid 3px currentColor;
border-bottom: solid 3px currentColor;
}
.advanced-cropper-simple-handler--west-south {
border-left: solid 3px currentColor;
border-bottom: solid 3px currentColor;
}
.advanced-cropper-simple-handler--east-north {
border-right: solid 3px currentColor;
border-top: solid 3px currentColor;
}
.advanced-cropper-simple-handler--hover {
opacity: 1;
}
.advanced-cropper-circle-stencil {
border-color: rgba(255, 255, 255, 0.4);
}
.advanced-cropper-stencil-grid {
color: rgba(255, 255, 255, 0.5);
}
.rmc-cropper {
color: #61DAFB;
}
.rmc-cropper-wrapper {
padding: 40px 10px;
overflow: hidden;
background: black;
max-height: 100%;
}
.rmc-cropper-wrapper--with-navigation {
padding-bottom: 80px;
}
.rmc-cropper-wrapper__content {
position: relative;
}
.rmc-cropper-wrapper__fade {
-webkit-box-flex: 1;
-ms-flex-positive: 1;
flex-grow: 1;
min-height: 0;
}
.rmc-cropper-wrapper__navigation {
position: absolute;
bottom: 0;
max-width: 450px;
width: 100%;
left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
}
.rmc-cropper-wrapper__spinner {
visibility: hidden;
opacity: 0;
-webkit-transition: 0.5s;
transition: 0.5s;
-webkit-transition-delay: 0s;
transition-delay: 0s;
stroke: currentColor;
position: absolute;
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
.rmc-cropper-wrapper__spinner--visible {
-webkit-transition-delay: 0.5s;
transition-delay: 0.5s;
opacity: 1;
visibility: visible;
}
.rmc-navigation {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
padding: 20px 15px;
}
.rmc-navigation__rotator {
width: 100%;
margin-left: 10px;
margin-right: 10px;
}
.rmc-navigation__button {
cursor: pointer;
width: 24px;
height: 24px;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-ms-flex-negative: 0;
flex-shrink: 0;
margin: 0 5px;
background: none;
border: none;
outline: none;
-webkit-transition: -webkit-transform 0.5s;
transition: -webkit-transform 0.5s;
transition: transform 0.5s;
transition: transform 0.5s, -webkit-transform 0.5s;
padding: 0;
}
.rmc-navigation__button:hover, .rmc-navigation__button:focus {
-webkit-transform: scale(1.1);
transform: scale(1.1);
}
.rmc-rotate-component__bars {
cursor: -webkit-grab;
cursor: grab;
width: 100%;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
min-width: 0;
position: relative;
height: 15px;
}
.rmc-rotate-component__bars--dragging {
cursor: -webkit-grabbing ;
cursor: grabbing ;
}
.rmc-rotate-component__bar {
position: absolute;
left: 0;
height: 15px;
width: 3px;
-ms-flex-negative: 0;
flex-shrink: 0;
top: 50%;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
background: white;
}
.rmc-rotate-component__bar--highlighted {
background-color: currentColor;
}
.rmc-rotate-component__bar--zero {
height: 20px;
}
.rmc-rotate-component__value {
position: absolute;
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
width: 3px;
background-color: currentColor;
color: currentColor;
height: 25px;
border-radius: 2px;
}
.rmc-rotate-component__value-number {
position: absolute;
top: -20px;
color: inherit;
left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
font-size: 12px;
}
body.dragging {
cursor: -webkit-grabbing ;
cursor: grabbing ;
}