浏览代码

Moved widget drag handler styles to the theme. Implemented widget and widget handler state transitions.

Aleksander Nowodzinski 7 年之前
父节点
当前提交
afc63c80e1
共有 1 个文件被更改,包括 51 次插入22 次删除
  1. 51 22
      packages/ckeditor5-theme-lark/theme/ckeditor5-widget/widget.css

+ 51 - 22
packages/ckeditor5-theme-lark/theme/ckeditor5-widget/widget.css

@@ -9,27 +9,35 @@
 :root {
 	--ck-widget-outline-thickness: 3px;
 	--ck-color-widget-border-blurred: hsl(0, 0%, 87%);
-	--ck-color-widget-border-hover: hsl(43, 100%, 68%);
+	--ck-color-widget-border-hover: hsl(43, 100%, 62%);
 	--ck-color-widget-editable-focused-background: var(--ck-color-base-background);
-	--ck-color-widget-drag-handler-icon: hsl(0, 0%, 100%);
-	--ck-widget-drag-handler-width: 22px;
+	--ck-color-widget-drag-handler-icon-color: hsl(0, 0%, 100%);
+	--ck-color-widget-drag-icon-size: 16px;
+	--ck-color-widget-drag-animation-duration: 200ms;
+	--ck-color-widget-drag-animation-curve: ease;
 }
 
 .ck .ck-widget {
 	margin: var(--ck-spacing-standard) 0;
 	padding: 0;
 
+	outline-width: var(--ck-widget-outline-thickness);
+	outline-style: solid;
+	outline-color: transparent;
+	transition: outline-color var(--ck-color-widget-drag-animation-duration) var(--ck-color-widget-drag-animation-curve);
+
 	&.ck-widget_selected,
 	&.ck-widget_selected:hover {
 		outline: var(--ck-widget-outline-thickness) solid var(--ck-color-focus-border);
 	}
 
 	@nest .ck-editor__editable.ck-blurred &.ck-widget_selected {
-		outline: var(--ck-widget-outline-thickness) solid var(--ck-color-widget-border-blurred);
+		outline-width: var(--ck-widget-outline-thickness);
+		outline-color: var(--ck-color-widget-border-blurred);
 	}
 
 	&:hover {
-		outline: var(--ck-widget-outline-thickness) solid var(--ck-color-widget-border-hover);
+		outline-color: var(--ck-color-widget-border-hover);
 	}
 }
 
@@ -47,26 +55,46 @@
 	}
 }
 
-.ck .ck-widget.ck-widget__selectable {
-	/* Make the widget wrapper a relative positioning container for the drag handler. */
-	position: relative;
-
+.ck .ck-widget.ck-widget_selectable {
 	& .ck-selection-handler {
-		display: none;
+		padding: 4px;
+		box-sizing: border-box;
+
+		/* Background color will be animated as the handler shows up or the widget gets selected. */
+		background-color: transparent;
+
+		/* Transition:
+		   * background-color for the .ck-widget_selected state change,
+		   * visibility for hiding the handler. */
+		transition:
+			background-color var(--ck-color-widget-drag-animation-duration) var(--ck-color-widget-drag-animation-curve),
+			visibility var(--ck-color-widget-drag-animation-duration) var(--ck-color-widget-drag-animation-curve);
 
 		/* Make only top corners round. */
 		border-radius: var(--ck-border-radius) var(--ck-border-radius) 0 0;
 
-		width: var(--ck-widget-drag-handler-width);
-		height: calc(var(--ck-widget-outline-thickness) + var(--ck-widget-drag-handler-width));
-
 		/* Place the drag handler outside the widget wrapper. */
-		position: absolute;
-		top: calc(0px - var(--ck-widget-outline-thickness) - var(--ck-widget-drag-handler-width));
+		transform: translateY(-100%);
 		left: calc(0px - var(--ck-widget-outline-thickness));
 
+		/* Advertise using the look of the icon that once clicked the handler, the widget will be selected. */
+		&:hover .ck-icon .ck-icon__selected-indicator {
+			opacity: 1;
+		}
+
 		& .ck-icon {
-			color: var(--ck-color-widget-drag-handler-icon);
+			/* Make sure the dimensions of the icon are independent of the fon-size of the content. */
+			width: var(--ck-color-widget-drag-icon-size);
+			height: var(--ck-color-widget-drag-icon-size);
+			color: var(--ck-color-widget-drag-handler-icon-color);
+
+			/* The "selected" part of the icon is invisible by default */
+			& .ck-icon__selected-indicator {
+				opacity: 0;
+
+				/* Note: The animation is longer on purpose. Simply feels better. */
+				transition: opacity 300ms var(--ck-color-widget-drag-animation-curve);
+			}
 		}
 	}
 
@@ -74,16 +102,17 @@
 	&.ck-widget_selected,
 	&.ck-widget_selected:hover {
 		& .ck-selection-handler {
-			display: block;
 			background-color: var(--ck-color-focus-border);
+
+			/* When the widget is selected, notify the user using the proper look of the icon. */
+			& .ck-icon .ck-icon__selected-indicator {
+				opacity: 1;
+			}
 		}
 	}
 
 	/* Show the selection handler on mouse hover over the widget. */
-	&:hover {
-		& .ck-selection-handler {
-			display: block;
-			background-color: var(--ck-color-widget-border-hover);
-		}
+	&:hover .ck-selection-handler {
+		background-color: var(--ck-color-widget-border-hover);
 	}
 }