38391

responsive menu not showing

I want to show the menu items as seperate rows on smaller screen. This is pretty basic and seen many places. The effect i am going for is:

<img src=https://www.e-learn.cn/content/wangluowenzhang/"https://i.stack.imgur.com/8oEvh.png" alt="enter image description here">

With what i have so far (code Below) the menu items just show up next to the logo (thats how they are there for desktop).

<strong>Also i need to add a Background Image to the menus items. One image that fills the entire area and not the same image repeating for each menu</strong>

I have already added:

<meta name="viewport" content="width=device-width, initial-scale=1">

Here is my fiddle

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

//make the topnav responsive for mobile screens
function topNav() {
    var x = document.getElementById("myTopnav");
    if (x.className === "myTopnav") {
        x.className += " responsive";
    } else {
        x.className = "myTopnav";
    }
}
.topnav {
    background-repeat:no-repeat;
    background-size:cover;
    overflow:visible;
    width: 100%;
    padding-bottom: 0px;
}

.topnav nav{
    padding-top: 5px;
    padding-bottom: 8px;
    background: -webkit-linear-gradient(left, transparent, black, black, transparent); /* For Safari 5.1 to 6.0 */
    background: -o-linear-gradient(left, transparent, black,black, transparent); /* For Opera 11.1 to 12.0 */
    background: -moz-linear-gradient(left, transparent, black,black, transparent); /* For Fx 3.6 to 15 */
    background: linear-gradient(to right, transparent, black, black, transparent); /* Standard syntax (must be last) */
    width:100%;
}

.topnav nav div{
    width: 85%;
    margin-left: 7.5%;
    margin-right: 7.5% ;
    display:flex;
    align-items: center;
    justify-content: center;
}

.link {
    color: white;
    text-decoration: none;
    font-size: 11px;
    font-weight: 700; /* this is futura heavy*/
    width:11.25%;
    letter-spacing: 2px;
    word-wrap:true;
    display:inline-block;
    vertical-align: top;
    text-align: center;
    /*line-height: 5em;*/
}

.notlink {
    width:30.4%;
    margin-left: 1%;
    margin-right: 1%;
    display: inline-block;
}

.notlink img {
    width: 100%;
}

.topnav nav .link:hover {
    color: #008ed2;
}

.icon {
    display: none;
    font-size: 32px;
    color: white;
    text-decoration: none;
    text-align: center;
    line-height: 40px;
    min-width: 40px;
    min-height: 40px;
}


/* When the screen is less than 600 pixels wide, hide all links, except for the first one ("Home"). Show the link that contains should open and close the topnav (.icon) */
@media only screen and (max-width: 767px) {
    .myTopnav a.link {display: none;}
    
    .topnav nav div{
        width: 100%;
        margin-left: 0;
        margin-right: 0;
        position: relative;
        top: 0;
        left: 0;
    }
    
    .icon {
      display :inline-block;
      position : absolute;
      right : 0;
    }
    
    .notlink {
        width: 70%;
        display : flex;
        align-items: center;
        justify-content : center;
    }
    .notlink img {
        max-width:100%;
        max-height:75px;
        width: auto;
        height: auto;
    }
}

@media screen and (max-width: 767px) {
    .myTopnav.responsive {position: relative;}
    .myTopnav.responsive .icon {
        position: absolute;
        right: 0;
        top: 0;
    }
    .myTopnav.responsive a {
        float: none;
        display: block;
        text-align: left;
    }

}
<div class="topnav">
                <nav>
                    <div class="myTopnav" id="myTopnav">
                        <a class="link" href="index.html">HOME</a>
                        <a class="link" id ="selected" href="about.html">ABOUT</a>
                        <a class="link" href="expertise.html">EXPERTISE</a>
                        <a class="notlink" href="index.html"><img src="https://www.google.com/logos/doodles/2017/earth-day-2017-5650394117046272-s.png"></a>
                        <a class="link" href="industries.html">INDUSTRIES</a>
                        <a class="link" href="friends.html">FRIENDS OF MARY</a>
                        <a class="link" href="contact.html">CONTACT</a>
                        <a href="javascript:void(0);" class="icon" onclick="topNav()">&#9776;</a>
                    </div>
                </nav>
            </div>


Answer1:

Here my solution (changed markup, js and css):

HTML:

<div class="topnav" data-mobile="false"> <nav> <div class="myTopnav" id="myTopnav"> <a class="link" href="index.html">HOME</a> <a class="link" id ="selected" href="about.html">ABOUT</a> <a class="link" href="expertise.html">EXPERTISE</a> <a class="notlink" href="index.html"><img src="https://www.google.com/logos/doodles/2017/earth-day-2017-5650394117046272-s.png"></a> <a class="link" href="industries.html">INDUSTRIES</a> <a class="link" href="friends.html">FRIENDS OF MARY</a> <a class="link" href="contact.html">CONTACT</a> <a href="javascript:void(0);" class="icon" onclick="topNav()">&#9776;</a> </div> </nav> <nav id="mobile-menu"> <a class="link" href="index.html">HOME</a> <a class="link" id ="selected" href="about.html">ABOUT</a> <a class="link" href="expertise.html">EXPERTISE</a> <a class="link" href="industries.html">INDUSTRIES</a> <a class="link" href="friends.html">FRIENDS OF MARY</a> <a class="link" href="contact.html">CONTACT</a> </nav> </div>

