diff --git a/README.md b/README.md index 6438371..0d05b7a 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,33 @@ The block supports all standard WordPress block features: - **Spacing**: Margin, Padding - **Colors**: Background, Text +### Theme.json Styling + +The Priority Plus Navigation dropdown menu can be customized via your theme's `theme.json`. The plugin provides sensible defaults, and you can override any property you want to customize. + +**Quick Example:** + +```json +{ + "version": 3, + "settings": { + "custom": { + "priorityPlusNavigation": { + "dropdown": { + "backgroundColor": "#f0f0f0", + "borderColor": "#999999", + "itemHoverBackgroundColor": "rgba(0, 0, 0, 0.08)" + } + } + } + } +} +``` + +**Available Properties:** `backgroundColor`, `borderColor`, `borderWidth`, `borderRadius`, `boxShadow`, `itemSpacing`, `itemHoverBackgroundColor`, `itemHoverTextColor`, `multiLevelIndent` + +**📖 For complete styling documentation, examples, and troubleshooting, see [docs/styling.md](docs/styling.md)** + ## How It Works ### Architecture diff --git a/build/priority-plus-nav-editor-rtl.css b/build/priority-plus-nav-editor-rtl.css index 9fea353..5e7b9ef 100644 --- a/build/priority-plus-nav-editor-rtl.css +++ b/build/priority-plus-nav-editor-rtl.css @@ -1 +1 @@ -.is-style-priority-plus-navigation{--priority-plus-navigation--background:transparent;--priority-plus-navigation--background-hover:transparent;--priority-plus-navigation--color:inherit;--priority-plus-navigation--color-hover:inherit;--priority-plus-navigation--border-color:transparent;--priority-plus-navigation--border-style:solid;--priority-plus-navigation--border-width:0;--priority-plus-navigation--border-radius:0;--priority-plus-navigation--font-family:inherit;--priority-plus-navigation--font-size:inherit;--priority-plus-navigation--font-weight:inherit;--priority-plus-navigation--padding:0}.editor-styles-wrapper .priority-plus-navigation-editor-wrapper nav{align-items:center;border:2px solid green!important;display:flex;flex-wrap:nowrap;width:100%}.priority-plus-navigation-disable-always-option .components-toggle-group-control-option-base:last-child{cursor:not-allowed;opacity:.4;pointer-events:none;text-decoration:line-through} +:root{--wp--custom--priority-plus-navigation--dropdown--background-color:#fff;--wp--custom--priority-plus-navigation--dropdown--border-color:#ddd;--wp--custom--priority-plus-navigation--dropdown--border-width:1px;--wp--custom--priority-plus-navigation--dropdown--border-radius:4px;--wp--custom--priority-plus-navigation--dropdown--box-shadow:0 4px 12px rgba(0,0,0,.15);--wp--custom--priority-plus-navigation--dropdown--item-spacing:0.75rem 1.25rem;--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color:rgba(0,0,0,.05);--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color:inherit;--wp--custom--priority-plus-navigation--dropdown--multi-level-indent:1.25rem}.is-style-priority-plus-navigation{--priority-plus-navigation--background:transparent;--priority-plus-navigation--background-hover:transparent;--priority-plus-navigation--color:inherit;--priority-plus-navigation--color-hover:inherit;--priority-plus-navigation--border-color:transparent;--priority-plus-navigation--border-style:solid;--priority-plus-navigation--border-width:0;--priority-plus-navigation--border-radius:0;--priority-plus-navigation--font-family:inherit;--priority-plus-navigation--font-size:inherit;--priority-plus-navigation--font-weight:inherit;--priority-plus-navigation--padding:0}.editor-styles-wrapper .priority-plus-navigation-editor-wrapper nav{align-items:center;border:2px solid green!important;display:flex;flex-wrap:nowrap;width:100%}.priority-plus-navigation-disable-always-option .components-toggle-group-control-option-base:last-child{cursor:not-allowed;opacity:.4;pointer-events:none;text-decoration:line-through} diff --git a/build/priority-plus-nav-editor.asset.php b/build/priority-plus-nav-editor.asset.php index 2a6d54a..c350a4c 100644 --- a/build/priority-plus-nav-editor.asset.php +++ b/build/priority-plus-nav-editor.asset.php @@ -1 +1 @@ - array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-primitives'), 'version' => 'e4f2872018d1c6be1b93'); + array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-primitives'), 'version' => '51a330a400fb321176cf'); diff --git a/build/priority-plus-nav-editor.css b/build/priority-plus-nav-editor.css index 9fea353..5e7b9ef 100644 --- a/build/priority-plus-nav-editor.css +++ b/build/priority-plus-nav-editor.css @@ -1 +1 @@ -.is-style-priority-plus-navigation{--priority-plus-navigation--background:transparent;--priority-plus-navigation--background-hover:transparent;--priority-plus-navigation--color:inherit;--priority-plus-navigation--color-hover:inherit;--priority-plus-navigation--border-color:transparent;--priority-plus-navigation--border-style:solid;--priority-plus-navigation--border-width:0;--priority-plus-navigation--border-radius:0;--priority-plus-navigation--font-family:inherit;--priority-plus-navigation--font-size:inherit;--priority-plus-navigation--font-weight:inherit;--priority-plus-navigation--padding:0}.editor-styles-wrapper .priority-plus-navigation-editor-wrapper nav{align-items:center;border:2px solid green!important;display:flex;flex-wrap:nowrap;width:100%}.priority-plus-navigation-disable-always-option .components-toggle-group-control-option-base:last-child{cursor:not-allowed;opacity:.4;pointer-events:none;text-decoration:line-through} +:root{--wp--custom--priority-plus-navigation--dropdown--background-color:#fff;--wp--custom--priority-plus-navigation--dropdown--border-color:#ddd;--wp--custom--priority-plus-navigation--dropdown--border-width:1px;--wp--custom--priority-plus-navigation--dropdown--border-radius:4px;--wp--custom--priority-plus-navigation--dropdown--box-shadow:0 4px 12px rgba(0,0,0,.15);--wp--custom--priority-plus-navigation--dropdown--item-spacing:0.75rem 1.25rem;--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color:rgba(0,0,0,.05);--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color:inherit;--wp--custom--priority-plus-navigation--dropdown--multi-level-indent:1.25rem}.is-style-priority-plus-navigation{--priority-plus-navigation--background:transparent;--priority-plus-navigation--background-hover:transparent;--priority-plus-navigation--color:inherit;--priority-plus-navigation--color-hover:inherit;--priority-plus-navigation--border-color:transparent;--priority-plus-navigation--border-style:solid;--priority-plus-navigation--border-width:0;--priority-plus-navigation--border-radius:0;--priority-plus-navigation--font-family:inherit;--priority-plus-navigation--font-size:inherit;--priority-plus-navigation--font-weight:inherit;--priority-plus-navigation--padding:0}.editor-styles-wrapper .priority-plus-navigation-editor-wrapper nav{align-items:center;border:2px solid green!important;display:flex;flex-wrap:nowrap;width:100%}.priority-plus-navigation-disable-always-option .components-toggle-group-control-option-base:last-child{cursor:not-allowed;opacity:.4;pointer-events:none;text-decoration:line-through} diff --git a/build/style-priority-plus-navigation-rtl.css b/build/style-priority-plus-navigation-rtl.css index 9a1dfd8..3dea6e6 100644 --- a/build/style-priority-plus-navigation-rtl.css +++ b/build/style-priority-plus-navigation-rtl.css @@ -1 +1 @@ -.is-style-priority-plus-navigation{--priority-plus-navigation--background:transparent;--priority-plus-navigation--background-hover:transparent;--priority-plus-navigation--color:inherit;--priority-plus-navigation--color-hover:inherit;--priority-plus-navigation--border-color:transparent;--priority-plus-navigation--border-style:solid;--priority-plus-navigation--border-width:0;--priority-plus-navigation--border-radius:0;--priority-plus-navigation--font-family:inherit;--priority-plus-navigation--font-size:inherit;--priority-plus-navigation--font-weight:inherit;--priority-plus-navigation--padding:0;position:relative}.is-style-priority-plus-navigation .priority-plus-navigation-more-button{align-items:center;background:var(--priority-plus-navigation--background);border-color:var(--priority-plus-navigation--border-color);border-radius:var(--priority-plus-navigation--border-radius);border-style:var(--priority-plus-navigation--border-style);border-width:var(--priority-plus-navigation--border-width);color:var(--priority-plus-navigation--color);cursor:pointer;display:flex;font-family:var(--priority-plus-navigation--font-family);font-size:var(--priority-plus-navigation--font-size);font-weight:var(--priority-plus-navigation--font-weight);gap:.1rem;padding:var(--priority-plus-navigation--padding);transition:all .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-more-button:hover{background:var(--priority-plus-navigation--background-hover);color:var(--priority-plus-navigation--color-hover)}.is-style-priority-plus-navigation .priority-plus-navigation-more-button .priority-plus-navigation-icon{align-items:center;display:inline-flex;line-height:1;margin-left:-5px}.is-style-priority-plus-navigation .priority-plus-navigation-more-button .priority-plus-navigation-icon svg{fill:currentColor;height:1.25em;width:1.25em}.is-style-priority-plus-navigation .priority-plus-navigation-more-button[aria-expanded=true] .priority-plus-navigation-icon{transform:rotate(-180deg)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown{background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 4px 12px rgba(0,0,0,.15);list-style:none;margin:0;min-width:200px;opacity:0;padding:.5rem 0;position:absolute;left:0;top:calc(100% + .5rem);transform:translateY(-10px);transition:all .2s ease;visibility:hidden;z-index:1000}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown.is-open{opacity:1;transform:translateY(0);visibility:visible}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown li{margin:0;padding:0}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown li a{color:inherit;display:block;padding:.75rem 1rem;text-decoration:none;transition:background .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown li a:hover{background:rgba(0,0,0,.05)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content{background:transparent;display:none;list-style:none;margin:0;padding:0}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content[aria-hidden=true]{display:none!important}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content.is-open{display:block!important}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content{padding-right:1rem}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-wrapper{align-items:center;display:flex;justify-content:space-between;width:100%}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full{align-items:center;background:transparent;border:none;color:inherit;cursor:pointer;display:flex;font-family:inherit;font-size:inherit;justify-content:space-between;padding:.75rem 1rem;text-align:right;width:100%}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full .priority-plus-navigation-accordion-text{flex:1}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full .priority-plus-navigation-accordion-arrow{margin-right:.5rem;transition:transform .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full[aria-expanded=true] .priority-plus-navigation-accordion-arrow{transform:rotate(-90deg)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-link{flex:1;padding:.75rem 1rem}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow{background:transparent;border:none;color:inherit;cursor:pointer;flex-shrink:0;font-family:inherit;font-size:inherit;padding:.75rem}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow .priority-plus-navigation-accordion-arrow{display:inline-block;transition:transform .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow[aria-expanded=true] .priority-plus-navigation-accordion-arrow{transform:rotate(-90deg)}.is-style-priority-plus-navigation[data-more-hidden=true] .priority-plus-navigation-more{display:none} +:root{--wp--custom--priority-plus-navigation--dropdown--background-color:#fff;--wp--custom--priority-plus-navigation--dropdown--border-color:#ddd;--wp--custom--priority-plus-navigation--dropdown--border-width:1px;--wp--custom--priority-plus-navigation--dropdown--border-radius:4px;--wp--custom--priority-plus-navigation--dropdown--box-shadow:0 4px 12px rgba(0,0,0,.15);--wp--custom--priority-plus-navigation--dropdown--item-spacing:0.75rem 1.25rem;--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color:rgba(0,0,0,.05);--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color:inherit;--wp--custom--priority-plus-navigation--dropdown--multi-level-indent:1.25rem}.is-style-priority-plus-navigation{--priority-plus-navigation--background:transparent;--priority-plus-navigation--background-hover:transparent;--priority-plus-navigation--color:inherit;--priority-plus-navigation--color-hover:inherit;--priority-plus-navigation--border-color:transparent;--priority-plus-navigation--border-style:solid;--priority-plus-navigation--border-width:0;--priority-plus-navigation--border-radius:0;--priority-plus-navigation--font-family:inherit;--priority-plus-navigation--font-size:inherit;--priority-plus-navigation--font-weight:inherit;--priority-plus-navigation--padding:0;position:relative}.is-style-priority-plus-navigation .priority-plus-navigation-more-button{align-items:center;background:var(--priority-plus-navigation--background);border-color:var(--priority-plus-navigation--border-color);border-radius:var(--priority-plus-navigation--border-radius);border-style:var(--priority-plus-navigation--border-style);border-width:var(--priority-plus-navigation--border-width);color:var(--priority-plus-navigation--color);cursor:pointer;display:flex;font-family:var(--priority-plus-navigation--font-family);font-size:var(--priority-plus-navigation--font-size);font-weight:var(--priority-plus-navigation--font-weight);padding:var(--priority-plus-navigation--padding);transition:background .2s ease,color .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-more-button:hover{background:var(--priority-plus-navigation--background-hover);color:var(--priority-plus-navigation--color-hover)}.is-style-priority-plus-navigation .priority-plus-navigation-more-button .priority-plus-navigation-icon{align-items:center;display:inline-flex;line-height:1}.is-style-priority-plus-navigation .priority-plus-navigation-more-button .priority-plus-navigation-icon svg{fill:currentcolor;height:1.25em;width:1.25em}.is-style-priority-plus-navigation .priority-plus-navigation-more-button[aria-expanded=true] .priority-plus-navigation-icon{transform:rotate(-180deg)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown{background:var(--wp--custom--priority-plus-navigation--dropdown--background-color);border-color:var(--wp--custom--priority-plus-navigation--dropdown--border-color);border-radius:var(--wp--custom--priority-plus-navigation--dropdown--border-radius);border-style:solid;border-width:var(--wp--custom--priority-plus-navigation--dropdown--border-width);box-shadow:var(--wp--custom--priority-plus-navigation--dropdown--box-shadow);list-style:none;margin:0;min-width:200px;opacity:0;overflow:hidden;padding:0;position:absolute;left:0;top:100%;transform:translateY(-10px);transition:opacity .2s ease,visibility .2s ease,transform .2s ease;visibility:hidden;z-index:1000}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown.is-open{opacity:1;transform:translateY(0);visibility:visible}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown li{margin:0;padding:0}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown li a{color:inherit;display:block;padding:var(--wp--custom--priority-plus-navigation--dropdown--item-spacing);text-decoration:none;transition:background .2s ease,color .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown li a:hover{background:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color);color:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content{background:transparent;display:none;list-style:none;margin:0;padding:0}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content[aria-hidden=true]{display:none!important}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content.is-open{display:block!important}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-toggle-full,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-wrapper>a,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content>li>a{padding-right:calc(1rem + var(--wp--custom--priority-plus-navigation--dropdown--multi-level-indent))}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-toggle-full,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-wrapper>a,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>a{padding-right:calc(1rem + var(--wp--custom--priority-plus-navigation--dropdown--multi-level-indent)*2)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-toggle-full,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-wrapper>a,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>a{padding-right:calc(1rem + var(--wp--custom--priority-plus-navigation--dropdown--multi-level-indent)*3)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-toggle-full,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-wrapper>a,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>a{padding-right:calc(1rem + var(--wp--custom--priority-plus-navigation--dropdown--multi-level-indent)*4)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-wrapper{align-items:center;display:flex;justify-content:space-between;width:100%}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full{align-items:center;background:transparent;border:none;color:inherit;cursor:pointer;display:flex;font-family:inherit;font-size:inherit;justify-content:space-between;padding:var(--wp--custom--priority-plus-navigation--dropdown--item-spacing);text-align:right;transition:background .2s ease,color .2s ease;width:100%}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full .priority-plus-navigation-accordion-text{flex:1}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full .priority-plus-navigation-accordion-arrow{margin-right:.5rem;transition:transform .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full:hover{background:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color);color:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full[aria-expanded=true] .priority-plus-navigation-accordion-arrow{transform:rotate(-90deg)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-link{flex:1;padding:var(--wp--custom--priority-plus-navigation--dropdown--item-spacing);transition:background .2s ease,color .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-link:hover{background:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color);color:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow{background:transparent;border:none;color:inherit;cursor:pointer;flex-shrink:0;font-family:inherit;font-size:inherit;padding:var(--wp--custom--priority-plus-navigation--dropdown--item-spacing);transition:background .2s ease,color .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow .priority-plus-navigation-accordion-arrow{display:inline-block;transition:transform .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow:hover{background:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color);color:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow[aria-expanded=true] .priority-plus-navigation-accordion-arrow{transform:rotate(-90deg)}.is-style-priority-plus-navigation[data-more-hidden=true] .priority-plus-navigation-more{display:none} diff --git a/build/style-priority-plus-navigation.css b/build/style-priority-plus-navigation.css index 3feaf60..4634a59 100644 --- a/build/style-priority-plus-navigation.css +++ b/build/style-priority-plus-navigation.css @@ -1 +1 @@ -.is-style-priority-plus-navigation{--priority-plus-navigation--background:transparent;--priority-plus-navigation--background-hover:transparent;--priority-plus-navigation--color:inherit;--priority-plus-navigation--color-hover:inherit;--priority-plus-navigation--border-color:transparent;--priority-plus-navigation--border-style:solid;--priority-plus-navigation--border-width:0;--priority-plus-navigation--border-radius:0;--priority-plus-navigation--font-family:inherit;--priority-plus-navigation--font-size:inherit;--priority-plus-navigation--font-weight:inherit;--priority-plus-navigation--padding:0;position:relative}.is-style-priority-plus-navigation .priority-plus-navigation-more-button{align-items:center;background:var(--priority-plus-navigation--background);border-color:var(--priority-plus-navigation--border-color);border-radius:var(--priority-plus-navigation--border-radius);border-style:var(--priority-plus-navigation--border-style);border-width:var(--priority-plus-navigation--border-width);color:var(--priority-plus-navigation--color);cursor:pointer;display:flex;font-family:var(--priority-plus-navigation--font-family);font-size:var(--priority-plus-navigation--font-size);font-weight:var(--priority-plus-navigation--font-weight);gap:.1rem;padding:var(--priority-plus-navigation--padding);transition:all .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-more-button:hover{background:var(--priority-plus-navigation--background-hover);color:var(--priority-plus-navigation--color-hover)}.is-style-priority-plus-navigation .priority-plus-navigation-more-button .priority-plus-navigation-icon{align-items:center;display:inline-flex;line-height:1;margin-right:-5px}.is-style-priority-plus-navigation .priority-plus-navigation-more-button .priority-plus-navigation-icon svg{fill:currentColor;height:1.25em;width:1.25em}.is-style-priority-plus-navigation .priority-plus-navigation-more-button[aria-expanded=true] .priority-plus-navigation-icon{transform:rotate(180deg)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown{background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 4px 12px rgba(0,0,0,.15);list-style:none;margin:0;min-width:200px;opacity:0;padding:.5rem 0;position:absolute;right:0;top:calc(100% + .5rem);transform:translateY(-10px);transition:all .2s ease;visibility:hidden;z-index:1000}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown.is-open{opacity:1;transform:translateY(0);visibility:visible}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown li{margin:0;padding:0}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown li a{color:inherit;display:block;padding:.75rem 1rem;text-decoration:none;transition:background .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown li a:hover{background:rgba(0,0,0,.05)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content{background:transparent;display:none;list-style:none;margin:0;padding:0}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content[aria-hidden=true]{display:none!important}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content.is-open{display:block!important}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content{padding-left:1rem}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-wrapper{align-items:center;display:flex;justify-content:space-between;width:100%}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full{align-items:center;background:transparent;border:none;color:inherit;cursor:pointer;display:flex;font-family:inherit;font-size:inherit;justify-content:space-between;padding:.75rem 1rem;text-align:left;width:100%}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full .priority-plus-navigation-accordion-text{flex:1}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full .priority-plus-navigation-accordion-arrow{margin-left:.5rem;transition:transform .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full[aria-expanded=true] .priority-plus-navigation-accordion-arrow{transform:rotate(90deg)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-link{flex:1;padding:.75rem 1rem}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow{background:transparent;border:none;color:inherit;cursor:pointer;flex-shrink:0;font-family:inherit;font-size:inherit;padding:.75rem}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow .priority-plus-navigation-accordion-arrow{display:inline-block;transition:transform .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow[aria-expanded=true] .priority-plus-navigation-accordion-arrow{transform:rotate(90deg)}.is-style-priority-plus-navigation[data-more-hidden=true] .priority-plus-navigation-more{display:none} +:root{--wp--custom--priority-plus-navigation--dropdown--background-color:#fff;--wp--custom--priority-plus-navigation--dropdown--border-color:#ddd;--wp--custom--priority-plus-navigation--dropdown--border-width:1px;--wp--custom--priority-plus-navigation--dropdown--border-radius:4px;--wp--custom--priority-plus-navigation--dropdown--box-shadow:0 4px 12px rgba(0,0,0,.15);--wp--custom--priority-plus-navigation--dropdown--item-spacing:0.75rem 1.25rem;--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color:rgba(0,0,0,.05);--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color:inherit;--wp--custom--priority-plus-navigation--dropdown--multi-level-indent:1.25rem}.is-style-priority-plus-navigation{--priority-plus-navigation--background:transparent;--priority-plus-navigation--background-hover:transparent;--priority-plus-navigation--color:inherit;--priority-plus-navigation--color-hover:inherit;--priority-plus-navigation--border-color:transparent;--priority-plus-navigation--border-style:solid;--priority-plus-navigation--border-width:0;--priority-plus-navigation--border-radius:0;--priority-plus-navigation--font-family:inherit;--priority-plus-navigation--font-size:inherit;--priority-plus-navigation--font-weight:inherit;--priority-plus-navigation--padding:0;position:relative}.is-style-priority-plus-navigation .priority-plus-navigation-more-button{align-items:center;background:var(--priority-plus-navigation--background);border-color:var(--priority-plus-navigation--border-color);border-radius:var(--priority-plus-navigation--border-radius);border-style:var(--priority-plus-navigation--border-style);border-width:var(--priority-plus-navigation--border-width);color:var(--priority-plus-navigation--color);cursor:pointer;display:flex;font-family:var(--priority-plus-navigation--font-family);font-size:var(--priority-plus-navigation--font-size);font-weight:var(--priority-plus-navigation--font-weight);padding:var(--priority-plus-navigation--padding);transition:background .2s ease,color .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-more-button:hover{background:var(--priority-plus-navigation--background-hover);color:var(--priority-plus-navigation--color-hover)}.is-style-priority-plus-navigation .priority-plus-navigation-more-button .priority-plus-navigation-icon{align-items:center;display:inline-flex;line-height:1}.is-style-priority-plus-navigation .priority-plus-navigation-more-button .priority-plus-navigation-icon svg{fill:currentcolor;height:1.25em;width:1.25em}.is-style-priority-plus-navigation .priority-plus-navigation-more-button[aria-expanded=true] .priority-plus-navigation-icon{transform:rotate(180deg)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown{background:var(--wp--custom--priority-plus-navigation--dropdown--background-color);border-color:var(--wp--custom--priority-plus-navigation--dropdown--border-color);border-radius:var(--wp--custom--priority-plus-navigation--dropdown--border-radius);border-style:solid;border-width:var(--wp--custom--priority-plus-navigation--dropdown--border-width);box-shadow:var(--wp--custom--priority-plus-navigation--dropdown--box-shadow);list-style:none;margin:0;min-width:200px;opacity:0;overflow:hidden;padding:0;position:absolute;right:0;top:100%;transform:translateY(-10px);transition:opacity .2s ease,visibility .2s ease,transform .2s ease;visibility:hidden;z-index:1000}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown.is-open{opacity:1;transform:translateY(0);visibility:visible}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown li{margin:0;padding:0}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown li a{color:inherit;display:block;padding:var(--wp--custom--priority-plus-navigation--dropdown--item-spacing);text-decoration:none;transition:background .2s ease,color .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown li a:hover{background:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color);color:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content{background:transparent;display:none;list-style:none;margin:0;padding:0}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content[aria-hidden=true]{display:none!important}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content.is-open{display:block!important}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-toggle-full,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-wrapper>a,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content>li>a{padding-left:calc(1rem + var(--wp--custom--priority-plus-navigation--dropdown--multi-level-indent))}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-toggle-full,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-wrapper>a,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>a{padding-left:calc(1rem + var(--wp--custom--priority-plus-navigation--dropdown--multi-level-indent)*2)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-toggle-full,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-wrapper>a,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>a{padding-left:calc(1rem + var(--wp--custom--priority-plus-navigation--dropdown--multi-level-indent)*3)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-toggle-full,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>.priority-plus-navigation-accordion-wrapper>a,.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content .priority-plus-navigation-accordion-content>li>a{padding-left:calc(1rem + var(--wp--custom--priority-plus-navigation--dropdown--multi-level-indent)*4)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-wrapper{align-items:center;display:flex;justify-content:space-between;width:100%}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full{align-items:center;background:transparent;border:none;color:inherit;cursor:pointer;display:flex;font-family:inherit;font-size:inherit;justify-content:space-between;padding:var(--wp--custom--priority-plus-navigation--dropdown--item-spacing);text-align:left;transition:background .2s ease,color .2s ease;width:100%}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full .priority-plus-navigation-accordion-text{flex:1}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full .priority-plus-navigation-accordion-arrow{margin-left:.5rem;transition:transform .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full:hover{background:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color);color:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-full[aria-expanded=true] .priority-plus-navigation-accordion-arrow{transform:rotate(90deg)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-link{flex:1;padding:var(--wp--custom--priority-plus-navigation--dropdown--item-spacing);transition:background .2s ease,color .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-link:hover{background:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color);color:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow{background:transparent;border:none;color:inherit;cursor:pointer;flex-shrink:0;font-family:inherit;font-size:inherit;padding:var(--wp--custom--priority-plus-navigation--dropdown--item-spacing);transition:background .2s ease,color .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow .priority-plus-navigation-accordion-arrow{display:inline-block;transition:transform .2s ease}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow:hover{background:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color);color:var(--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color)}.is-style-priority-plus-navigation .priority-plus-navigation-dropdown .priority-plus-navigation-accordion-toggle-arrow[aria-expanded=true] .priority-plus-navigation-accordion-arrow{transform:rotate(90deg)}.is-style-priority-plus-navigation[data-more-hidden=true] .priority-plus-navigation-more{display:none} diff --git a/docs/README.md b/docs/README.md index 9439ca6..4a5dafc 100644 --- a/docs/README.md +++ b/docs/README.md @@ -63,6 +63,14 @@ See the main [README.md](../README.md) for: - How to use the block - Configuration options +### For Theme Builders + +See [styling.md](styling.md) for: +- Complete theme.json styling guide +- Available CSS custom properties +- Common customization examples +- Troubleshooting styling issues + ### For Developers See [how-it-works.md](how-it-works.md) for: diff --git a/docs/styling.md b/docs/styling.md new file mode 100644 index 0000000..2ca3004 --- /dev/null +++ b/docs/styling.md @@ -0,0 +1,276 @@ +# Styling Priority Plus Navigation + +This guide explains how to customize the appearance of the Priority Plus Navigation dropdown menu using theme.json. + +## Overview + +The Priority Plus Navigation plugin provides sensible defaults for dropdown styling, which can be easily customized through your theme's `theme.json` file. The plugin uses CSS custom properties that can be overridden without writing any custom CSS. + +## Quick Start + +Add the following to your theme's `theme.json` file: + +```json +{ + "version": 3, + "settings": { + "custom": { + "priorityPlusNavigation": { + "dropdown": { + "backgroundColor": "#f0f0f0", + "borderColor": "#999999", + "borderWidth": "2px", + "borderRadius": "8px", + "boxShadow": "0 8px 16px rgba(0, 0, 0, 0.2)", + "itemSpacing": "1rem 1.5rem", + "itemHoverBackgroundColor": "rgba(0, 0, 0, 0.08)", + "itemHoverTextColor": "#007cba", + "multiLevelIndent": "3.5rem" + } + } + }, + } +} +``` + +Only specify the properties you want to customize. All properties are optional. + +## Available Properties + +### Dropdown Container + +| Property | Description | Default Value | +|----------|-------------|---------------| +| `backgroundColor` | Background color of the dropdown menu | `#ffffff` | +| `borderColor` | Border color of the dropdown menu | `#dddddd` | +| `borderWidth` | Width of the dropdown border | `1px` | +| `borderRadius` | Corner radius of the dropdown | `4px` | +| `boxShadow` | Shadow effect for the dropdown | `0 4px 12px rgba(0, 0, 0, 0.15)` | + +### Dropdown Items + +| Property | Description | Default Value | +|----------|-------------|---------------| +| `itemSpacing` | Padding around each dropdown item | `0.75rem 1rem` | +| `itemHoverBackgroundColor` | Background color when hovering over an item | `rgba(0, 0, 0, 0.05)` | +| `itemHoverTextColor` | Text color when hovering over an item | `inherit` | + +### Multi-level Navigation + +| Property | Description | Default Value | +|----------|-------------|---------------| +| `multiLevelIndent` | Indentation for nested submenu levels | `1rem` | + +## Complete Example + +Here's a complete example showing all available properties: + +```json +{ + "version": 3, + "settings": { + "custom": { + "priorityPlusNavigation": { + "dropdown": { + "backgroundColor": "#f8f9fa", + "borderColor": "#dee2e6", + "borderWidth": "2px", + "borderRadius": "8px", + "boxShadow": "0 8px 16px rgba(0, 0, 0, 0.2)", + "itemSpacing": "1rem 1.5rem", + "itemHoverBackgroundColor": "rgba(0, 0, 0, 0.08)", + "itemHoverTextColor": "#0066cc", + "multiLevelIndent": "1.5rem" + } + } + } + } +} +``` + +## How It Works + +### CSS Custom Properties + +The plugin defines CSS custom properties on the `:root` selector with default values. WordPress generates CSS custom properties from your theme.json on the `body` selector, which overrides the plugin defaults through CSS cascade. + +**Plugin defaults (`:root`):** +```css +:root { + --wp--custom--priority-plus-navigation--dropdown--background-color: #ffffff; + --wp--custom--priority-plus-navigation--dropdown--border-color: #dddddd; + /* ... etc */ +} +``` + +**Theme.json generates (`body`):** +```css +body { + --wp--custom--priority-plus-navigation--dropdown--background-color: #f0f0f0; + --wp--custom--priority-plus-navigation--dropdown--border-color: #999999; + /* ... etc */ +} +``` + +Since both selectors have the same specificity and WordPress theme.json CSS loads after the plugin CSS, theme values override plugin defaults. + +### Override Hierarchy + +1. **Plugin Defaults** (`:root` selector in plugin CSS) +2. **Theme.json** (`body` selector from WordPress) +3. **Custom CSS** (your theme's custom stylesheet - highest priority) + +## Common Customizations + +### Minimal Style + +Remove borders and shadows for a minimal look: + +```json +{ + "settings": { + "custom": { + "priorityPlusNavigation": { + "dropdown": { + "borderWidth": "0", + "boxShadow": "none" + } + } + } + } +} +``` + +### Card Style + +Add more spacing and shadow for a card-like appearance: + +```json +{ + "settings": { + "custom": { + "priorityPlusNavigation": { + "dropdown": { + "borderRadius": "12px", + "boxShadow": "0 10px 25px rgba(0, 0, 0, 0.1)", + "itemSpacing": "1.25rem 1.5rem" + } + } + } + } +} +``` + +### High Contrast + +Increase contrast for better accessibility: + +```json +{ + "settings": { + "custom": { + "priorityPlusNavigation": { + "dropdown": { + "backgroundColor": "#000000", + "borderColor": "#ffffff", + "borderWidth": "2px", + "itemHoverBackgroundColor": "#ffffff", + "itemHoverTextColor": "#000000" + } + } + } + } +} +``` + +## Using WordPress Preset Values + +You can reference WordPress color and spacing presets in theme.json: + +```json +{ + "settings": { + "custom": { + "priorityPlusNavigation": { + "dropdown": { + "backgroundColor": "var(--wp--preset--color--base)", + "borderColor": "var(--wp--preset--color--contrast)", + "itemSpacing": "var(--wp--preset--spacing--30)" + } + } + } + } +} +``` + +## Advanced: Custom CSS + +If you need even more control, you can write custom CSS targeting the dropdown elements: + +```css +/* In your theme's style.css or custom CSS */ +.is-style-priority-plus-navigation .priority-plus-navigation-dropdown { + /* Your custom styles here */ + backdrop-filter: blur(10px); + margin-top: 0.5rem; +} + +.is-style-priority-plus-navigation .priority-plus-navigation-dropdown li a { + /* Custom item styles */ + font-weight: 500; + letter-spacing: 0.025em; +} +``` + +**Note:** Custom CSS has the highest priority and will override both plugin defaults and theme.json values. + +## More Button Styling + +The "More" button is styled separately through **block attributes** in the WordPress editor, not theme.json. You can customize it using the block inspector controls: + +- Button Label +- Button Icon +- Text Color & Hover Color +- Background Color & Hover Color +- Padding + +See the main [README.md](../README.md) for details on using the block controls. + +## Troubleshooting + +### My theme.json changes aren't applying + +1. **Clear WordPress cache** - Theme.json is cached by WordPress +2. **Check file location** - Ensure theme.json is in your theme's root directory +3. **Validate JSON** - Use a JSON validator to check for syntax errors +4. **Check property names** - Property names are case-sensitive (use camelCase) +5. **Enable debugging** - Set `WP_DEBUG` or `SCRIPT_DEBUG` to `true` in wp-config.php to disable caching + +### Default values showing instead of my customization + +WordPress generates theme.json CSS with the `body` selector. Make sure: +- Your theme.json is valid JSON +- Property names match exactly (e.g., `backgroundColor`, not `background-color`) +- Theme.json version is set to `3` + +### Need to reset to defaults + +Simply remove the `priorityPlusNavigation` section from your theme.json, or delete specific properties you want to reset. + +## Browser Compatibility + +CSS custom properties (CSS variables) are supported in all modern browsers: +- Chrome 49+ +- Firefox 31+ +- Safari 9.1+ +- Edge 15+ + +## Performance + +CSS custom properties have negligible performance impact. They are natively supported by browsers and do not require any JavaScript processing. + +## Resources + +- [WordPress theme.json Documentation](https://developer.wordpress.org/block-editor/how-to-guides/themes/global-settings-and-styles/) +- [CSS Custom Properties (MDN)](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties) +- [WordPress Custom Settings in theme.json](https://developer.wordpress.org/news/2023/08/adding-and-using-custom-settings-in-theme-json/) diff --git a/readme.txt b/readme.txt index 3b9f6bb..d1829b3 100755 --- a/readme.txt +++ b/readme.txt @@ -18,6 +18,7 @@ Key Features: * **Automatic Overflow Detection**: Continuously monitors available space and adjusts navigation visibility * **Responsive by Design**: Adapts to any screen size or container width +* **Customizable Styling**: Full theme.json support for dropdown menu styling with CSS custom properties * **Customizable Labels**: Change the "More" button text and icon * **Seamless Integration**: Works beautifully with WordPress themes * **Performance Optimized**: Uses ResizeObserver for efficient layout calculations @@ -58,6 +59,34 @@ Priority Plus Navigation intelligently integrates with WordPress core navigation Yes, the block is built with accessibility in mind, supporting keyboard navigation and providing proper ARIA labels for screen readers. += Can I style the dropdown menu? = + +Absolutely! The dropdown menu can be fully customized through your theme's `theme.json` file. You can control: + +* Background color and border styling +* Item spacing and hover effects +* Multi-level navigation indentation +* Box shadow and border radius + +Example configuration in your theme's `theme.json`: + +`{ + "version": 3, + "settings": { + "custom": { + "priorityPlusNavigation": { + "dropdown": { + "backgroundColor": "#f0f0f0", + "borderColor": "#999999", + "itemHoverBackgroundColor": "rgba(0, 0, 0, 0.08)" + } + } + } + } +}` + +The plugin provides sensible defaults, and you only need to specify the properties you want to customize. For complete styling documentation, see the [GitHub repository](https://github.com/troychaplin/priority-plus-navigation/blob/main/docs/styling.md). + == Screenshots == 1. Priority Nav showing all items on wide screens diff --git a/src/styles/_variables.scss b/src/styles/_variables.scss index 877a6b0..e6eaf36 100755 --- a/src/styles/_variables.scss +++ b/src/styles/_variables.scss @@ -1,4 +1,22 @@ -// CSS custom properties for Priority Nav +// CSS custom properties for Priority Plus Navigation +// Set on :root so WordPress theme.json (which uses body selector) can override them +// Dropdown menu styles (can be overridden via theme.json) +// WordPress generates: body { --wp--custom--priority-plus-navigation--dropdown--* } +// Since body has higher specificity than :root, theme.json values will override these defaults + +:root { + --wp--custom--priority-plus-navigation--dropdown--background-color: #fff; + --wp--custom--priority-plus-navigation--dropdown--border-color: #ddd; + --wp--custom--priority-plus-navigation--dropdown--border-width: 1px; + --wp--custom--priority-plus-navigation--dropdown--border-radius: 4px; + --wp--custom--priority-plus-navigation--dropdown--box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + --wp--custom--priority-plus-navigation--dropdown--item-spacing: 0.75rem 1.25rem; + --wp--custom--priority-plus-navigation--dropdown--item-hover-background-color: rgba(0, 0, 0, 0.05); + --wp--custom--priority-plus-navigation--dropdown--item-hover-text-color: inherit; + --wp--custom--priority-plus-navigation--dropdown--multi-level-indent: 1.25rem; +} + +// More button styles (controlled via block attributes, not theme.json) .is-style-priority-plus-navigation { --priority-plus-navigation--background: transparent; --priority-plus-navigation--background-hover: transparent; @@ -13,9 +31,3 @@ --priority-plus-navigation--font-weight: inherit; --priority-plus-navigation--padding: 0; } - -// These can be easily overridden in theme stylesheets by targeting .is-style-priority-plus-navigation, for example: -// .is-style-priority-plus-navigation { -// --priority-plus-navigation--background: #ff0000; -// --priority-plus-navigation--color: #ffffff; -// } diff --git a/src/styles/style.scss b/src/styles/style.scss index cd439e5..0275ccd 100755 --- a/src/styles/style.scss +++ b/src/styles/style.scss @@ -5,7 +5,6 @@ .priority-plus-navigation-more-button { display: flex; - gap: 0.1rem; align-items: center; font-family: var(--priority-plus-navigation--font-family); font-size: var(--priority-plus-navigation--font-size); @@ -17,7 +16,7 @@ border-style: var(--priority-plus-navigation--border-style); border-width: var(--priority-plus-navigation--border-width); border-radius: var(--priority-plus-navigation--border-radius); - transition: all 0.2s ease; + transition: background 0.2s ease, color 0.2s ease; cursor: pointer; &:hover { @@ -29,10 +28,9 @@ display: inline-flex; align-items: center; line-height: 1; - margin-right: -5px; svg { - fill: currentColor; + fill: currentcolor; width: 1.25em; height: 1.25em; } @@ -47,21 +45,24 @@ .priority-plus-navigation-dropdown { position: absolute; - top: calc(100% + 0.5rem); + overflow: hidden; + top: 100%; right: 0; min-width: 200px; - background: #fff; - border: 1px solid #ddd; - border-radius: 4px; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + background: var(--wp--custom--priority-plus-navigation--dropdown--background-color); + border-width: var(--wp--custom--priority-plus-navigation--dropdown--border-width); + border-style: solid; + border-color: var(--wp--custom--priority-plus-navigation--dropdown--border-color); + border-radius: var(--wp--custom--priority-plus-navigation--dropdown--border-radius); + box-shadow: var(--wp--custom--priority-plus-navigation--dropdown--box-shadow); list-style: none; margin: 0; - padding: 0.5rem 0; + padding: 0; z-index: 1000; opacity: 0; visibility: hidden; transform: translateY(-10px); - transition: all 0.2s ease; + transition: opacity 0.2s ease, visibility 0.2s ease, transform 0.2s ease; &.is-open { opacity: 1; @@ -75,13 +76,14 @@ a { display: block; - padding: 0.75rem 1rem; + padding: var(--wp--custom--priority-plus-navigation--dropdown--item-spacing); color: inherit; text-decoration: none; - transition: background 0.2s ease; + transition: background 0.2s ease, color 0.2s ease; &:hover { - background: rgba(0, 0, 0, 0.05); + background: var(--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color); + color: var(--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color); } } } @@ -102,9 +104,40 @@ display: block !important; } - // Nested level indentation + // Multi-level indentation - each nested level adds indent + // Applied to links and accordion toggle buttons + // First level - add 1x indent to the left padding + > li > a, + > li > .priority-plus-navigation-accordion-wrapper > a, + > li > .priority-plus-navigation-accordion-toggle-full { + padding-left: calc(1rem + var(--wp--custom--priority-plus-navigation--dropdown--multi-level-indent)); + } + + // Second level - add 2x indent to the left padding .priority-plus-navigation-accordion-content { - padding-left: 1rem; + > li > a, + > li > .priority-plus-navigation-accordion-wrapper > a, + > li > .priority-plus-navigation-accordion-toggle-full { + padding-left: calc(1rem + (var(--wp--custom--priority-plus-navigation--dropdown--multi-level-indent) * 2)); + } + + // Third level - add 3x indent to the left padding + .priority-plus-navigation-accordion-content { + > li > a, + > li > .priority-plus-navigation-accordion-wrapper > a, + > li > .priority-plus-navigation-accordion-toggle-full { + padding-left: calc(1rem + (var(--wp--custom--priority-plus-navigation--dropdown--multi-level-indent) * 3)); + } + + // Fourth level - add 4x indent to the left padding + .priority-plus-navigation-accordion-content { + > li > a, + > li > .priority-plus-navigation-accordion-wrapper > a, + > li > .priority-plus-navigation-accordion-toggle-full { + padding-left: calc(1rem + (var(--wp--custom--priority-plus-navigation--dropdown--multi-level-indent) * 4)); + } + } + } } } @@ -122,7 +155,7 @@ align-items: center; justify-content: space-between; width: 100%; - padding: 0.75rem 1rem; + padding: var(--wp--custom--priority-plus-navigation--dropdown--item-spacing); background: transparent; border: none; cursor: pointer; @@ -130,6 +163,7 @@ font-family: inherit; color: inherit; text-align: left; + transition: background 0.2s ease, color 0.2s ease; .priority-plus-navigation-accordion-text { flex: 1; @@ -140,6 +174,11 @@ transition: transform 0.2s ease; } + &:hover { + background: var(--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color); + color: var(--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color); + } + &[aria-expanded="true"] { .priority-plus-navigation-accordion-arrow { @@ -151,11 +190,17 @@ // Arrow mode: link stays functional, separate arrow button .priority-plus-navigation-accordion-link { flex: 1; - padding: 0.75rem 1rem; + padding: var(--wp--custom--priority-plus-navigation--dropdown--item-spacing); + transition: background 0.2s ease, color 0.2s ease; + + &:hover { + background: var(--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color); + color: var(--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color); + } } .priority-plus-navigation-accordion-toggle-arrow { - padding: 0.75rem; + padding: var(--wp--custom--priority-plus-navigation--dropdown--item-spacing); background: transparent; border: none; cursor: pointer; @@ -163,12 +208,18 @@ font-family: inherit; color: inherit; flex-shrink: 0; + transition: background 0.2s ease, color 0.2s ease; .priority-plus-navigation-accordion-arrow { transition: transform 0.2s ease; display: inline-block; } + &:hover { + background: var(--wp--custom--priority-plus-navigation--dropdown--item-hover-background-color); + color: var(--wp--custom--priority-plus-navigation--dropdown--item-hover-text-color); + } + &[aria-expanded="true"] { .priority-plus-navigation-accordion-arrow { diff --git a/test-theme.json b/test-theme.json new file mode 100644 index 0000000..9588a23 --- /dev/null +++ b/test-theme.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://schemas.wp.org/trunk/theme.json", + "version": 3, + "settings": { + "custom": { + "priorityPlusNavigation": { + "dropdown": { + "backgroundColor": "#f0f0f0", + "borderColor": "#999999", + "borderWidth": "2px", + "borderRadius": "8px", + "boxShadow": "0 8px 16px rgba(0, 0, 0, 0.2)", + "itemSpacing": "1rem 1.5rem", + "itemHoverBackgroundColor": "rgba(0, 0, 0, 0.08)", + "itemHoverTextColor": "#007cba", + "multiLevelIndent": "1.5rem" + } + } + } + } +}