Hur gör man en gummiresponsiv meny med CSS? Gör-det-själv horisontell rullgardinsmeny med CSS och HTML. Expandera menyn till full bredd.
God eftermiddag
Det är ofta nödvändigt att göra en horisontell meny som kommer att sträcka sig över hela bredden av det överordnade blocket, oavsett hur många objekt det innehåller.
Idag skulle jag vilja visa er hur man skapar just en sådan meny.
Så vår meny kommer att se ut som följer:
Den är utsträckt till full bredd och sticker ut när den svävar över den. Menyn är rundad på sidorna.
HTML MARKUP
|
|
...
|
För att göra menyn full bredd använde jag tabeller med 100% bredd. Varje tabell har en menypost div-behållare. Beroende på om det första, sista eller mellanliggande menyalternativet är en div, tilldelas motsvarande klass.
Varje div-behållare har 2 sidokanter med absolut positionering, vilka är nödvändiga för korrekt visning. Om du använder standardkanter kommer texten att hoppa med 1-2 pixlar när du byter menyalternativ, vilket är bra.
Den aktiva klassen är ansvarig för det valda menyalternativet och markerar det.
I varje föremål har vi en bild och text. För att säkerställa att allt detta är strikt justerat i mitten vertikalt använder vi en tabell. Tack vare egenskapen för vertikal justering kommer våra menyalternativ alltid att visas smidigt och kommer inte att flyttas bort.
CSS REGLER
Låt oss först ställa in stilar för den allmänna visningen av menyn:
Menu_container ( padding-top: 40px; bredd: 100%; höjd: 47px; kantavstånd: 0px; ) .menu_container td ( vertical-align: middle; /* vertikal alignment */ ) .last_point_menu, .first_point_menu, . bredd: 100%; höjd: 47px; kant: 1px fast #dadbda; z-index: 1000; position: relativ; kant-vänster: ingen; ) .inner_table (bredd: 100%; höjd: 100%; ) .inner_table td ( utfyllnad: 0px; vertikal-justera: mitten; kantlinje: ingen; textjustering: vänster; bredd: 150 px; utfyllnad-vänster: 4px; ) .td.inner_table_title ( padding-top: 4px; font-weight: fet; ) .td.inner_table_img ( width: 40px!important; ) .inner_table_menu (höjd: 100%; utfyllnad: 0px; vertikal-align: mitten; border: ingen; text-align: vänster; ) .inner_table_title ( padding-left: 10px; padding-right: 10px; text-transform: versaler; line-height: 13px; ) .inner_table_menu td.inner_table_img ( bredd: 30px!viktigt; höjd: 30px!viktigt; padding-vänster: 15px; )
För skönhet, låt oss runda hörnen på sidorna av menyn:
First_point_menu ( -webkit-border-top-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; -moz-border-radius-topleft: 5px; -moz-border-radius-bottomleft: 5px; border-top-left-radius: 5px; border-bottom-left-radie: 5px; border-right: 1px solid #dadbda; ) .last_point_menu ( -webkit-border-top-right-radius: 5px; -webkit-border -bottom-right-radie: 5px; -moz-border-radius-topright: 5px; -moz-border-radius-bottomright: 5px; border-top-right-radie: 5px; border-nedre-höger-radie: 5px ;)
Nu har vår meny fått ett vackrare utseende:
Än så länge har den första punkten ingen vänsterkant. Vi fixar det lite senare.
Låt oss nu lägga till hovringseffekter för menyn.
Middle_point_menu:hover, .last_point_menu:hover, .first_point_menu:hover, .middle_point_menu.active, .last_point_menu.active, .first_point_menu.active, .middle_point_menu.active ( bakgrundsfärg: #CAE285; bakgrundsbild: -moz-linear- gradient(top, #CAE285, #9FCB56); bakgrundsbild: -webkit-gradient(linjär, 0 0, 0 100%, från(#CAE285), till(#9FCB56)); bakgrundsbild: -webkit-linjär -gradient(top, #CAE285, #9FCB56); bakgrundsbild: -o-linear-gradient(top, #CAE285, #9FCB56); bakgrundsbild: linjär-gradient(till botten, #CAE285, #9FCB56); border: 1px solid #9FCB56; border-color: #aec671 #9fbb62 #87ac4a; border-left: none; z-index: 5000; ) /* kommer att räkna ut gränser vid hovring */ .first_point_menu (kant: 1px solid #dadbda ; ) .first_point_menu:hover, .first_point_menu.active (kant: 1px fast #9FCB56; border-color: #aec671 #9fbb62 #87ac4a; ) .last_point_menu (kant: 1px fast #dadbda; border-left; gräns_vänster): :hover (kant: 1px fast #9FCB56; kant-vänster: ingen; kantfärg: #aec671 #9fbb62 #87ac4a; ) .last_point_menu.active (kant-vänster: ingen; )
Nu ser vår meny mycket trevligare ut, men för närvarande har vi inga gränser för de markerade menyalternativen. Låt oss fixa detta!
/* stilar för sidokanter */ .borderLeftSecond, .borderRightSecond (visning: ingen; position: absolut; bredd: 1px; höjd: 47px; bakgrundsfärg: #9fbb62; topp: 0px; z-index: 1000; ) /* absoluta förskjutningar för gränser */ .borderLeftSecond ( vänster: 0px; ). , .middle_point_menu:hover > .borderRightSecond, .last_point_menu:hover > .borderLeftSecond .first_point_menu:hover > .borderRightSecond (visa: blockera fallen;*) det första och sista objektet */ .first_point_menu.active .borderLeftSecond ( display: none; ) .last_point_menu.active .borderRightSecond ( display: none; ) .last_point_menu:hover .borderLeftSecond ( display: block; )
Det är allt!
Vi gjorde det stor meny sträckt över hela föräldrablockets bredd! Objekten överlappar inte varandra när du för musen och layouten hoppar inte.
En horisontell meny är en lista över webbplatssektioner, så det är mer logiskt att placera den inuti elementet
- , och tillämpa sedan CSS-stilar på dess element. Denna menylayout är den vanligaste på grund av de uppenbara fördelarna med dess placering på en webbsida. Hur man gör en horisontell meny: layout och designexempel
HTML-uppmärkning och grundläggande stilar för en horisontell meny
- Menyalternativ
- Menyalternativ
- Menyalternativ ...
- Volymkod
- Oförmåga att bestämma det aktiva tillståndet för ett element genom en klassväljare. Detta inträffar på grund av att ord i stycken går sönder (om det finns något). Lösningen på detta problem är att lägga till ytterligare en behållare i listelementen.
- För rullgardinsmenyn måste du anpassa koden på grund av den negativa effekten av spill . Vilka webbläsare fungerar det i?
- Hem
- Om oss
- Våra tjänster
- Vår tjänst nr 1
- Vår tjänst nr 2
- Vår tjänst nr 3
- Vår tjänst nr 4
- Service 5
- Nyheter
- Kontakter
- menyn kommer att ritas dynamiskt;
- indragen från avgränsaren till stycket är desamma överallt;
- vackrare och mer flexibel design.
- med en vip-dyna när du pekar åt sidan
- med en popup-rullgardinsmeny på den tredje nivån
- Hem
- Om oss
- Våra tjänster
- Vår tjänst nr 1
- Tillägg till tjänst 1
- Tillägg till tjänst 2
- Vår tjänst nr 2
- Tillägg till tjänst 3
- Tillägg till tjänsten 4
- Vår tjänst nr 3
- Vår tjänst nr 4
- Service 5
- Vår tjänst nr 1
- Nyheter
- Kontakter
- Vägkarta
- Karttillägg
- Tillägg för karta 2
- Återkopplingsformulär
- Vägkarta
Som standard är alla listelement arrangerade vertikalt och upptar hela bredden av containerelementet, som i sin tur upptar hela bredden av dess containerblock.
HTML-uppmärkning för horisontell navigering
En horisontell meny placerad inuti en tagg kan dessutom placeras inuti ... och/eller ...-elementet. Tack vare denna html-markering ges semantisk betydelse och visas också ytterligare möjlighet för att formatera menyblocket.
Det finns flera sätt att placera dem horisontellt. Först måste du återställa standard webbläsarstilar för navigeringselement:
Ul ( list-stil: ingen; /*ta bort listmarkörer*/ marginal: 0; /*ta bort den övre och nedre marginalen lika med 1em*/ padding-left: 0; /*ta bort den vänstra utfyllnaden lika med 40px*/ ) a (textdekoration: ingen; /*ta bort understrykning av länktext*/)
Metod 1. li (display: inline;)Gör listelement med små bokstäver. Som ett resultat placeras de horisontellt, med ett mellanrum på 0,4 em lagt till på höger sida mellan dem (beräknat i förhållande till teckenstorleken). För att ta bort det, lägg till en negativ högermarginal för li li (marginal-höger: -4px;) . Därefter stylar vi länkarna som vi vill.
Metod 2. li (flyta: vänster;)Att göra listelement flytande. Som ett resultat är de placerade horisontellt. Höjden på behållarblocket ul blir noll. För att lösa detta problem lägger vi till (overflow: hidden;) till ul, förlänger det och låter det på så sätt innehålla flytande element. För länkar, lägg till ett (visa: block;) och stil dem som du vill.
Metod 3. li (display: inline-block;)Att göra listelement inline-block. De är placerade horisontellt, ett gap bildas på höger sida, som i det första fallet. För länkar, lägg till ett (visa: block;) och stil dem som du vill.
Metod 4. ul (visa: flex;)Göra ul-listan till en flexibel behållare med hjälp av . Som ett resultat är listelementen ordnade horisontellt. Vi lägger till ett (visa: block;) för länkarna och stilar dem efter önskemål.
1. Adaptiv meny med understrykningseffekt när du håller muspekaren över en länk @import url("https://fonts.googleapis.com/css?family=Ubuntu+Condensed"); .menu-main ( liststil: ingen; marginal: 40px 0 5px; utfyllnad: 25px 0 5px; text-align: center; bakgrund: vit; ) .menu-main li (display: inline-block;).menu- main li:after ( innehåll: "|"; färg: #606060; display: inline-block; vertical-align:top; ) .menu-main li:last-child:after (innehåll: ingen;) .menu-main a (text-dekoration: ingen; font-family: "Ubuntu Condensed", sans-serif; bokstavsmellanrum: 2px; position: relativ; padding-bottom: 20px; marginal: 0 34px 0 30px; font-size: 17px; text-transform: versaler; display: inline-block; övergång: färg .2s; ) .menu-main a, .menu-main a:visited (färg: #9d999d;) .menu-main a.current, .menu- main a:hover(färg: #feb386;) .menu-main a:before, .menu-main a:after ( innehåll: ""; position: absolut; höjd: 4px; topp: auto; höger: 50%; botten : -5px; vänster: 50%; bakgrund: #feb386; övergång: .8s; ) .menu-main a:hover:before, .menu-main .current:before (vänster: 0;) .menu-main a: hover:after, .menu-main .current:after (höger: 0;) @media (max-width: 550px) ( .menu-main (padding-top: 0;).menu-main li (display: block; ) .menu-main li:after (innehåll: inget;) .menu-main a ( utfyllnad: 25px 0 20px; marginal: 0 30px; ) ) 2. Adaptiv meny för en bröllopswebbplats @import url("https://fonts.googleapis.com/css?family=PT+Sans"); .top-meny (position: relativ; bakgrund: #fff; box-shadow: infälld 0 0 10px #ccc; ) .top-menu:before, .top-menu:after ( innehåll: ""; display: block; höjd : 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 ( liststil: ingen; utfyllnad: 0 30px; marginal: 0; font-size: 18px; text-align: center; position: relativ; ) .menu-main:before, .menu-main:after ( innehåll: "\25C8"; linjehöjd: 1; position: absolut; topp: 50%; transform: translateY(-50% ); ) .menu-main:before (vänster: 15px;) .menu-main:after (höger: 15px;) .menu-main li (display: inline-block; utfyllnad: 5px 0; ) .menu-main a ( text-dekoration: ingen; display: inline-block; marginal: 2px 5px; stoppning: 6px 15px; font-family: "PT Sans", sans-serif; font-size: 16px; färg: #777777; border-bottom : 1px solid transparent, övergång: .3s linjär; ) .menu-main .current, .menu-main a:hover ( border-radius: 3px; bakgrund: #f3ece1; color: #313131; text-shadow: 0 1px 0 #fff; border-color: #c6c6c6; ) @media (maxbredd: 500px) ( .menu-main li (display: block;) ) 3. Responsiv bågad meny @import url("https://fonts.googleapis.com/css?family=PT+Sans+Caption"); .menu-main ( liststil: ingen; utfyllnad: 0 30px; marginal: 0; font-size: 18px; text-align: center; position: relativ; bakgrund: vit; ) .menu-main:after ( innehåll: ""; position: absolut; bredd: 100%; höjd: 20px; vänster: 0; botten: -20px; bakgrund: radiell-gradient(vit 0%, vit 70%, rgba(255,255,255,0) 70%, rgba( 255,255,255,0) 100%) 0 -10px; bakgrundsstorlek: 20px 20px; background-repeat: repeat-x; ) .menu-main li (display: inline-block;) .menu-main a ( text-decoration: ingen; display: inline-block; marginal: 0 15px; utfyllnad: 10px 30px; font-family: "PT Sans Caption", sans-serif; färg: #777777; övergång: .3s linjär; position: relativ; ) .menu -main a:before, .menu-main a:after (innehåll: ""; position: absolut; topp: calc(50% - 3px); bredd: 6px; höjd: 6px; border-radie: 50%; bakgrund: #F58262; opacitet: 0; övergång: .5s ease-in-out; ) .menu-main a:before (vänster: 5px;) .menu-main a:after (höger: 5px;) .menu-main a. aktuell:före, .menu-main a.current:after, .menu-main a:hover:före, .menu-main a:hover:after (opacitet: 1;) .menu-main a.current, .menu- main a:hover (färg: #F58262;) @media(max-width:680px) ( .menu-main li (display: block;) ) 4. Adaptiv meny på menyfliksområdet @import url("https://fonts.googleapis.com/css?family=PT+Sans+Caption"); .top-meny ( marginal: 0 60px; position: relativ; bakgrund: #5A394E; box-shadow: infälld 1px 0 0 rgba(255,255,255,.1), infälld -1px 0 0 rgba(255,255,255,.110),p inset . 0 150px -150px rgba(255,255,255,.12), infälld -150px 0 150px -150px rgba(255,255,255,.12); ) .top-menu:before, .top-meny: "efter"; ; z-index: 2; vänster: 0; bredd: 100%; höjd: 3px; ) .top-menu:before ( top: 0; border-bottom: 1px streckad rgba(255,255,255,.2); ) .top- menu:after ( botten: 0; border-top: 1px streckad rgba(255,255,255,.2); ) .menu-main ( liststil: ingen; utfyllnad: 0; marginal: 0; textjustering: center; ) . menu-main:before, .menu-main:after ( innehåll: ""; position: absolut; bredd: 50px; höjd: 0; topp: 8px; border-top: 18px solid #5A394E; border-bottom: 18px solid # 5A394E; transform: rotate(360deg); z-index: -1; ) .menu-main:before (vänster: -30px; border-left: 12px solid rgba(255, 255, 255, 0); ) .menu- main:after (höger: -30px; kant-höger: 12px solid rgba(255, 255, 255, 0); ) .menu-main li ( display: inline-block; margin-right: -4px; ) .menu-main a ( text-decoration: none; display: inline-block; utfyllnad: 15px 30px; font-family: "PT Sans Caption", sans-serif; färg: vit; övergång: .3s linjär; ) .menu-main a.current, .menu-main a:hover (bakgrund: rgba(0,0,0,.2);) @media (max-bredd: 680px) ( .top-meny (marginal: 0;) .menu-main li ( display: block; margin-right: 0; ) .menu-main:before, .menu-main:after (innehåll: inget;) .menu-main a (display: block;) ) 5. Responsiv meny med en logotyp i mitten![](https://i0.wp.com/сайт/wp-content/uploads/2017/04/lily-logo.png)
![](https://i2.wp.com/html5book.ru/wp-content/uploads/2017/04/lily-logo.png)
En ganska vanlig layout av en webbplatsmeny, när behållaren med den upptar hela bredden som finns på sidan. I det här fallet är det första föremålet intill den vänstra kanten, och det sista är intill höger, och avståndet mellan alla element är lika. Idag kommer vi att berätta hur detta går till.
Vi erbjuder dig ett exempel på implementering av en gummimeny med hjälp av CSS för din resurs. I den här menyn kommer objekten att finnas på en rad. Javascript kommer inte att användas. Menyns innehåll kommer att bifogas i en vanlig lista. Huvuddraget i en sådan meny är dess mångsidighet, vilket uttrycks i det faktum att både antalet och längden på objekten kan vara vilken som helst.
Hur implementerar man detta?Varje programmerare kan erbjuda sitt eget sätt att lösa ett givet problem. Allt beror på hans fantasi, nivå av professionalism och förmågor. Den vanligaste lösningen på detta problem är att använda en tabell. Dessutom skulle många föreslå att du använder javascript. Jag skyndar mig att göra dem besvikna som föreslår att du använder egenskapen display med värdetabellen eller tabellcellen. Denna metod är inte tillräckligt kompatibel med flera webbläsare.
Vår lösningVårt erbjudande kommer att bygga på en solid grund av HTML5- och CSS3-kunskap.
Kärnan i processen är baserad på egenskapen text-align med justify-värdet. För de som har glömt, påminner jag er: den här egenskapen orienterar textjusteringen över hela behållarens bredd.
När du använder vår lösning måste två obligatoriska regler följas. Den första är att bredden på menyobjektbehållaren ska vara mindre än texten. Det vill säga inte på en rad. Den andra viktiga regeln är att ord sträcks lika, oavsett om de tillhör samma punkt eller inte.
Nedan finns kod som fungerar som ett exempel på att skapa en gummimeny:
HTML
< ul> < li>< a href= "#" >Hem< li>< a href= "#" >Blogg< li>< a href= "#" >Nyheter< li>< a href= "#" >Populär< li>< a href= "#" >Nya saker
ul ( text-align: justify; overflow: hidden; /* eliminerar biverkningarna av metoden */ height: 20px; /* eliminerar även onödiga */ cursor: default ; /* ställer in markörens initiala form */ margin : 50px 100px 0 100px; bakgrund: #eee; padding: 5px; ) li ( display: inline; /* gör menyalternativ till text */ ) li a ( display: inline- block; /* eliminerar ordbrytningar i menyn */ color: #444; ) a : hover ( color: #ff0000; ) ul: after ( /* bildar den andra raden för att räkna ut metoden */ content: "1" ; marginal- vänster: 100 %; höjd: 1px; overflow: dold; display: inline-block;)
För att arbeta i den gamla goda Internet Explorer måste du dessutom lägga till följande kod till CSS
ul ( z- index: expression(runtimeStyle. zIndex = 1 , insertAdjacentHTML("beforeEnd&apos, "< li class = "last" >")); ) ul .last ( marginal-vänster: 100%; ) * html ul ( /* behöver endast ie6 */ höjd: 30px; )
Efter att ha angett de nödvändiga egenskapsvärdena och koden får vi denna gummimeny:
6.0+ | 6.0+ | 10.5+ | 5.0+ | 3.6+ | - | - |
Vi fortsätter serien med en lektion om rullgardinsmenyer. Nästa upp är en gör-det-själv horisontell rullgardinsmeny med css.
Om du kom hit av misstag eller om du letade efter en annan implementering av rullgardinsmenyn, råder jag dig att gå till föräldrasektionen.
Det här avsnittet kommer att beskriva en horisontell rullgardinsmeny i CSS och HTML.
Sidnavigering:
Så, vår uppgift:
gör en horisontell meny med en rullgardinslista css (på ul li listor) utan att använda jQuery och Javascript, och även utan att använda tabeller