How can i center this nav bar so it stays in the center of the screen despite the users resolution setting? Also how to stop the dropdown menu on 'Portfolio' stretching the menu?
http://jsfiddle.net/y4vDC/382/
<ul id="menu">
<li>Home</li>
<li>
About
<ul class="hidden">
<li>Who We Are</li>
<li>What We Do</li>
</ul>
</li>
some of the html....
This should get you started. The important thing is that floating makes centering items quite difficult.
display:inline-block works much better as you can center thme list items by applying text-align:center to the parent ul.
Then it's just a case of using positioning to set the location and size of the submenu.
/*Strip the ul of padding and styling*/
ul {
list-style-type: none;
margin: 0;
padding: 0;
/* center contents of menu */
text-align: center;
}
/*Create a horizontal list with spacing*/
li {
display: inline-block;
vertical-align: top;
margin-right: 1px;
/* create positioning context */
position: relative;
}
/*Style for menu links*/
li a {
display: block;
min-width: 140px;
/* removed set height */
min-height: 50px;
line-height: 50px;
text-align: center;
font-family: helvetica, arial, sans-serif;
color: #ffffff;
background: #6BD6FA;
text-decoration: none;
}
/*Hover state for top level links*/
li:hover a {
background: #A0A2A3;
color: #ffffff;
}
/*Hover state for dropdown links*/
li ul a:hover {
background: #bada55;
color: #ffffff;
}
/*Hide dropdown menu until are needed*/
li ul {
display: none;
position: absolute;
top: 100%;
left: 0;
height: auto;
}
/*Show dropdown menu on hover */
li:hover ul {
display: block;
}
/*Make dropdown links vertical*/
li ul li {
display: block;
}
<ul id="menu">
<li>Home
</li>
<li> About
<ul class="hidden">
<li>Who We Are
</li>
<li>What We Do
</li>
</ul>
</li>
<li>Portfolio
<ul class="hidden">
<li>Web & User Interface Design
</li>
</ul>
</li>
<li>News
</li>
<li>Contacts
</li>
</ul>
/*Strip the ul of padding and styling*/
ul {
list-style-type: none;
margin: 0;
padding: 0;
text-align:center;
}
/*Create a horizontal list with spacing*/
li {
display: inline-block;
margin-right: 0px;
}
ul#menu > li{
position:relative;
}
ul > li > ul{
position:absolute;
}
ul > li > ul li{
white-space:nowrap;
}
/*Style for menu links*/
li a {
display: block;
padding:25px 50px;
line-height: 50px;
text-align: center;
font-family: helvetica, arial, sans-serif;
color: #ffffff;
background: #6BD6FA;
text-decoration: none;
}
/*Hover state for top level links*/
li:hover a{
background: #A0A2A3;
color: #ffffff;
}
/*Style for dropdown links*/
li:hover a {
background: #A0A2A3;
color: #ffffff;
height: 50px;
line-height: 50px;
}
/*Hover state for dropdown links*/
li:hover ul a:hover {
background: #A0A2A3;
color: #ffffff;
}
/*Hide dropdown links until they are needed*/
li ul {
display: none;
}
/*Make dropdown links vertical*/
li ul li {
display: block;
float: none;
}
/*Prevent text wrapping*/
li ul li a {
width: auto;
}
/*Display dropdown on hover*/
ul li a:hover + .hidden, .hidden:hover {
display: block;
}
I updated jsfiddle too: http://jsfiddle.net/y4vDC/385/
try this
ul {
list-style-type: none;
margin: 0 auto;
width:80%;
padding:0;
}
Related
I am trying to center my menu, but I don't know why it isn't working. Can someone help me?
body {
margin: 0;
padding: 0;
}
/*Strip the ul of padding and list styling*/
ul {
list-style-type: none;
margin: 0;
padding: 0;
position: absolute;
}
/*Create a horizontal list with spacing*/
li {
display: inline-block;
float: left;
margin-right: 1px;
}
/*Style for menu links*/
li a {
display: block;
min-width: 140px;
height: 50px;
text-align: center;
line-height: 50px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #fff;
background: #2f3036;
text-decoration: none;
}
/*Hover state for top level links*/
li:hover a {
background: #19c589;
}
/*Style for dropdown links*/
li:hover ul a {
background: #f3f3f3;
color: #2f3036;
height: 40px;
line-height: 40px;
}
/*Hover state for dropdown links*/
li:hover ul a:hover {
background: #19c589;
color: #fff;
}
/*Hide dropdown links until they are needed*/
li ul {
display: none;
}
/*Make dropdown links vertical*/
li ul li {
display: block;
float: none;
}
/*Prevent text wrapping*/
li ul li a {
width: auto;
min-width: 100px;
padding: 0 20px;
}
/*Display the dropdown on hover*/
ul li a:hover+.hidden,
.hidden:hover {
display: block;
}
/*Style 'show menu' label button and hide it by default*/
.show-menu {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
text-decoration: none;
color: #fff;
background: #19c589;
text-align: center;
padding: 10px 0;
display: none;
}
/*Hide checkbox*/
input[type=checkbox] {
display: none;
}
/*Show menu when invisible checkbox is checked*/
input[type=checkbox]:checked~#menu {
display: block;
}
/*Responsive Styles*/
#media screen and (max-width: 760px) {
/*Make dropdown links appear inline*/
ul {
position: static;
display: none;
}
/*Create vertical spacing*/
li {
margin-bottom: 1px;
}
/*Make all menu links full width*/
ul li,
li a {
width: 100%;
}
/*Display 'show menu' link*/
.show-menu {
display: block;
}
}
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css" />
</head>
<body>
<label for="show-menu" class="show-menu">Show Menu</label>
<input type="checkbox" id="show-menu" role="button" />
<ul id="menu">
<li>Home</li>
<li>
About ↓
<ul class="hidden">
<li>Who We Are</li>
<li>What We Do</li>
</ul>
</li>
<li>
Portfolio ↓
<ul class="hidden">
<li>Photography</li>
<li>Web & User Interface Design</li>
<li>Illustration</li>
</ul>
</li>
<li>News</li>
<li>Contact</li>
</ul>
</body>
</html>
Thanks for helping.
You are declaring all of your ul elements as position:absolute. You will need to change your ul id="menu" item to static positioning, and also give it a defined width since you are defining the width of your li a elements. Check your updated fiddle here. Simply add the following to your css:
#menu {
width:705px;
margin:0 auto;
display:block;
position:static;
}
I'm playing around with this Navbar and somehow the 'About and Portfolio' Menu keeps extending sidewards whenever you hover on top of it.
I would like to prevent it from extending.
You can check the code from JSFiddle. Thanks in advance.
https://jsfiddle.net/JustCraze/gdc56899/1/#
HTML
<ul id="main-nav">
<li>
Home
</li>
<li>
About ↓
<ul class="hidden">
<li>
Who We Are
</li>
<li>
What We Do
</li>
</ul>
</li>
<li>
Portfolio ↓
<ul class="hidden">
<li>
Photography
</li>
<li>
Web & User Interface Design
</li>
<li>
Illustration
</li>
</ul>
</li>
<li>
News
</li>
<li>
Contact
</li>
</ul>
CSS
#wrap-nav {
display: block;
margin:2rem;
z-index: 900;
padding: 5rem;
}
#main-nav {
display: block;
z-index: 950;
padding: 1rem;
float: right;
}
/*Strip the ul of padding and list styling*/
ul {
list-style-type:none;
margin:0;
padding:.1rem;
}
/*Create a horizontal list with spacing*/
li {
display:inline-block;
float: left;
margin-right: 1px;
}
/*Style for menu links*/
li a {
display:block;
min-width:140px;
height: 50px;
text-align: center;
line-height: 50px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #fff;
background: #2f3036;
text-decoration: none;
}
/*Hover state for top level links*/
li:hover a {
background: #19c589;
z-index: 980;
}
/*Style for dropdown links*/
li:hover ul a {
background: #f3f3f3;
color: #2f3036;
height: 40px;
line-height: 40px;
z-index: 980;
}
/*Hover state for dropdown links*/
li:hover ul a:hover {
background: #19c589;
color: #fff;
z-index: 980;
}
/*Hide dropdown links until they are needed*/
li ul {
display: none;
}
/*Make dropdown links vertical*/
li ul li {
display: block;
float: none;
}
/*Prevent text wrapping*/
li ul li a {
width: auto;
min-width: 100px;
padding: 0 20px;
}
/*Display the dropdown on hover*/
ul li a:hover + .hidden, .hidden:hover {
display: block;
}
/*Responsive Styles*/
#media screen and (max-width : 250px){
/*Make dropdown links appear inline*/
ul {
position: static;
display: none;
}
/*Create vertical spacing*/
li {
margin-bottom: 1px;
}
/*Make all menu links full width*/
ul li, li a {
width: 100%;
}
The trick is to make li ul positions, absolute so they wont take room.
#wrap-nav {
display: block;
margin:2rem;
z-index: 900;
padding: 5rem;
}
#main-nav {
display: block;
z-index: 950;
padding: 1rem;
float: right;
}
/*Strip the ul of padding and list styling*/
ul {
list-style-type:none;
margin:0;
padding:.1rem;
}
/*Create a horizontal list with spacing*/
li {
display:inline-block;
float: left;
margin-right: 1px;
}
/*Style for menu links*/
li a {
display:block;
min-width:140px;
height: 50px;
text-align: center;
line-height: 50px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #fff;
background: #2f3036;
text-decoration: none;
}
/*Hover state for top level links*/
li:hover a {
background: #19c589;
z-index: 980;
}
/*Style for dropdown links*/
li:hover ul a {
background: #f3f3f3;
color: #2f3036;
height: 40px;
line-height: 40px;
z-index: 980;
}
/*Hover state for dropdown links*/
li:hover ul a:hover {
background: #19c589;
color: #fff;
z-index: 980;
}
/*Hide dropdown links until they are needed*/
li ul {
display: none;
/*this is the trick*/
position:absolute;
}
/*Make dropdown links vertical*/
li ul li {
display: block;
float: none;
}
/*Prevent text wrapping*/
li ul li a {
width: auto;
min-width: 100px;
padding: 0 20px;
}
/*Display the dropdown on hover*/
ul li a:hover + .hidden, .hidden:hover {
display: block;
}
/*Responsive Styles*/
#media screen and (max-width : 250px){
/*Make dropdown links appear inline*/
ul {
position: static;
display: none;
}
/*Create vertical spacing*/
li {
margin-bottom: 1px;
}
/*Make all menu links full width*/
ul li, li a {
width: 100%;
}
<ul id="main-nav">
<li>
Home
</li>
<li>
About ↓
<ul class="hidden">
<li>
Who We Are
</li>
<li>
What We Do
</li>
</ul>
</li>
<li>
Portfolio ↓
<ul class="hidden">
<li>
Photography
</li>
<li>
Web & User Interface Design
</li>
<li>
Illustration
</li>
</ul>
</li>
<li>
News
</li>
<li>
Contact
</li>
</ul>
The problem you are having is the result of one of your listed items:
<li>Web & User Interface Design</li>
Try cutting it down to just User Interface Design and it will not extend as much, if you prevent the nav bar from extending then the text will be cut off, is that your intent? Your desired outcome is a little unclear. And, thank you for making improvements to your question
Yesterday i found a code for making sliding menu only with css.
Everything works great when in my css file i set styles for all ul,li,a elements.
The problem appears when i try to style lists in concrete div,then when i hover on the top element,sub elements appear but when i try to point on them they hide working it_hides_when_hover.
Can anyone explain why in div it doesn't work ?
#nav ul {
list-style-type:none;
margin:0;
padding:0;
position: absolute;
}
/*Create a horizontal list with spacing*/
#nav li {
display:inline-block;
float: left;
margin-right: 1px;
}
/*Style for menu links*/
#nav li a {
display:block;
min-width:140px;
height: 50px;
text-align: center;
line-height: 50px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #fff;
background: #2f3036;
text-decoration: none;
}
/*Hover state for top level links*/
#nav li:hover a {
background: #19c589;
}
/*Style for dropdown links*/
#nav li:hover ul a {
background: #f3f3f3;
color: #2f3036;
height: 40px;
line-height: 40px;
}
/*Hover state for dropdown links*/
#nav li:hover ul a:hover {
background: #19c589;
color: #fff;
}
/*Hide dropdown links until they are needed*/
#nav li ul {
display: none;
}
/*Make dropdown links vertical*/
#nav li ul li {
display: block;
float: none;
}
/*Prevent text wrapping*/
#nav li ul li a {
width: auto;
min-width: 100px;
padding: 0 20px;
}
/*Display the dropdown on hover*/
#nav ul li a:hover + .hidden, .hidden:hover {
display: block;
}
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-2">
<TITLE>Tytuł strony!</TITLE>
<link rel="stylesheet" type="text/css" href="style2.css">
<META NAME="description" CONTENT="Site description">
<META NAME="robots" CONTENT="ALL">
</head>
<body>
<div id="nav">
<ul id="menu">
<li>GALERRY
<ul class="hidden">
<li>ConceptArt</li>
<li>Videos</li>
</ul>
</li>
<li>INFO</li>
<li>CONTACT</li>
<li>ABOUT
<ul class="hidden">
<li>We do</li>
<li>We are</li>
</ul>
</li>
</ul>
</div>
</body>
</html>
Here's a modified example:
http://codepen.io/xvariant/pen/pgKxwp
#nav ul {
list-style-type: none;
margin: 0;
padding: 0;
position: absolute;
}
/*Create a horizontal list with spacing*/
#nav li {
display: inline-block;
float: left;
margin-right: 1px;
}
/*Style for menu links*/
#nav li a {
display: block;
min-width: 140px;
height: 50px;
text-align: center;
line-height: 50px;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #fff;
background: #2f3036;
text-decoration: none;
}
/*Hover state for top level links*/
#nav li:hover a {
background: #19c589;
}
/*Style for dropdown links*/
#nav li:hover ul a {
background: #f3f3f3;
color: #2f3036;
height: 40px;
line-height: 40px;
}
/*Hover state for dropdown links*/
#nav li:hover ul a:hover {
background: #19c589;
color: #fff;
}
/*Hide dropdown links until they are needed*/
#nav li ul {
display: none;
}
/*Make dropdown links vertical*/
#nav li ul li {
display: block;
float: none;
}
/*Prevent text wrapping*/
#nav li ul li a {
width: auto;
min-width: 100px;
padding: 0 20px;
}
/*Display the dropdown on hover*/
#nav ul li:hover .hidden {
display: block;
}
<div id="nav">
<ul id="menu">
<li>GALERRY
<ul class="hidden">
<li>ConceptArt
</li>
<li>Videos
</li>
</ul>
</li>
<li>INFO
</li>
<li>CONTACT
</li>
<li>ABOUT
<ul class="hidden">
<li>We do
</li>
<li>We are
</li>
</ul>
</li>
</ul>
</div>
try adding this to your style ul#menu li:hover .hidden{display:block}
I hope that I'm explaining this clearly. You can view my site at: http://membershq.incentiveusa.com/AwardPages/GoalUp_Test2/index_test2.html
The navigation menu, when in mobile format, has the drop down links on top of the main navigation rather than nesting within and pushing the rest of the links down.
CSS:
.navigation{
margin-right: auto;
margin-left: auto;
width: 100%;
background-color: #0f9cde;
position: absolute;
display: block;
margin-bottom: 15px;
z-index: 1000;
top: 735px;
margin-left: -15px;
}
/*Strip the ul of padding and list styling*/
.navigation ul{
list-style-type: none;
margin: 0 auto;
padding: 0;
position: relative;
z-index: 1000;
text-align:center;
}
/*Create a horizontal list with spacing*/
.navigation li{
display:inline-block;
margin-right: 0px;
background-color:#0f9bde;
vertical-align: top;
}
/*Style for menu links*/
.navigation li a {
min-width: 189px;
height: 50px;
text-align: center;
line-height: 50px;
font-family: 'Maven Pro', sans-serif;
font-size:18px;
color: #fff;
width:100%;
background-color: #0f9cde;
text-decoration: none;
display:block;
}
/*Hover state for top level links*/
.navigation li:hover a {
color: #f7a800;
text-decoration: underline;
}
/*Style for dropdown links*/
.navigation li:hover ul a {
background: #f7a800;
color: #ffffff;
height: 40px;
line-height: 40px;
}
/*Hover state for dropdown links*/
.navigation li:hover ul a:hover {
background: #fff;
color: #f7a800;
}
/*Hide dropdown links until they are needed*/
.navigation li ul{
display: none;
position: absolute;
}
/*Make dropdown links vertical*/
.navigation li ul li {
display: block;
float: none;
}
/*Prevent text wrapping*/
.navigation li ul li a {
width: auto;
min-width: 100px;
padding: 0 20px;
}
.navigation ul li:hover ul{
display:block;
}
/*Display the dropdown on hover*/
.navigation ul li a:hover {
display: block;
}
/*Style 'show menu' label button and hide it by default*/
.show-menu {
font-family:'Maven Pro', sans-serif;
text-decoration: none;
color: #fff;
background: #f7a800;
text-align: center;
padding: 10px 0;
display: none;
}
/*Hide checkbox*/
input[type=checkbox]{
display: none;
-webkit-appearance: none;
}
/*Show menu when invisible checkbox is checked*/
input[type=checkbox]:checked ~ #menu{
display: block;
}
#menu ul {min-width: 189px; }
/*Responsive Styles*/
#media screen and (max-width : 975px){
/*Make dropdown links appear inline*/
.navigation ul {
position: static;
display: none;
}
/*Create vertical spacing*/
.navigation li {
margin-bottom: 1px;
}
/*Make all menu links full width*/
.navigation ul li, li a {
width: 100%;
}
.navigation li ul li {
width: 100%;
}
#menu ul {min-width: 100%;}
/*Display 'show menu' link*/
.show-menu {
display:block;
}
}
Here is the HTML:
<div class="container-fluid">
<div class="section-title2 text-center">
<div class="navigation">
<label for="show-menu" class="show-menu">Show Menu</label>
<input type="checkbox" id="show-menu" role="button">
<ul id="menu">
<li>
About Us
<ul>
<li>
News
</li>
</ul>
</li>
<li>
How It Works
<ul>
<li>
Facts
</li>
<li>
Tools
</li>
</ul>
</li>
<li>
Testimonials
</li>
<li>
Brand Name Awards
</li>
<li>
Contact
</li>
</ul>
</div>
</div>
</div>
Your problem has to do with this style:
.navigation li ul{
display: none;
position: absolute;
}
Remove the position: absolute;, probably needed at you mobile break point.
Like this:
#media screen and (max-width : 975px){
.navigation li ul{
position: static;
}
}
I have this drop down menu which is responsive. When media query kicks in and I hover over my links, my drop down menu width sticks out of my container.
<!-- Navigation Menu -->
<div class="container">
<div id="navigation">
<label for="show-menu" class="show-menu">Menu</label>
<input type="checkbox" id="show-menu" role="button">
<ul id="menu">
<li>| Home</li>
<li>
| SERMONS <span>▼</span>
<ul class="hidden">
<li>Link 1</li>
<li>Link 1</li>
</ul>
</li>
<li>
| EVENTS<span>▼</span>
<ul class="hidden">
<li>slam Link 1</li>
<li>Link 1</li>
<li>LINK2</li>
</ul>
</li>
<li>| CONNECT<span>▼</span></li>
<li>| STAFF<span>▼</span></li>
<li>| LOCATIONS <span>▼</span></li>
<li>| OTHERS</li>
</ul>
</div>
</div>
<!-- End of Navigation Menu -->
Here is the css:
#navigation {
background-color: #bg-color;
height: 50px;
margin: 0px auto;
}
/*Arrow down style */
#navigation span{
font-size: 10px;
padding-left: 4px;
line-height: 50px;
}
/*Strip the ul of padding and list styling*/
ul {
list-style-type:none;
margin:0;
padding:0;
width: 100%;
position: absolute;
}
/*Create a horizontal list with spacing*/
li {
display:inline-block;
float: left;
margin-right: 1px;
width:100px;
}
/*Style for menu links*/
li a {
display:block;
height: 50px;
text-align: center;
line-height: 50px;
font-family:#Oswald;
font-size: 16px;
color: #fff;
background: #bg-color;
text-decoration: none;
}
/*Hover state for top level links*/
li:hover a {
background: #light-gray;
}
/*Style for dropdown links*/
li:hover ul a {
background: #light-gray;
color: #white;
height: 40px;
line-height: 40px;
width: 100%;
}
/*Hover state for dropdown links*/
li:hover ul a:hover {
background: #bg-color;
color: #white;
}
/*Hide dropdown links until they are needed*/
li ul {
display: none;
position: absolute;
z-index: 100;
}
/*Make dropdown links vertical*/
li ul li {
display: block;
float: none;
}
/*Prevent text wrapping*/
li ul li a {
width: auto;
min-width: 100px;
padding: 0 20px;
text-align: left;
}
/*Display the dropdown on hover*/
ul li a:hover + .hidden, .hidden:hover {
display: block;
min-width: 100%;
}
/*Style 'show menu' label button and hide it by default*/
.show-menu {
font-family:#Oswald;
text-decoration: none;
color: #fff;
background: #bg-color;
text-align: center;
padding: 10px 0;
display: none;
}
/*Hide checkbox*/
input[type=checkbox]{
display: none;
}
/*Show menu when invisible checkbox is checked*/
input[type=checkbox]:checked ~ #menu{
display: block;
}
input[type='text']{
color: #bg-color;
}
/*Responsive Styles*/
#media screen and (max-width : 760px){
/*Make dropdown links appear inline*/
ul {
position: static;
display: none;
}
/*Create vertical spacing*/
li {
margin-bottom: 1px;
}
/*Make all menu links full width*/
ul li, li a {
width: 100%;
}
li ul li a {
text-align: center;
}
/*Display 'show menu' link*/
.show-menu {
display:block;
}
.hide-tab {
display: none;
}
#logo h1, #logo p {
text-align: center;
}
#testr form {
float: none;
}
#testr > form > input[type='text'] {
margin: 0 auto;
width:60%;
line-height: 60px;
}
}
I am not sure how to fix it as I have tried everything. A simple width:100% should fix it, but it hasn't.
I don't see where you defined .container