I wanted to created a hoverable, drop-down menu for a html page. I created what I thought was correct HTML/CSS but the hover items appear on the far left side of the banner div. I've created a JSFIddle of the 'offending'code here: http://jsfiddle.net/4CCdv/2/
Html:
<div id="Header">
<p></p>
<ul class="Menu">
<li class="Menu">Home</li>
<li class="Menu" >Item2
<ul class="Menu">
<li class="Menu">Sub A</li>
<li class="Menu">Sub B</li>
<li class="Menu">Sub C</li>
</ul>
</li>
<li class="Menu" >Item 3
<ul class="Menu">
<li>Sub A</li>
<li>Sub B</li>
<li>Sub C</li>
</ul>
</li>
<li class="Menu" >Item 4
<ul class="Menu">
<li>Sub A</li>
</ul>
</li>
<li class="Menu" >Item4</li>
</ul>
</div>
CSS:
div {
border-radius: 5px;
}
#Header {
z-index: 1;
position: fixed;
width: 85.5%;
margin-top: 20px;
height: 95px;
color: white;
background-color: #0066ff;
margin-bottom: 15px;
text-align:center;
}
.Menu {
background-color: #2fa4e7;
background: linear-gradient(top, #2fa4e7 0%, #eee9f0 100%);
border-color: #1995dc;
border-radius: 8px;
border-style:ridge;
border-width:1px;
display: inline-block;
font-size: 1.2em;
font-family: Tahoma, Geneva, sans-serif;
list-style-type: none;
padding: 5px;
margin: 0.2em;
border-bottom: 2px solid #0024d9;
}
.Menu ul {
display: none;
}
.Menu li:hover > ul {
display: block;
font-size: 0.8em;
font-family: Tahoma, Geneva, sans-serif;
position: absolute;
top: -1px;
left: 100%;
}
I've been hammering at this for a while, but can't figure out why it would matter that there is a parent div or why the submenus try and appear outside of it. Any ideas?
Check out this demo. You have to give parent li position:relative and child ul position:absolute
CSS
ul.Menu li {
position: relative;
}
ul.Menu li:hover > ul {
display: block;
font-size: 0.8em;
font-family: Tahoma, Geneva, sans-serif;
position: absolute;
top: 35px;
left: 0;
}
You have to add relative position to the parent element of your hover. this way you can position child element according to parent not to whole page.
here it is:
.Menu li {
position:relative;
}
Now you can play with left, right, top, bottom to place your menu wherever you want
Related
I am having trouble converting my default vertical drop-down menu to a horizontal menu.
This is the website: www.ritasaraci.com/homepage
I want my links to appear horizontally rather than vertically.
Thanks,
Change Css property of display to display:flex
Css Class edited
.highlighted .submenu {
/other css/
display:flex;
}
if you are using wordpress open customizer open Css editor and paste there for quick edits
use !important to make it stick
keep it consistent and use CSS to change states
.menu:hover .submenu {
css
}
HTML
<ul class="menu">
<li>
Item 1
<ul class="sub-menu">
<li>Sub-item 1-1</li>
<li>Sub-item 1-2</li>
<li>Sub-item 1-3</li>
<li>Sub-item 1-4</li>
<li>Sub-item 1-5</li>
<li>Sub-item 1-6</li>
</ul>
</li>
<li>
Item 2
</li>
<li>
Item 3
<ul class="sub-menu">
<li>Sub-item 3-1</li>
<li>Sub-item 3-2</li>
<li>Sub-item 3-3</li>
<li>Sub-item 3-4</li>
</ul>
</li>
<li>
Item 4
</li>
</ul>
CSS
ul.menu{
width: 940px;
height: 40px;
line-height: 40px;
position: relative;
text-align: center;
margin: auto;
padding: auto;
background-color:#dedede;
}
li{
float: left;
width: auto;
}
ul.menu li a {
display: block;
width: auto;
text-decoration: none;
}
ul.sub-menu {
opacity: 0;
visibility: hidden;
display: block;
position: absolute;
left: 0;
height: 40px;
line-height: 40px;
}
ol, ul {
list-style: none;
}
ul.menu a, ul.sub-menu a {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #0E0500;
padding: 0 10px;
}
ul.menu li:hover ul {
width: 940px;
background: rgb(177, 200, 218);
visibility: visible;
opacity: 1;
transition-property: opacity;
}
ul.menu li:hover {
background-color: rgb(177, 200, 218);
transition-duration: 0.3s;
}
I have a nav that when a parent text wraps, it drops the UL down so it does not top align with adjacent ULs.
In the fiddle below, I would like Find a Park to be top aligned with the adjacent Golf Preserve and Recreation Center LIs , where currently it is not top aligned with the adjacent LIs.
https://jsfiddle.net/vge8vuxd/
<div class="row TopNavMain">
<ul class="nav mobile-nav">
<li class="active level0">
<a class="has-sub-menu active" href="http://www.someurl.com/PlayRecreation"><span>Play & Recreation</span><span class="border"></span></a><i class="fa fa-chevron-down"></i>
<ul class="sub-menu">
<li class="level1">
<a class="has-sub-menu " href="http://www.someurl.com/PlayRecreation/GolfHere"><span>Golf Here</span><span class="border"></span></a><i class="fa fa-chevron-down"></i>
<ul class="sub-menu">
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/GolfHere/GolfPreserve"><span> Golf Preserve</span><span class="border"></span></a></li>
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/GolfHere/GolfCourse"><span> Golf Course</span><span class="border"></span></a></li>
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/GolfHere/BookTeeTimes"><span>Book Tee Times</span><span class="border"></span></a></li>
</ul>
</li>
<li class="level1">
<a class="has-sub-menu " href="http://www.someurl.com/PlayRecreation/Popcorn,TrailsOpenSpace"><span>Popcorn, Trails & Open Space</span><span class="border"></span></a><i class="fa fa-chevron-down"></i>
<ul class="sub-menu">
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/Play,TrailsOpenSpace/FindaPark"><span>Find a Park</span><span class="border"></span></a></li>
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/Play,TrailsOpenSpace/OpenSpaceTrails"><span>Open Space & Trails</span><span class="border"></span></a></li>
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/Play,TrailsOpenSpace/Forestry"><span>Forestry</span><span class="border"></span></a></li>
</ul>
</li>
<li class="level1">
<a class="has-sub-menu " href="http://www.someurl.com/PlayRecreation/RecreationCenters"><span>Recreation Centers</span><span class="border"></span></a><i class="fa fa-chevron-down"></i>
<ul class="sub-menu">
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/RecreationCenters/RecreationCenter"><span> Recreation Center</span><span class="border"></span></a></li>
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/RecreationCenters/FitnessCenter"><span> Fitness Center</span><span class="border"></span></a></li>
<li class="level2"><a class="" href="http://www.someurl.com/PlayRecreation/RecreationCenters/AnotherFitnessCenter"><span> Another Fitness Center</span><span class="border"></span></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
.TopNavMain ul,
.TopNavMain ul li {
display: block;
margin: 0px;
padding: 0px;
list-style-type: none;
position: unset;
}
.TopNavMain ul.nav li a {
display: block;
background: none;
}
.TopNavMain ul.nav li a span {
display: block;
}
.TopNavMain ul.nav > li > a {
position: static;
padding: 17px 20px;
color: #555759;
font-size: 16px;
line-height: 100%;
letter-spacing: 1px;
}
.TopNavMain ul.nav {
display: table;
width: 95%;
float: right;
}
.TopNavMain ul.nav > li {
display: table-cell;
}
.TopNavMain ul.nav > li > a {
text-align: center;
position: relative;
}
.TopNavMain ul.nav li .sub-menu {
display: table;
position: relative;
width: auto !important;
text-align: left;
}
.TopNavMain ul.nav li .sub-menu li {
display: table-cell;
padding: 20px 10px 35px;
vertical-align: top;
}
.TopNavMain ul.nav li .sub-menu a {
display: inline-block;
margin: 10px 0 20px;
padding: 5px 0px;
color: #555759;
font-size: 16px;
line-height: 100%;
font-weight: bold;
}
.TopNavMain ul.nav li .sub-menu ul li {
width: 100% !important;
display: block;
float: left;
text-align: left;
padding: 0;
margin: 10px 0 0;
}
.TopNavMain ul.nav li .sub-menu ul a {
padding: 5px 0;
font-size: 13px;
color: #797b7c;
font-weight: normal;
}
.TopNavMain ul.nav li .sub-menu li ul li a {
margin: 0;
}
.TopNavMain ul.nav li .sub-menu ul li ul {
display: none;
}
Thanks for any assistance.
You need to put a fixed height on
.TopNavMain ul.nav li .sub-menu a {
....
height:20px;
}
Wrestling with mutli-drop menu. (97% working) Select United States 1 menu, then pick Nevada menu item. There's a gray bar at the bottom. Same for US -> California. Gray bar below Los Angeles. I've played with margins and padding for a while. The :hover I was hoping would highlight the entire li portion. "Seems" to for all but most bottom menu item. (BTW: US -> California -> San Francisco -> SOMA. You'll see top left corner doesn't quite touch. That's maybe related.)
Any tips welcome. Thanks. Milton.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
#nav_wrapper {
margin-top: 20px;
background: #b3c2bf; /* BG color across screen */
}
#nav_wrapper ul
{
list-style:none;
margin: 0;
padding: 0;
background: #b3c2bf; /* BG color across screen */
}
#nav_wrapper ul li
{
display: inline-block;
position:relative;
margin: 0;
padding: 0;
min-width: 150px;
max-width: 150px;
text-align: left;
}
#nav_wrapper ul li a
{
display: block;
/* white here gives the text white color */
color: white;
font-family: Arial, sans-serif;
font-weight: 200;
font-size: 16px;
text-decoration:none;
padding: 0;
margin 0;
}
#nav_wrapper ul ul
{
display:none;
position:absolute;
top: 100%; /* 100% of height of the li element */
padding: 0;
margin 0;
}
#nav_wrapper ul ul a
{
line-height: 120%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#nav_wrapper ul ul ul {
top: 0;
left:100%;
}
p.menutextpadder { padding-left: 12px; padding-top: 4px; padding-bottom: 4px; }
#nav_wrapper ul li:hover > ul { display:block; }
#nav_wrapper ul li:hover { background-color: Blue; color: white; }
</style>
<body>
<nav id="nav_wrapper">
<ul class="topmenu">
<li><p class="menutextpadder">United States 1
<ul>
<li class="dir"><p class="menutextpadder">Arizona</p></li>
<li class="dir"><p class="menutextpadder">California
<ul>
<li><p class="menutextpadder">San Francisco
<ul>
<li><p class="menutextpadder">Pacific Heights</p></li>
<li><p class="menutextpadder">SOMA
<ul>
<li class="dir"><p class="menutextpadder">Spear Street</p></li>
<li class="dir"><p class="menutextpadder">Moscone Center</li>
</ul>
</li>
</ul>
</li>
<li><p class="menutextpadder">Los Angeles</p></li>
</ul>
<li class="dir"><p class="menutextpadder">Nevada</p></li>
</ul>
</li>
</ul>
</nav>
</body>
</html>
add the css rule below
ul{
font-size: 0;
}
Snippet below
#nav_wrapper {
margin-top: 20px;
background: #b3c2bf;
/* BG color across screen */
}
#nav_wrapper ul {
list-style: none;
margin: 0;
padding: 0;
background: #b3c2bf;
/* BG color across screen */
}
#nav_wrapper ul li {
display: inline-block;
position: relative;
margin: 0;
padding: 0;
min-width: 150px;
max-width: 150px;
text-align: left;
}
#nav_wrapper ul li a {
display: block;
/* white here gives the text white color */
color: white;
font-family: Arial, sans-serif;
font-weight: 200;
font-size: 16px;
text-decoration: none;
padding: 0;
margin 0;
}
#nav_wrapper ul ul {
display: none;
position: absolute;
top: 100%;
/* 100% of height of the li element */
padding: 0;
margin 0;
}
#nav_wrapper ul ul a {
line-height: 120%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#nav_wrapper ul ul ul {
top: 0;
left: 100%;
}
p.menutextpadder {
padding-left: 12px;
padding-top: 4px;
padding-bottom: 4px;
}
#nav_wrapper ul li:hover > ul {
display: block;
}
#nav_wrapper ul li:hover {
background-color: Blue;
color: white;
}
#nav_wrapper .menutextpadder {} ul {
font-size: 0;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<body>
<nav id="nav_wrapper">
<ul class="topmenu">
<li>
<a href="#">
<p class="menutextpadder">United States 1</a>
<ul>
<li class="dir">
<a href="#">
<p class="menutextpadder">Arizona</p>
</a>
</li>
<li class="dir">
<a href="#">
<p class="menutextpadder">California</p>
</a>
<ul>
<li>
<a href="#">
<p class="menutextpadder">San Francisco</a>
<ul>
<li>
<a href="#">
<p class="menutextpadder">Pacific Heights</p>
</a>
</li>
<li>
<a href="#">
<p class="menutextpadder">SOMA</a>
<ul>
<li class="dir">
<a href="#">
<p class="menutextpadder">Spear Street</p>
</a>
</li>
<li class="dir">
<a href="#">
<p class="menutextpadder">Moscone Center</a>
</li>
</ul>
</li>
</ul>
</li>
<li>
<a href="#">
<p class="menutextpadder">Los Angeles</p>
</a>
</li>
</ul>
<li class="dir">
<a href="#">
<p class="menutextpadder">Nevada</p>
</a>
</li>
</ul>
</li>
</ul>
</nav>
</body>
</html>
I want to create a three level menu with CSS but i dont know how to do this:
i have this HTML code with 3 levels :
<div class="menu-block-wrapper menu-block-1 menu-name-main-menu parent-mlid-0 menu-level-1">
<ul class="menu">
<li class="first leaf active menu-mlid-1264">Accueil</li>
<li class="expanded menu-mlid-1604">Diagnostic RH
<ul class="menu">
<li class="first expanded menu-mlid-1281">Gestion Administrative
<ul class="menu">
<li class="first leaf menu-mlid-958">Remplir le questionnaire</li>
<li class="last expanded menu-mlid-1282">Gérer les rapports
<ul class="menu" style="margin-left: 244px;">
<li class="first last leaf menu-mlid-1287">Saisie des coefficients</li>
</ul>
</li>
</ul>
</li>
<li class="expanded menu-mlid-1283">Gestion de la paie<ul class="menu"><li class="first leaf menu-mlid-1285">Remplir le questionnaire</li>
<li class="last leaf menu-mlid-1291">Gérer les rapports</li>
</ul>
</li>
<li class="last expanded menu-mlid-1284">Gestion de la rémunération
<ul class="menu"><li class="first leaf menu-mlid-1286">Remplir le questionnaire</li>
<li class="last expanded menu-mlid-1290">Gérer les rapports
<ul class="menu">
<li class="first last leaf menu-mlid-1385">Réponses du panel</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="leaf menu-mlid-1265">Benchmark</li>
<li class="leaf menu-mlid-1266">Data-RH</li>
<li class="last leaf menu-mlid-1267">Outils et Méthodes</li>
</ul>
</div>
The result when i hover the first element all others are open like image :
In style.css i have this code :
nav {
position: fixed; left: 0; width: 100%; height: 60px; background: url(../rgba.php?r=0&g=0&b=0&a=35) repeat; background: rgba(0,0,0,0.35); z-index: 999;
}
nav * {
z-index: 999;
}
nav .wrapper {
padding: 13px 0 0 0;
}
nav .menu {
float: right; margin-top: -1px;
}
nav li {
float: left;
}
nav li a {
padding: 7px 10px 6px; display: block; background: url(../rgba.php?r=0&g=0&b=0&a=30) repeat; background: rgba(0,0,0,0.3); margin-left: 6px; font-size: 12px;
}
nav li a.active, nav li a:hover {
background: url(../rgba.php?r=0&g=0&b=0&a=40) repeat; background: rgba(0,0,0,0.4); color: #fff;
}
#nav-toggle {
float: right; font-size: 24px; padding-top: 4px;
}
nav ul ul {
display: none; padding-top: 11px;
}
nav li ul li {
display: block; float: none;
}
nav li:hover ul {
display:block;
}
nav li ul li:hover ul{
display:none;
}
nav ul ul {
list-style: none;
}
nav li ul {
position: absolute;
}
nav li:hover ul li ul{
margin-left: 222px;
width: 250px;
}
nav li ul li:hover ul{
margin-left: 222px;
width: 250px;
}
Please help me how to solve it!
Faced a small problem in firefox: http://jsfiddle.net/3jmeS/, when clicking on the link active style fires on all element, but i need only on current. Is there a fix?
HTML:
<nav>
<div id="left-nav">
<ul>
<li class="active">
Dashboard
</li>
<li>
Dashboard
</li>
<li>
Dashboard
</li>
<li>
Dashboard
</li>
<li>
Dashboard
</li>
</ul>
</div>
</nav>
CSS:
#left-nav {
float: left;
font-family: Tahoma;
font-size: 13px;
height: 38px;
position: relative;
width: 600px;
min-width: 600px;
}
#left-nav li{
display: inline-block;
padding: 0 12px;
}
#left-nav li a {
color: #fff;
display: block;
line-height: 35px;
padding: 0 11px;
}
#left-nav li a:active{
position: relative;
top:1px;
}
#left-nav li.active a{
display: block;
}