diff --git a/ghost/admin/assets/sass/components/dropdowns.scss b/ghost/admin/assets/sass/components/dropdowns.scss
index 69070b0fa2..b1c99da6c4 100644
--- a/ghost/admin/assets/sass/components/dropdowns.scss
+++ b/ghost/admin/assets/sass/components/dropdowns.scss
@@ -1,176 +1,318 @@
//
-// Dropdown Styles
+// Dropdown menus
// --------------------------------------------------
-// Wrapper
-// Does nothing yet...
-.dropdown {}
-// List
-.dropdown-menu {
- position: relative;
+// Dropdown arrow/caret
+.caret {
display: inline-block;
- min-width: 160px;
- padding: 0.5rem 0;
- margin: 0;
- font-size: 1.4rem;
- line-height: 1;
- font-weight: normal;
- text-transform: none;
- letter-spacing: 0;
- background: #fff;
- border: #B0BEC4 1px solid;
- box-shadow: rgba(0,0,0,0.175) 0 2px 6px;
- border-radius: 2px;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px solid;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+}
- // Item Resets - This means we can use any element
- li {
- list-style: none;
+// The dropdown wrapper (div)
+.dropdown {
+ position: relative;
+}
+
+// Prevent the focus on the dropdown toggle when closing dropdowns
+.dropdown-toggle:focus {
+ outline: 0;
+}
+
+// The dropdown menu (ul)
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none; // none by default, but block on "open" of the menu
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0; // override default ul
+ list-style: none;
+ font-size: 14px;
+ text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
+ background-color: #fff;
+ border: 1px solid rgba(0,0,0,.15);
+ border-radius: $rounded;
+ box-shadow: 0 6px 12px rgba(0,0,0,.175);
+ background-clip: padding-box;
+
+ // Aligns the dropdown menu to right
+ //
+ // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`
+ &.pull-right {
+ right: 0;
+ left: auto;
}
+ // Dividers (basically an hr) within the dropdown
+ .divider {
+ height: 1px;
+ margin: ((20px / 2) - 1) 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+ }
+
+ // Links within the dropdown menu
+ > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.428571429;
+ color: #333;
+ white-space: nowrap; // prevent links from randomly breaking onto new lines
+ }
+}
+
+// Hover/Focus state
+.dropdown-menu > li > a {
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ color: #262626;
+ background-color: #f5f5f5;
+ }
+}
+
+// Active state
+.dropdown-menu > .active > a {
+ &,
+ &:hover,
+ &:focus {
+ color: #fff;
+ text-decoration: none;
+ outline: 0;
+ background-color: #428bca;
+ }
+}
+
+// Disabled state
+//
+// Gray out text and ensure the hover/focus state remains gray
+
+.dropdown-menu > .disabled > a {
+ &,
+ &:hover,
+ &:focus {
+ color: #777;
+ }
+}
+// Nuke hover/focus effects
+.dropdown-menu > .disabled > a {
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ background-color: transparent;
+ background-image: none; // Remove CSS gradient
+ cursor: not-allowed;
+ }
+}
+
+// Open state for the dropdown
+.open {
+ // Show the menu
+ > .dropdown-menu {
+ display: block;
+ }
+
+ // Remove the outline when :focus is triggered
+ > a {
+ outline: 0;
+ }
+}
+
+// Menu positioning
+//
+// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
+// menu with the parent.
+.dropdown-menu-right {
+ left: auto; // Reset the default from `.dropdown-menu`
+ right: 0;
+}
+// With v3, we enabled auto-flipping if you have a dropdown within a right
+// aligned nav component. To enable the undoing of that, we provide an override
+// to restore the default dropdown menu alignment.
+//
+// This is only for left-aligning a dropdown menu within a `.navbar-right` or
+// `.pull-right` nav component.
+.dropdown-menu-left {
+ left: 0;
+ right: auto;
+}
+
+// Dropdown section headers
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.428571429;
+ color: #777;
+ white-space: nowrap; // as with > li > a
+}
+
+// Backdrop to catch body clicks on mobile, etc.
+.dropdown-backdrop {
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ z-index: (1000 - 10);
+}
+
+// Right aligned dropdowns
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+
+// Allow for dropdowns to go bottom up (aka, dropup-menu)
+//
+// Just add .dropup after the standard .dropdown class and you're set, bro.
+// TODO: abstract this so that the navbar fixed styles are not placed here?
+
+.dropup,
+.navbar-fixed-bottom .dropdown {
+ // Reverse the caret
+ .caret {
+ border-top: 0;
+ border-bottom: 4px solid;
+ content: "";
+ }
+ // Different positioning for bottom up menu
+ .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px;
+ }
+}
+
+
+// Component alignment
+//
+// Reiterate per navbar.less and the modified component alignment there.
+
+@media (min-width: 768px) {
+ .navbar-right {
+ .dropdown-menu {
+ right: 0; left: auto;
+ }
+ // Necessary for overrides of the default right aligned menu.
+ // Will remove come v4 in all likelihood.
+ .dropdown-menu-left {
+ left: 0; right: auto;
+ }
+ }
+}
+
+
+//
+// Dropdown triangles
+// --------------------------------------------------
+
+// Placeholders
+%dropdown-triangle {
&:before {
content: '';
position: absolute;
- border-style: solid;
- border-color: #fff transparent;
display: block;
- width: 0;
} // :before
&:after {
content: '';
position: absolute;
- width: ($dropdown_triangle * 1.5);
- height: ($dropdown_triangle * 1.5);
- background: #B0BEC4;
- transform: rotate(45deg);
z-index: -1;
} // :after
+}
-} // .dropdown-menu
-
-
-.dropdown-triangle-top {
+%dropdown-triangle-top {
&:before {
- border-width: 0 $dropdown_triangle $dropdown_triangle $dropdown_triangle;
+ @include triangle(($dropdown_triangle * 2), #fff, up);
top: -$dropdown_triangle;
}
&:after {
- top: -($dropdown_triangle - 1);
+ @include triangle(($dropdown_triangle * 2) + 2, #B0BEC4, up);
+ top: -($dropdown_triangle + 1);
}
}
-.dropdown-triangle-bottom {
+%dropdown-triangle-bottom {
&:before {
- border-width: $dropdown_triangle $dropdown_triangle 0 $dropdown_triangle;
+ @include triangle(($dropdown_triangle * 2), #fff, down);
bottom: -$dropdown_triangle;
}
&:after {
- bottom: -($dropdown_triangle - 1);
+ @include triangle(($dropdown_triangle * 2) + 2, #B0BEC4, down);
+ bottom: -($dropdown_triangle + 1);
}
}
-.dropdown-triangle-center {
+%dropdown-triangle-center {
&:before {
left: 50%;
- margin-left: -$dropdown_triangle;
+ margin-left: (-$dropdown_triangle);
}
&:after {
left: 50%;
- margin-left: -($dropdown_triangle * 1.5 / 2);
+ margin-left: -($dropdown_triangle + 1);
}
}
+
// TODO: Make the values here use the $dropdown_triangle var
-.dropdown-triangle-left {
+%dropdown-triangle-left {
&:before {
- left: 10px;
+ left: ($dropdown_triangle + 2);
}
&:after {
- left: 12px;
+ left: ($dropdown_triangle + 1);
}
}
-.dropdown-triangle-right {
+%dropdown-triangle-right {
&:before {
left: auto;
- right: 10px;
+ right: ($dropdown_triangle + 2);
}
&:after {
left: auto;
- right: 12px;
+ right: ($dropdown_triangle + 1);
}
}
-.dropdown-top {
- @extend .dropdown-menu;
- @extend .dropdown-triangle-center;
- @extend .dropdown-triangle-top;
+// Usable classes
+.dropdown-triangle-top {
+ @extend %dropdown-triangle;
+ @extend %dropdown-triangle-top;
+ @extend %dropdown-triangle-center;
}
-.dropdown-top-left {
- @extend .dropdown-menu;
- @extend .dropdown-triangle-top;
- @extend .dropdown-triangle-left;
+.dropdown-triangle-top-left {
+ @extend %dropdown-triangle;
+ @extend %dropdown-triangle-top;
+ @extend %dropdown-triangle-left;
}
-.dropdown-top-right {
- @extend .dropdown-menu;
- @extend .dropdown-triangle-top;
- @extend .dropdown-triangle-right;
+.dropdown-triangle-top-right {
+ @extend %dropdown-triangle;
+ @extend %dropdown-triangle-top;
+ @extend %dropdown-triangle-right;
}
-.dropdown-bottom {
- @extend .dropdown-menu;
- @extend .dropdown-triangle-center;
- @extend .dropdown-triangle-bottom;
+.dropdown-triangle-bottom {
+ @extend %dropdown-triangle;
+ @extend %dropdown-triangle-bottom;
+ @extend %dropdown-triangle-center;
}
-.dropdown-bottom-left {
- @extend .dropdown-menu;
- @extend .dropdown-triangle-bottom;
- @extend .dropdown-triangle-left;
+.dropdown-triangle-bottom-left {
+ @extend %dropdown-triangle;
+ @extend %dropdown-triangle-bottom;
+ @extend %dropdown-triangle-left;
}
-.dropdown-bottom-right {
- @extend .dropdown-menu;
- @extend .dropdown-triangle-bottom;
- @extend .dropdown-triangle-right;
-}
-
-// List Item
-.dropdown-item {
- display: block;
- width: 100%;
- padding: 0.8rem 2rem;
- font-size: 1.4rem;
- line-height: 1;
- color: #000;
-
- &:not(.divider):hover,
- &:not(.divider):focus {
- color: #fff;
- background: $blue;
- }
-} // .dropdown-item
-
-// Divider
-.dropdown-menu .divider {
- display: block;
- padding: 0;
- margin: 0.9rem 0;
- height: 1px;
- width: 100%;
- position: relative;
- background: #D0DADE;
- overflow: hidden;
-} // .dropdown-menu .divider
-
-// Icons
-.dropdown-with-icons {
- .dropdown-item:not(.divider) {
- padding: 0.6rem 3rem;
- &[class*='icon-'] {
- position: relative;
- &:before {
- position: absolute;
- top: 50%;
- left: 1rem;
- font-size: 1.2rem;
- line-height: 1;
- margin-top: -0.6rem;
- }
- } // &[class*='icon-']
- } // .dropdown-item
-} // .dropdown-with-icons
\ No newline at end of file
+.dropdown-triangle-bottom-right {
+ @extend %dropdown-triangle;
+ @extend %dropdown-triangle-bottom;
+ @extend %dropdown-triangle-right;
+}
\ No newline at end of file
diff --git a/ghost/admin/assets/sass/components/dropdowns_old.scss b/ghost/admin/assets/sass/components/dropdowns_old.scss
new file mode 100644
index 0000000000..69070b0fa2
--- /dev/null
+++ b/ghost/admin/assets/sass/components/dropdowns_old.scss
@@ -0,0 +1,176 @@
+//
+// Dropdown Styles
+// --------------------------------------------------
+
+// Wrapper
+// Does nothing yet...
+.dropdown {}
+
+// List
+.dropdown-menu {
+ position: relative;
+ display: inline-block;
+ min-width: 160px;
+ padding: 0.5rem 0;
+ margin: 0;
+ font-size: 1.4rem;
+ line-height: 1;
+ font-weight: normal;
+ text-transform: none;
+ letter-spacing: 0;
+ background: #fff;
+ border: #B0BEC4 1px solid;
+ box-shadow: rgba(0,0,0,0.175) 0 2px 6px;
+ border-radius: 2px;
+
+ // Item Resets - This means we can use any element
+ li {
+ list-style: none;
+ }
+
+ &:before {
+ content: '';
+ position: absolute;
+ border-style: solid;
+ border-color: #fff transparent;
+ display: block;
+ width: 0;
+ } // :before
+
+ &:after {
+ content: '';
+ position: absolute;
+ width: ($dropdown_triangle * 1.5);
+ height: ($dropdown_triangle * 1.5);
+ background: #B0BEC4;
+ transform: rotate(45deg);
+ z-index: -1;
+ } // :after
+
+} // .dropdown-menu
+
+
+.dropdown-triangle-top {
+ &:before {
+ border-width: 0 $dropdown_triangle $dropdown_triangle $dropdown_triangle;
+ top: -$dropdown_triangle;
+ }
+ &:after {
+ top: -($dropdown_triangle - 1);
+ }
+}
+.dropdown-triangle-bottom {
+ &:before {
+ border-width: $dropdown_triangle $dropdown_triangle 0 $dropdown_triangle;
+ bottom: -$dropdown_triangle;
+ }
+ &:after {
+ bottom: -($dropdown_triangle - 1);
+ }
+}
+.dropdown-triangle-center {
+ &:before {
+ left: 50%;
+ margin-left: -$dropdown_triangle;
+ }
+ &:after {
+ left: 50%;
+ margin-left: -($dropdown_triangle * 1.5 / 2);
+ }
+}
+// TODO: Make the values here use the $dropdown_triangle var
+.dropdown-triangle-left {
+ &:before {
+ left: 10px;
+ }
+ &:after {
+ left: 12px;
+ }
+}
+.dropdown-triangle-right {
+ &:before {
+ left: auto;
+ right: 10px;
+ }
+ &:after {
+ left: auto;
+ right: 12px;
+ }
+}
+
+.dropdown-top {
+ @extend .dropdown-menu;
+ @extend .dropdown-triangle-center;
+ @extend .dropdown-triangle-top;
+}
+.dropdown-top-left {
+ @extend .dropdown-menu;
+ @extend .dropdown-triangle-top;
+ @extend .dropdown-triangle-left;
+}
+.dropdown-top-right {
+ @extend .dropdown-menu;
+ @extend .dropdown-triangle-top;
+ @extend .dropdown-triangle-right;
+}
+.dropdown-bottom {
+ @extend .dropdown-menu;
+ @extend .dropdown-triangle-center;
+ @extend .dropdown-triangle-bottom;
+}
+.dropdown-bottom-left {
+ @extend .dropdown-menu;
+ @extend .dropdown-triangle-bottom;
+ @extend .dropdown-triangle-left;
+}
+.dropdown-bottom-right {
+ @extend .dropdown-menu;
+ @extend .dropdown-triangle-bottom;
+ @extend .dropdown-triangle-right;
+}
+
+// List Item
+.dropdown-item {
+ display: block;
+ width: 100%;
+ padding: 0.8rem 2rem;
+ font-size: 1.4rem;
+ line-height: 1;
+ color: #000;
+
+ &:not(.divider):hover,
+ &:not(.divider):focus {
+ color: #fff;
+ background: $blue;
+ }
+} // .dropdown-item
+
+// Divider
+.dropdown-menu .divider {
+ display: block;
+ padding: 0;
+ margin: 0.9rem 0;
+ height: 1px;
+ width: 100%;
+ position: relative;
+ background: #D0DADE;
+ overflow: hidden;
+} // .dropdown-menu .divider
+
+// Icons
+.dropdown-with-icons {
+ .dropdown-item:not(.divider) {
+ padding: 0.6rem 3rem;
+ &[class*='icon-'] {
+ position: relative;
+ &:before {
+ position: absolute;
+ top: 50%;
+ left: 1rem;
+ font-size: 1.2rem;
+ line-height: 1;
+ margin-top: -0.6rem;
+ }
+ } // &[class*='icon-']
+ } // .dropdown-item
+} // .dropdown-with-icons
\ No newline at end of file
diff --git a/ghost/admin/assets/sass/layouts/editor.scss b/ghost/admin/assets/sass/layouts/editor.scss
index bef3e5d7ac..8c6c610d24 100644
--- a/ghost/admin/assets/sass/layouts/editor.scss
+++ b/ghost/admin/assets/sass/layouts/editor.scss
@@ -492,7 +492,7 @@ body.zen {
}
.editor-options{
- @extend .dropdown-bottom-right;
+ @extend .dropdown-bottom-right !optional;
bottom: 140%;
right: -3%;
diff --git a/ghost/admin/docs/dropdown.html b/ghost/admin/docs/dropdown.html
deleted file mode 100644
index 37c11a19dc..0000000000
--- a/ghost/admin/docs/dropdown.html
+++ /dev/null
@@ -1,47 +0,0 @@
----
-layout: raw
-title: Dropdowns - Ghost UI
----
-
-
-
-
Dropdowns
-
-Basic usage notes
-
-
- - The styles should be markup-independent, so you can use divs, lists, and so on.
- - Add the class
.dropdown-with-icons
to .dropdown-menu
is you will be using icons in the dropdown items.
-
-
-
-
-Dropdown with Icons
-
-
-
-
-
-{% assign dropdown_classes = "dropdown-top|dropdown-top-left|dropdown-top-right|dropdown-bottom|dropdown-bottom-left|dropdown-bottom-right" | split: "|" %}
-{% for item in dropdown_classes %}
- Sample: {{item}}
-
-{% endfor %}
\ No newline at end of file
diff --git a/ghost/admin/docs/dropdowns.html b/ghost/admin/docs/dropdowns.html
new file mode 100644
index 0000000000..eff7763c8c
--- /dev/null
+++ b/ghost/admin/docs/dropdowns.html
@@ -0,0 +1,52 @@
+---
+layout: default
+title: Dropdowns · Ghost UI
+---
+
+
+
+
+
+ Dropdowns
+
+
+
+ Triangle Variations
+
+ {% assign dropdown_classes = "dropdown-triangle-top|dropdown-triangle-top-left|dropdown-triangle-top-right|dropdown-triangle-bottom|dropdown-triangle-bottom-left|dropdown-triangle-bottom-right" | split: "|" %}
+ {% for item in dropdown_classes %}
+ Variation: {{item}}
+
+
+
+ {% endfor %}
+
+
\ No newline at end of file