From f5d49e7bd8b727729e9e692a9cd0a1cff45b9e2d Mon Sep 17 00:00:00 2001 From: Chen Xianmin Date: Tue, 6 Sep 2022 19:41:43 +0800 Subject: refactor: menu style --- assets/sass/_common/_normalize.scss | 392 +++++++++++---------------- assets/sass/_partial/_header.scss | 5 +- assets/sass/_partial/_header/_logo.scss | 3 - assets/sass/_partial/_header/_menu-item.scss | 56 ++++ assets/sass/_partial/_header/_menu.scss | 64 +---- assets/sass/jane.scss | 1 + layouts/partials/header.html | 4 +- 7 files changed, 232 insertions(+), 293 deletions(-) create mode 100644 assets/sass/_partial/_header/_menu-item.scss diff --git a/assets/sass/_common/_normalize.scss b/assets/sass/_common/_normalize.scss index 23ec608..192eb9c 100644 --- a/assets/sass/_common/_normalize.scss +++ b/assets/sass/_common/_normalize.scss @@ -1,89 +1,76 @@ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ /** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. */ html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ + line-height: 1.15; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ } +/* Sections + ========================================================================== */ + /** - * Remove default margin. + * Remove the margin in all browsers. */ body { margin: 0; } -/* HTML5 display definitions - ========================================================================== */ - /** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { + * Render the `main` element consistently in IE. + */ + +main { display: block; } /** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. */ -audio, -canvas, -progress, -video { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ +h1 { + font-size: 2em; + margin: 0.67em 0; } +/* Grouping content + ========================================================================== */ + /** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. */ -audio:not([controls]) { - display: none; - height: 0; +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ } /** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. */ -[hidden], -template { - display: none; +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ } -/* Links +/* Text-level semantics ========================================================================== */ /** - * Remove the gray background color from active links in IE 10. + * Remove the gray background on active links in IE 10. */ a { @@ -91,63 +78,39 @@ a { } /** - * Improve readability when focused and also mouse hovered in all browsers. - */ - -a:active, -a:hover { - outline: 0; -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */ abbr[title] { - border-bottom: 1px dotted; + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ } /** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + * Add the correct font weight in Chrome, Edge, and Safari. */ b, strong { - font-weight: bold; -} - -/** - * Address styling not present in Safari and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; + font-weight: bolder; } /** - * Address styling not present in IE 8/9. + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. */ -mark { - background: #ff0; - color: #000; +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ } /** - * Address inconsistent and variable font size in all browsers. + * Add the correct font size in all browsers. */ small { @@ -155,7 +118,8 @@ small { } /** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. */ sub, @@ -166,262 +130,220 @@ sup { vertical-align: baseline; } -sup { - top: -0.5em; -} - sub { bottom: -0.25em; } +sup { + top: -0.5em; +} + /* Embedded content ========================================================================== */ /** - * Remove border when inside `a` element in IE 8/9/10. + * Remove the border on images inside links in IE 10. */ img { - border: 0; -} - -/** - * Correct overflow not hidden in IE 9/10/11. - */ - -svg:not(:root) { - overflow: hidden; + border-style: none; } -/* Grouping content +/* Forms ========================================================================== */ /** - * Address margin not present in IE 8/9 and Safari. + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. */ -figure { - margin: 1em; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ } /** - * Contain overflow in all browsers. + * Show the overflow in IE. + * 1. Show the overflow in Edge. */ -pre { - overflow: auto; +button, +input { /* 1 */ + overflow: visible; } /** - * Address odd `em`-unit font size rendering in all browsers. + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. */ -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; +button, +select { /* 1 */ + text-transform: none; } -/* Forms - ========================================================================== */ - -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ - /** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + * Correct the inability to style clickable types in iOS and Safari. */ button, -input, -optgroup, -select, -textarea { - color: inherit; /* 1 */ - font: inherit; /* 2 */ - margin: 0; /* 3 */ +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; } /** - * Address `overflow` set to `hidden` in IE 8/9/10/11. + * Remove the inner border and padding in Firefox. */ -button { - overflow: visible; +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; } /** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. + * Restore the focus styles unset by the previous rule. */ -button, -select { - text-transform: none; +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; } /** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. + * Correct the padding in Firefox. */ -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ +fieldset { + padding: 0.35em 0.75em 0.625em; } /** - * Re-set default cursor for disabled elements. + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. */ -button[disabled], -html input[disabled] { - cursor: default; +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ } /** - * Remove inner padding and border in Firefox 4+. + * Add the correct vertical alignment in Chrome, Firefox, and Opera. */ -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; +progress { + vertical-align: baseline; } /** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. + * Remove the default vertical scrollbar in IE 10+. */ -input { - line-height: normal; +textarea { + overflow: auto; } /** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. */ -input[type="checkbox"], -input[type="radio"] { +[type="checkbox"], +[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. + * Correct the cursor style of increment and decrement buttons in Chrome. */ -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { height: auto; } /** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. */ -input[type="search"] { +[type="search"] { -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; /* 2 */ - box-sizing: content-box; + outline-offset: -2px; /* 2 */ } /** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). + * Remove the inner padding in Chrome and Safari on macOS. */ -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { +[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /** - * Define consistent border, margin, and padding. + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. */ -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ } -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ -} +/* Interactive + ========================================================================== */ -/** - * Remove default vertical scrollbar in IE 8/9/10/11. +/* + * Add the correct display in Edge, IE 10+, and Firefox. */ -textarea { - overflow: auto; +details { + display: block; } -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. +/* + * Add the correct display in all browsers. */ -optgroup { - font-weight: bold; +summary { + display: list-item; } -/* Tables +/* Misc ========================================================================== */ /** - * Remove most spacing between table cells. + * Add the correct display in IE 10+. */ -table { - border-collapse: collapse; - border-spacing: 0; +template { + display: none; } -td, -th { - padding: 0; +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; } diff --git a/assets/sass/_partial/_header.scss b/assets/sass/_partial/_header.scss index 1ab1917..866a53a 100644 --- a/assets/sass/_partial/_header.scss +++ b/assets/sass/_partial/_header.scss @@ -3,7 +3,10 @@ // ============================== .header { - @include clearfix; + @include clearfix; + + display: flex; + flex-wrap: wrap; @import '_header/logo'; @import '_header/menu'; diff --git a/assets/sass/_partial/_header/_logo.scss b/assets/sass/_partial/_header/_logo.scss index f8c77b8..b213595 100644 --- a/assets/sass/_partial/_header/_logo.scss +++ b/assets/sass/_partial/_header/_logo.scss @@ -3,9 +3,6 @@ // ============================= .logo-wrapper { - float: left; - padding-left: 15px; - .logo { font-size: $logo-font-size; font-family: $logo-font-family; diff --git a/assets/sass/_partial/_header/_menu-item.scss b/assets/sass/_partial/_header/_menu-item.scss new file mode 100644 index 0000000..1449a3d --- /dev/null +++ b/assets/sass/_partial/_header/_menu-item.scss @@ -0,0 +1,56 @@ +.menu-item { + display: block; + height: 100%; + min-height: 2em; + margin: 0 1em; + position: relative; + + &:hover { + border-bottom: 2px solid $theme-color; + + .menu-item-link { + color: $theme-color; + } + } + + .menu-item-link { + display: flex; + align-items: center; + height: 100%; + } + + .submenu { + visibility: hidden; + position: absolute; + min-width: 100%; + transition: 0.2s 1s; + list-style: none; + padding: 0; + background: #fff; + white-space: nowrap; + border: 1px solid #ddd; + border-bottom: none; + transition: 0.2s 0.2s; /* delay of seconds on hover off */ + z-index: 99; + + .submenu-item { + border-bottom: 1px solid #ddd; + + &:hover { + background-color: #f5f5f5; + a { + color: $theme-color; + } + } + + a { + padding: 12px; + } + } + } + + &:hover .submenu { + visibility: visible; + transition-delay: 0s; /* react immediately on hover */ + } +} diff --git a/assets/sass/_partial/_header/_menu.scss b/assets/sass/_partial/_header/_menu.scss index 691dfe5..c4aeaf8 100644 --- a/assets/sass/_partial/_header/_menu.scss +++ b/assets/sass/_partial/_header/_menu.scss @@ -3,60 +3,24 @@ // ============================= .site-navbar { + margin-left: auto; + + // reset default ul + ul { + margin: 0 + } + .menu { - float: right; - padding-right: 15px; + display: flex; + height: 100%; font-family: $global-serif-font-family; .active { - font-weight: 700; + font-weight: bold; + border-bottom: 2px solid; } - - .menu-item { - display: inline-block; - margin-left: 1em; - margin-right: 1em; - position: relative; - - & + .menu-item { - margin-left: $menu-item-margin-left;; - } - - .submenu { - visibility: hidden; - position: absolute; - top: 120%; - // left: 50%; - transition: 0.2s 1s; - list-style: none; - padding: 0; - background: #fff; - white-space:nowrap; - border: 1px solid #ddd; - border-bottom: none; - transition: 0.2s 0.2s; /* delay of seconds on hover off */ - z-index: 99; - - li { - border-bottom: 1px solid #ddd; - - a { - padding: 12px; - } - } - } - &:hover .submenu { - visibility: visible; - transition-delay: 0s; /* react immediately on hover */ - } - - // @include underline-from-center; - } - - .menu-item-link { - font-size: $menu-link-font-size; - } + @import "./menu-item"; } } @@ -65,10 +29,6 @@ font-size: 11px; } -.menu a:hover { - color: $theme-color; -} - @include max-screen() { .site-navbar { display: none; diff --git a/assets/sass/jane.scss b/assets/sass/jane.scss index 88734b7..b759aad 100644 --- a/assets/sass/jane.scss +++ b/assets/sass/jane.scss @@ -1,6 +1,7 @@ @import "_custom/custom"; @import "_variables"; +@import "_common/normalize"; @import "_common/utils"; @import "_common/animation"; diff --git a/layouts/partials/header.html b/layouts/partials/header.html index f87fe28..0895ca2 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -18,7 +18,7 @@ {{ .Name }}