JGallardo
JGallardo

Reputation: 11383

What is a fallback for the "hamburger icon" or HTML entity ☰?

I have this as my menu bar for the site when viewed on tablet:

Header menu

The menu icon on the right shows other options when clicked. The code is

<div id="menu">
  <a id="metaMenu" href="#">&#9776;</a>
</div>

But I saw on Twitter that the entity (or it may have been the corresponding Unicode characters) is not supported in some Android phones. How can I modify my HTML to have a fallback?

Upvotes: 7

Views: 15563

Answers (4)

Firewizz
Firewizz

Reputation: 813

Try using &equiv; / ≡

As of my knowledge, this works most of the time.

Upvotes: 13

monist
monist

Reputation: 194

Here is how I ended up doing it, with an inline SVG element defined in the CSS:

#menu_button {
    margin-top: 2vmin;
    margin-left: 2vmin;
    width: 8vmin;
    height: 8vmin;
    background-size: 100%;
    /* inline SVG element! */
    background-image: url('data:image/svg+xml;utf8,<svg viewBox="0 0 120 80" width="40" height="40" version="1.0" xmlns="http://www.w3.org/2000/svg"><rect x="15" width="90" height="15" rx="10"></rect><rect x="15" y="30" width="90" height="15" rx="10"></rect><rect x="15" y="60" width="90" height="15" rx="10"></rect></svg>');
}

Note that the string in url() must be all on one line -- no newline characters. Then pop in your HTML:

<button id="menu_button" type="button" onclick="show_menu()">
</button>

With this method you can make a hamburger image styled exactly as you want it, but without having to load a separate image file from your server.

Upvotes: 0

Isaque Bressy
Isaque Bressy

Reputation: 61

The solution used by Twitter Bootstrap is using spans to construct the Hamburger:

<button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
  <span class="icon-bar"></span>
  <span class="icon-bar"></span>
  <span class="icon-bar"></span>
</button>

The corresponding CSS is:

.navbar-toggle {
   position: relative;
   float: right;
   padding: 9px 10px;
   margin-top: 8px;
   margin-right: 15px;
   margin-bottom: 8px;
   background-color: #cccccc;
   border: 1px solid transparent;
   border-radius: 4px;
}

.navbar-toggle .icon-bar {
   display: block;
   width: 22px;
   height: 2px;
   background-color:#000000;
   border-radius: 1px;
}

.navbar-toggle .icon-bar+.icon-bar {
   margin-top: 4px;
}

Upvotes: 4

Mike Barwick
Mike Barwick

Reputation: 5367

Image is a wrong way to go about this - as is an entity, in my opinion. As this one is not well supported at all. No Android, renders weird on Windows Chrome, Internet Explorer, etc.

Go the CSS3 route. This is supported by every major browser - and all modern mobile devices.

jsFiddle here: http://jsfiddle.net/328k7/

Use CSS3 as below. Edit where you see fit...

div {
    content: "";
    position: absolute;
    left: 0;
    display: block;
    width: 14px;
    top: 0;
    height: 0;
    -webkit-box-shadow: 1px 10px 1px 1px #69737d,1px 16px 1px 1px     #69737d,1px 22px 1px 1px #69737d;
    box-shadow: 0 10px 0 1px #69737d,0 16px 0 1px #69737d,0 22px 0 1px #69737d;
}

Upvotes: 8

Related Questions