Stretch the menu to the full width of the css. How to make a flexible responsive menu in css? HTML markup and basic styles for horizontal menus
A fairly common layout of the site menu, when the container with it occupies the entire width available on the page. In this case, the first item is adjacent to the left edge, and the last to the right, and the distance between all elements is equal. Today we will tell you how this is done.
We offer you an example of how to implement a fluid menu using CSS for your resource. In this menu, items will be located on one line. Javascript will not be used. The contents of the menu will be enclosed in a regular list. The main feature of such a menu is its versatility, which is expressed in the fact that both the number and the length of the items can be any.
How to implement this?
Each programmer can offer his own way to solve the problem. It all depends on his imagination, level of professionalism and abilities. The most common solution to this problem is to use a table. Also, many would suggest using javascript. Those who would suggest using the display property with the value table or table-cell- I hasten to upset. This method is not sufficiently cross-browser compatible.
Our solution
Our proposal will be built on a solid foundation of HTML5 and CSS3 knowledge.
The core of the process is based on the text-align property with a justify value. For those who have forgotten - I remind you: this property orients the alignment of the text across the entire width of the container.
There are two essential rules to follow when using our solution. The first is that the width of the menu item container must be smaller than the text. That is, not in one line. The second important rule is that words are stretched equally, regardless of whether they belong to the same point or not.
Below is the code that serves as an example of creating a "rubber" menu:
Html
< ul> < li>< a href= "#" >home a> li> < li>< a href= "#" >Blog a> li> < li>< a href= "#" >news a> li> < li>< a href= "#" >Popular a> li> < li>< a href= "#" >New items a> li> ul>
ul (text-align: justify; overflow: hidden; / * removes side effects of the method * / height: 20px; / * removes unnecessary too * / cursor: default; / * sets the original cursor shape * / margin: 50px 100px 0 100px; background: #eee; padding: 5px; ) li (display: inline; / * makes menu items text * /) li a (display: inline- block; / * fix the word break in the menu * / color: # 444; ) a: hover (color: # ff0000;) ul: after ( / * formation of the second line for working out the method * / content: "1"; margin- left: 100%; height: 1px; overflow: hidden; display: inline- block; )
To work in the good old Internet Explower, you need to add the following code to the CSS
ul (z- index: expression (runtimeStyle. zIndex = 1, insertAdjacentHTML ("beforeEnd & apos,"< li class = "last" > li> "));) ul .last (margin-left: 100%;) * html ul (/ * need ie6 only * / height: 30px;)
Having registered the necessary property values and the code, we get the following rubber menu:
Disadvantages of the method
- Bulk code
- Inability to determine the active state of an element through a class selector. This is due to the break of words in paragraphs (if it is one). The solution to this problem is to add another container inside the list items.
- For the dropdown menu, you need to customize the code due to the negative impact of overflow.
What browsers does it work in?
6.0+ | 6.0+ | 10.5+ | 5.0+ | 3.6+ | - | - |
Horizontal menu is a list of site sections, so it is more logical to mark it inside the element
- and then apply CSS styles to its elements. This menu arrangement is the most common because of the obvious advantages in its positioning on a web page.
- Menu item
- Menu item
- Menu item ...
How to make a horizontal menu: markup and design examples
HTML markup and basic styles for a horizontal menu
By default, all list items are positioned vertically, occupying the entire width of the container element in width, which in turn occupies the entire width of its container block.
HTML markup for horizontal navigation
A horizontal menu inside a tag can optionally be placed inside an element and / or
There are several ways to place them. horizontally... First, you need to reset the default browser styles for navigation elements:
Ul (list-style: none; / * remove list markers * / margin: 0; / * remove top and bottom margin equal to 1em * / padding-left: 0; / * remove left margin equal to 40px * /) a ( text-decoration: none; / * remove the underlining of link text * /)
Method 1.li (display: inline;)
Making the list items lowercase. As a result, they are positioned horizontally, on the right side between them is added a gap equal to 0.4em (calculated relative to the font size). To remove it, add a negative li right margin for li (margin-right: -4px;). Next, we will style the links as we wish.
Method 2.li (float: left;)
Floating the list items. As a result, they are positioned horizontally. The height of the container block ul becomes zero. To solve this problem, we add (overflow: hidden;) to the ul, expanding it and thus allowing it to contain floated elements. For the links, add a (display: block;) and style them as you wish.
Method 3.li (display: inline-block;)
We make the elements of the list inline-block. They are located horizontally, a gap is formed on the right side, as in the first case. For the links, add a (display: block;) and style them as you wish.
Method 4.ul (display: flex;)
Making the ul a flexible container using a model. As a result, the elements of the list are arranged horizontally. Add a (display: block;) for the links and style them as you wish.
1. Responsive menu with an underline effect when hovering over a link
@import url ("https://fonts.googleapis.com/css?family=Ubuntu+Condensed"); .menu-main (list-style: none; margin: 40px 0 5px; padding: 25px 0 5px; text-align: center; background: white;) .menu-main li (display: inline-block;) .menu- main li: after (content: "|"; color: # 606060; display: inline-block; vertical-align: top;) .menu-main li: last-child: after (content: none;) .menu-main a (text-decoration: none; font-family: "Ubuntu Condensed", sans-serif; letter-spacing: 2px; position: relative; padding-bottom: 20px; margin: 0 34px 0 30px; font-size: 17px; text-transform: uppercase; display: inline-block; transition: color .2s;) .menu-main a, .menu-main a: visited (color: # 9d999d;) .menu-main a.current, .menu- main a: hover (color: # feb386;) .menu-main a: before, .menu-main a: after (content: ""; position: absolute; height: 4px; top: auto; right: 50%; bottom : -5px; left: 50%; background: # feb386; transition: .8s;) .menu-main a: hover: before, .menu-main .current: before (left: 0;) .menu-main a: hover: after, .menu-main .current: after (right: 0; ) @media (max-width: 550px) (.menu-main (padding-top: 0;) .menu-main li (display: block;) .menu-main li: after (content: none;) .menu- main a (padding: 25px 0 20px; margin: 0 30px; ))2. Responsive menu for the wedding site
@import url ("https://fonts.googleapis.com/css?family=PT+Sans"); .top-menu (position: relative; background: #fff; box-shadow: inset 0 0 10px #ccc;) .top-menu: before, .top-menu: after (content: ""; display: block; height : 1px; border-top: 3px solid # 575350; border-bottom: 1px solid # 575350; margin-bottom: 2px;) .top-menu: after (border-bottom: 3px solid # 575350; border-top: 1px solid # 575350; box-shadow: 0 2px 7px #ccc; margin-top: 2px;) .menu-main (list-style: none; padding: 0 30px; margin: 0; font-size: 18px; text-align: center; position: relative;) .menu-main: before, .menu-main: after (content: "\ 25C8"; line-height: 1; position: absolute; top: 50%; transform: translateY (-50% );) .menu-main: before (left: 15px;) .menu-main: after (right: 15px;) .menu-main li (display: inline-block; padding: 5px 0;) .menu-main a (text-decoration: none; display: inline-block; margin: 2px 5px; padding: 6px 15px; font-family: "PT Sans", sans-serif; font-size: 16px; color: # 777777; border-bottom : 1px solid transparent; transitio n: .3s linear; ) .menu-main .current, .menu-main a: hover (border-radius: 3px; background: # f3ece1; color: # 313131; text-shadow: 0 1px 0 #fff; border-color: # c6c6c6;) @media (max-width: 500px) (.menu-main li (display: block;))3. Adaptive menu with scallops
@import url ("https://fonts.googleapis.com/css?family=PT+Sans+Caption"); .menu-main (list-style: none; padding: 0 30px; margin: 0; font-size: 18px; text-align: center; position: relative; background: white;) .menu-main: after (content: ""; position: absolute; width: 100%; height: 20px; left: 0; bottom: -20px; background: radial-gradient (white 0%, white 70%, rgba (255,255,255,0) 70%, rgba ( 255,255,255,0) 100%) 0 -10px; background-size: 20px 20px; background-repeat: repeat-x;) .menu-main li (display: inline-block;) .menu-main a (text-decoration: none; display: inline-block; margin: 0 15px; padding: 10px 30px; font-family: "PT Sans Caption", sans-serif; color: # 777777; transition: .3s linear; position: relative;) .menu -main a: before, .menu-main a: after (content: ""; position: absolute; top: calc (50% - 3px); width: 6px; height: 6px; border-radius: 50%; background: # F58262; opacity: 0; transition: .5s ease-in-out;) .menu-main a: before (left: 5px;) .menu-main a: after (right: 5px;) .menu-main a. current: before, .menu-main a.cur rent: after, .menu-main a: hover: before, .menu-main a: hover: after (opacity: 1;) .menu-main a.current, .menu-main a: hover (color: # F58262; ) @media (max-width: 680px) (.menu-main li (display: block;))4. Responsive menu on the ribbon
@import url ("https://fonts.googleapis.com/css?family=PT+Sans+Caption"); .top-menu (margin: 0 60px; position: relative; background: # 5A394E; box-shadow: inset 1px 0 0 rgba (255,255,255, .1), inset -1px 0 0 rgba (255,255,255, .1), inset 150px 0 150px -150px rgba (255,255,255, .12), inset -150px 0 150px -150px rgba (255,255,255, .12);) .top-menu: before, .top-menu: after (content: ""; position: absolute ; z-index: 2; left: 0; width: 100%; height: 3px;) .top-menu: before (top: 0; border-bottom: 1px dashed rgba (255,255,255, .2);) .top- menu: after (bottom: 0; border-top: 1px dashed rgba (255,255,255, .2);) .menu-main (list-style: none; padding: 0; margin: 0; text-align: center;). menu-main: before, .menu-main: after (content: ""; position: absolute; width: 50px; height: 0; top: 8px; border-top: 18px solid # 5A394E; border-bottom: 18px solid # 5A394E; transform: rotate (360deg); z-index: -1;) .menu-main: before (left: -30px; border-left: 12px solid rgba (255, 255, 255, 0);) .menu- main: after (right: -30px; border-right: 12px solid rgba (2 55, 255, 255, 0); ) .menu-main li (display: inline-block; margin-right: -4px;) .menu-main a (text-decoration: none; display: inline-block; padding: 15px 30px; font-family: "PT Sans Caption ", sans-serif; color: white; transition: .3s linear;) .menu-main a.current, .menu-main a: hover (background: rgba (0,0,0, .2);) @media (max-width: 680px) (.top-menu (margin: 0;) .menu-main li (display: block; margin-right: 0;) .menu-main: before, .menu-main: after (content: none;) .menu-main a (display: block;))5. Responsive menu with a logo in the middle
@import url ("https://fonts.googleapis.com/css?family=Arimo"); .top-menu (position: relative; background: rgba (34,34,34, .2);) .menu-main (list-style: none; margin: 0; padding: 0;) .menu-main: after (content: ""; display: table; clear: both;) .left-item (float: left;) .right-item (float: right;) .navbar-logo (position: absolute; left: 50%; top : 50%; transform: translate (-50%, - 50%);) .menu-main a (text-decoration: none; display: block; line-height: 80px; padding: 0 20px; font-size: 18px ; letter-spacing: 2px; font-family: "Arimo", sans-serif; font-weight: bold; color: white; transition: .3s linear;) .menu-main a: hover (background: rgba (0, 0,0, .3);) @media (max-width: 830px) (.menu-main (padding-top: 90px; text-align: center;) .navbar-logo (position: absolute; left: 50% ; top: 10px; transform: translateX (-50%);) .menu-main li (float: none; display: inline-block;) .menu-main a (line-height: normal; padding: 20px 15px; font -size: 16px;)) @media (max-width: 630px) (.menu-main li (display: block;))6. Responsive menu with logo on the left
@import url ("https://fonts.googleapis.com/css?family=Arimo"); .top-menu (background: rgba (255,255,255, .5); box-shadow: 3px 0 7px rgba (0,0,0, .3); padding: 20px;) .top-menu: after (content: "" ; display: table; clear: both;) .navbar-logo (display: inline-block;) .menu-main (list-style: none; margin: 0; padding: 0; float: right;) .menu-main li (display: inline-block;) .menu-main a (text-decoration: none; display: block; position: relative; line-height: 61px; padding-left: 20px; font-size: 18px; letter-spacing : 2px; font-family: "Arimo", sans-serif; font-weight: bold; color: # F73E24; transition: .3s linear;) .menu-main a: before (content: ""; width: 9px; height: 9px; background: # F73E24; position: absolute; left: 50%; transform: rotate (45deg) translateX (6.5px); opacity: 0; transition: .3s linear;) .menu-main a: hover: before (opacity: 1;) @media (max-width: 660px) (.menu-main (float: none; padding-top: 20px;) .top-menu (text-align: center; padding: 20px 0 0 0; ) .menu-main a (padding: 0 10px;) .menu-main a: be fore (transform: rotate (45deg) translateX (-6px);)) @media (max-width: 600px) (.menu-main li (display: block;))We continue the series with a tutorial on drop-down menus. The next step is a horizontal drop-down menu in css with your own hands.
If you got here by accident or you were looking for another implementation of the drop-down menu, I advise you to go to the parent section.
This section will describe the horizontal dropdown menu in CSS and HTML.
Page navigation:
So, our task:
make a horizontal menu with css dropdown (on ul li lists) without using jQuery and Javascript and also without using tables