JS:

function topNav() { var topNav = document.querySelector('.topnav'); topNav.dataset.mobile = (topNav.dataset.mobile == "false") ? true : false; }

CSS:

html, body { height : 100%; margin : 0; padding : 0; background-color : white; } .topnav { overflow:hidden; width: 100%; padding-bottom: 0px; } .topnav nav:first-of-type{ padding-top: 5px; padding-bottom: 8px; background: -webkit-linear-gradient(left, transparent, black, black, transparent); /* For Safari 5.1 to 6.0 */ background: -o-linear-gradient(left, transparent, black,black, transparent); /* For Opera 11.1 to 12.0 */ background: -moz-linear-gradient(left, transparent, black,black, transparent); /* For Fx 3.6 to 15 */ background: linear-gradient(to right, transparent, black, black, transparent); /* Standard syntax (must be last) */ width:100%; } .topnav .myTopnav{ width: 85%; margin-left: 7.5%; margin-right: 7.5% ; display:flex; align-items: center; justify-content: center; } .link { color: white; text-decoration: none; font-size: 11px; font-weight: 700; /* this is futura heavy*/ width:11.25%; letter-spacing: 2px; word-wrap:true; display:inline-block; vertical-align: top; text-align: center; /*line-height: 5em;*/ } .notlink { width:30.4%; margin-left: 1%; margin-right: 1%; display: inline-block; } .notlink img { width: 100%; } .topnav nav .link:hover { color: #008ed2; } .icon { display: none; font-size: 32px; color: white; text-decoration: none; text-align: center; line-height: 40px; min-width: 40px; min-height: 40px; } #mobile-menu { width : 100%; height : 100%; padding : 20px; background: url(https://pbs.twimg.com/profile_images/638771889339404289/h64dZ4wh_400x400.png) no-repeat center center fixed; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; display: flex; flex-direction: column; /*justify-content: center; --> add this to center vertically*/ align-items: center; box-sizing : border-box; } #mobile-menu > * { color : black; } .topnav[data-mobile=false] #mobile-menu { display : none; } @media only screen and (max-width: 767px) { .myTopnav a.link { display: none; } .topnav[data-mobile=true]{ height : 100%; } .topnav nav div{ width: 100%; height : 100%; margin-left: 0; margin-right: 0; position: relative; top: 0; left: 0; } .icon { display :inline-block; position : absolute; right : 0; } .notlink { width: 70%; display : flex; align-items: center; justify-content : center; } .notlink img { max-width:100%; max-height:75px; width: auto; height: auto; } }

After this you need to place it correctly over your following content when the mobile menu is expanded.

fiddle

Answer2:

Here is the fiddle

You need to add flex-direction:column for topbar inorder to show it as column for mobile devices.

.topnav nav div{ flex-direction:column; } .myTopnav.responsive a.link:first-child{ margin-top:30px; } .myTopnav.responsive a.link{ width : 100%; } .myTopnav.responsive a.notlink{ width: 70%; position: absolute; top: 0px; text-align: center; }

Recommend

  • Top window's URL form inside of multiple nested cross-domain iFrames
  • FSC: Error FS2024: Static linking may not use assembly that targets different profile
  • Javascript: parseInt() with trailing characters
  • Use pnorm from Rmath.h with Rcpp
  • Cocos2D set sprite position in relation to another sprite
  • Add vertical separator and labels to R barplot
  • Insert multiple values into hidden field
  • Hadoop/map-reduce: Total time spent by all maps in occupied slots vs. Total time spent by all map ta
  • Mootools accordion with a Next button inside each pane
  • Advice on how to create this button shape
  • Why are my web pages zoomed in when I open them in Opera Mobile?
  • FAILURE: Gradle Build failed with an exception
  • Sticky Service not restarting after RAM full on Xiaomi / Huawei / Lava
  • Easy Way to Get Averages Based on Names in List
  • OleDbDataAdapter not filling all of the rows
  • Change the width of the JQM panels
  • Slow performance in hybrid AngularJS and Angular application in Safari
  • Moving Google Chart column annotation position
  • removing the default blue color on focus
  • if(!isset($_POST[“user”]) ignored and returns Undefined Index
  • css calendar - td background diagonal split - two colors
  • Cursor in wrong place in contenteditable
  • Fat binaries in iOS
  • Is is safe to use HSQLDB for production? (JBoss AS5.1)
  • Is it safe to drop the -webkit vendor prefix from the css3 border-radius yet?
  • AlertDialog style when using setView()
  • iOS Cordova first plugin - plugin.xml to inject a feature
  • Cut the background to expose the layer below
  • HTML5 video only works in IE. The other browsers shows the black screen
  • AppleScript : find open tab in safari by name and open it
  • Specify the x-axis values in ggplot in R
  • AndEngine Applying Transparancy to AndEngine View
  • Listbox within Listbox and scrolling trouble in Windows Phone 7 Silverlight
  • Chrome doesn't support silverlight anymore? How to solve this?
  • Google Custom Search with transparent background
  • Disable Enter in editText android
  • CSS Linear-gradient formatting issue accross different browsers
  • JFileChooser in front of fullscreen Swing application
  • How to check if every primary key value is being referenced as foreign key in another table
  • python regex in pyparsing