bootstrapのnavbarスタイル

71769 ワード

一、前言


bootstrapのナビゲーションバースタイルについて説明します.

二、ソースコード


1、navbar.less


1.1、navbar.lessソース
 //
 // Navbars
 // --------------------------------------------------

 // Wrapper and base class( )
 //
 // Provide a static navbar from which we expand to create full-width, fixed, and
 // other navbar variations.
 .navbar {
   position: relative;
   min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)
   margin-bottom: @navbar-margin-bottom;
   border: 1px solid transparent;

   // Prevent floats from breaking the navbar
   &:extend(.clearfix all);

   @media (min-width: @grid-float-breakpoint) {
     border-radius: @navbar-border-radius;
   }
 }


 // Navbar heading( )
 //
 // Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy
 // styling of responsive aspects.
 .navbar-header {
   &:extend(.clearfix all);

   @media (min-width: @grid-float-breakpoint) {
     float: left;
   }
 }


 // Navbar collapse( )
 //
 // Group your navbar content into this for easy collapsing and expanding across
 // various device sizes. By default, this content is collapsed when <768px, but
 // will expand past that for a horizontal display.
 //
 // To start (on mobile devices) the navbar links, forms, and buttons are stacked
 // vertically and include a `max-height` to overflow in case you have too much
 // content for the user's viewport.
 .navbar-collapse {
   overflow-x: visible;
   padding-right: @navbar-padding-horizontal;
   padding-left:  @navbar-padding-horizontal;
   border-top: 1px solid transparent;
   box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
   &:extend(.clearfix all);
   -webkit-overflow-scrolling: touch;

   &.in {
     overflow-y: auto;
   }

   @media (min-width: @grid-float-breakpoint) {
     width: auto;
     border-top: 0;
     box-shadow: none;

     &.collapse {
       display: block !important;
       height: auto !important;
       padding-bottom: 0; // Override default setting
       overflow: visible !important;
     }

     &.in {
       overflow-y: visible;
     }

     // Undo the collapse side padding for navbars with containers to ensure
     // alignment of right-aligned contents.
     .navbar-fixed-top &,
     .navbar-static-top &,
     .navbar-fixed-bottom & {
       padding-left: 0;
       padding-right: 0;
     }
   }
 }

 .navbar-fixed-top,
 .navbar-fixed-bottom {
   .navbar-collapse {
     max-height: @navbar-collapse-max-height;

     @media (max-device-width: @screen-xs-min) and (orientation: landscape) {
       max-height: 200px;
     }
   }
 }


 // Both navbar header and collapse
 //
 // When a container is present, change the behavior of the header and collapse.
 .container,
 .container-fluid {
   > .navbar-header,
   > .navbar-collapse {
     margin-right: -@navbar-padding-horizontal;
     margin-left:  -@navbar-padding-horizontal;

     @media (min-width: @grid-float-breakpoint) {
       margin-right: 0;
       margin-left:  0;
     }
   }
 }


 //
 // Navbar alignment options
 //
 // Display the navbar across the entirety of the page or fixed it to the top or
 // bottom of the page.

 // Static top (unfixed, but 100% wide) navbar
 .navbar-static-top {
   z-index: @zindex-navbar;
   border-width: 0 0 1px;

   @media (min-width: @grid-float-breakpoint) {
     border-radius: 0;
   }
 }

 // Fix the top/bottom navbars when screen real estate supports it( )
 .navbar-fixed-top,
 .navbar-fixed-bottom {
   position: fixed;
   right: 0;
   left: 0;
   z-index: @zindex-navbar-fixed;

   // Undo the rounded corners
   @media (min-width: @grid-float-breakpoint) {
     border-radius: 0;
   }
 }
 .navbar-fixed-top {
   top: 0;
   border-width: 0 0 1px;
 }
 .navbar-fixed-bottom {
   bottom: 0;
   margin-bottom: 0; // override .navbar defaults
   border-width: 1px 0 0;
 }

 // Brand/project name( )
 .navbar-brand {
   float: left;
   padding: @navbar-padding-vertical @navbar-padding-horizontal;
   font-size: @font-size-large;
   line-height: @line-height-computed;
   height: @navbar-height;

   &:hover,
   &:focus {
     text-decoration: none;
   }

   > img {
     display: block;
   }

   @media (min-width: @grid-float-breakpoint) {
     .navbar > .container &,
     .navbar > .container-fluid & {
       margin-left: -@navbar-padding-horizontal;
     }
   }
 }


 // Navbar toggle( )
 //
 // Custom button for toggling the `.navbar-collapse`, powered by the collapse
 // JavaScript plugin.
 .navbar-toggle {
   position: relative;
   float: right;
   margin-right: @navbar-padding-horizontal;
   padding: 9px 10px;
   .navbar-vertical-align(34px);
   background-color: transparent;
   background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
   border: 1px solid transparent;
   border-radius: @border-radius-base;

   // We remove the `outline` here, but later compensate by attaching `:hover`
   // styles to `:focus`.
   &:focus {
     outline: 0;
   }

   // Bars( bar)
   .icon-bar {
     display: block;
     width: 22px;
     height: 2px;
     border-radius: 1px;
   }
   .icon-bar + .icon-bar {
     margin-top: 4px;
   }

   @media (min-width: @grid-float-breakpoint) {
     display: none;
   }
 }

 // Navbar nav links( )
 //
 // Builds on top of the `.nav` components with its own modifier class to make
 // the nav the full height of the horizontal nav (above 768px).
 .navbar-nav {
   margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;

   > li > a {
     padding-top:    10px;
     padding-bottom: 10px;
     line-height: @line-height-computed;
   }

   @media (max-width: @grid-float-breakpoint-max) {
     // Dropdowns get custom display when collapsed
     .open .dropdown-menu {
       position: static;
       float: none;
       width: auto;
       margin-top: 0;
       background-color: transparent;
       border: 0;
       box-shadow: none;
       > li > a,
       .dropdown-header {
         padding: 5px 15px 5px 25px;
       }
       > li > a {
         line-height: @line-height-computed;
         &:hover,
         &:focus {
           background-image: none;
         }
       }
     }
   }

   // Uncollapse the nav
   @media (min-width: @grid-float-breakpoint) {
     float: left;
     margin: 0;

     > li {
       float: left;
       > a {
         padding-top:    @navbar-padding-vertical;
         padding-bottom: @navbar-padding-vertical;
       }
     }
   }
 }


 // Navbar form( )
 //
 // Extension of the `.form-inline` with some extra flavor for optimum display in
 // our navbars.
 .navbar-form {
   margin-left: -@navbar-padding-horizontal;
   margin-right: -@navbar-padding-horizontal;
   padding: 10px @navbar-padding-horizontal;
   border-top: 1px solid transparent;
   border-bottom: 1px solid transparent;
   @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);
   .box-shadow(@shadow);

   // Mixin behavior for optimum display
   .form-inline();

   .form-group {
     @media (max-width: @grid-float-breakpoint-max) {
       margin-bottom: 5px;

       &:last-child {
         margin-bottom: 0;
       }
     }
   }

   // Vertically center in expanded, horizontal navbar
   .navbar-vertical-align(@input-height-base);

   // Undo 100% width for pull classes
   @media (min-width: @grid-float-breakpoint) {
     width: auto;
     border: 0;
     margin-left: 0;
     margin-right: 0;
     padding-top: 0;
     padding-bottom: 0;
     .box-shadow(none);
   }
 }


 // Dropdown menus( )
 // Menu position and menu carets
 .navbar-nav > li > .dropdown-menu {
   margin-top: 0;
   .border-top-radius(0);
 }
 // Menu position and menu caret support for dropups via extra dropup class
 .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
   margin-bottom: 0;
   .border-top-radius(@navbar-border-radius);
   .border-bottom-radius(0);
 }


 // Buttons in navbars( )
 //
 // Vertically center a button within a navbar (when *not* in a form).
 .navbar-btn {
   .navbar-vertical-align(@input-height-base);

   &.btn-sm {
     .navbar-vertical-align(@input-height-small);
   }
   &.btn-xs {
     .navbar-vertical-align(22);
   }
 }


 // Text in navbars( )
 //
 // Add a class to make any element properly align itself vertically within the navbars.
 .navbar-text {
   .navbar-vertical-align(@line-height-computed);

   @media (min-width: @grid-float-breakpoint) {
     float: left;
     margin-left: @navbar-padding-horizontal;
     margin-right: @navbar-padding-horizontal;
   }
 }


 // Component alignment( )
 //
 // Repurpose the pull utilities as their own navbar utilities to avoid specificity
 // issues with parents and chaining. Only do this when the navbar is uncollapsed
 // though so that navbar contents properly stack and align in mobile.
 //
 // Declared after the navbar components to ensure more specificity on the margins.
 @media (min-width: @grid-float-breakpoint) {
   .navbar-left  { .pull-left(); }
   .navbar-right {
     .pull-right();
     margin-right: -@navbar-padding-horizontal;

     ~ .navbar-right {
       margin-right: 0;
     }
   }
 }


 // Alternate navbars
 // --------------------------------------------------

 // Default navbar( )
 .navbar-default {
   background-color: @navbar-default-bg;
   border-color: @navbar-default-border;

   .navbar-brand {
     color: @navbar-default-brand-color;
     &:hover,
     &:focus {
       color: @navbar-default-brand-hover-color;
       background-color: @navbar-default-brand-hover-bg;
     }
   }

   .navbar-text {
     color: @navbar-default-color;
   }

   .navbar-nav {
     > li > a {
       color: @navbar-default-link-color;

       &:hover,
       &:focus {
         color: @navbar-default-link-hover-color;
         background-color: @navbar-default-link-hover-bg;
       }
     }
     > .active > a {
       &,
       &:hover,
       &:focus {
         color: @navbar-default-link-active-color;
         background-color: @navbar-default-link-active-bg;
       }
     }
     > .disabled > a {
       &,
       &:hover,
       &:focus {
         color: @navbar-default-link-disabled-color;
         background-color: @navbar-default-link-disabled-bg;
       }
     }
   }

   .navbar-toggle {
     border-color: @navbar-default-toggle-border-color;
     &:hover,
     &:focus {
       background-color: @navbar-default-toggle-hover-bg;
     }
     .icon-bar {
       background-color: @navbar-default-toggle-icon-bar-bg;
     }
   }

   .navbar-collapse,
   .navbar-form {
     border-color: @navbar-default-border;
   }

   // Dropdown menu items( )
   .navbar-nav {
     // Remove background color from open dropdown
     > .open > a {
       &,
       &:hover,
       &:focus {
         background-color: @navbar-default-link-active-bg;
         color: @navbar-default-link-active-color;
       }
     }

     @media (max-width: @grid-float-breakpoint-max) {
       // Dropdowns get custom display when collapsed
       .open .dropdown-menu {
         > li > a {
           color: @navbar-default-link-color;
           &:hover,
           &:focus {
             color: @navbar-default-link-hover-color;
             background-color: @navbar-default-link-hover-bg;
           }
         }
         > .active > a {
           &,
           &:hover,
           &:focus {
             color: @navbar-default-link-active-color;
             background-color: @navbar-default-link-active-bg;
           }
         }
         > .disabled > a {
           &,
           &:hover,
           &:focus {
             color: @navbar-default-link-disabled-color;
             background-color: @navbar-default-link-disabled-bg;
           }
         }
       }
     }
   }

   // Links in navbars( )
   //
   // Add a class to ensure links outside the navbar nav are colored correctly.
   .navbar-link {
     color: @navbar-default-link-color;
     &:hover {
       color: @navbar-default-link-hover-color;
     }
   }

   .btn-link {
     color: @navbar-default-link-color;
     &:hover,
     &:focus {
       color: @navbar-default-link-hover-color;
     }
     &[disabled],
     fieldset[disabled] & {
       &:hover,
       &:focus {
         color: @navbar-default-link-disabled-color;
       }
     }
   }
 }

 // Inverse navbar( )
 .navbar-inverse {
   background-color: @navbar-inverse-bg;
   border-color: @navbar-inverse-border;

   .navbar-brand {
     color: @navbar-inverse-brand-color;
     &:hover,
     &:focus {
       color: @navbar-inverse-brand-hover-color;
       background-color: @navbar-inverse-brand-hover-bg;
     }
   }

   .navbar-text {
     color: @navbar-inverse-color;
   }

   .navbar-nav {
     > li > a {
       color: @navbar-inverse-link-color;

       &:hover,
       &:focus {
         color: @navbar-inverse-link-hover-color;
         background-color: @navbar-inverse-link-hover-bg;
       }
     }
     > .active > a {
       &,
       &:hover,
       &:focus {
         color: @navbar-inverse-link-active-color;
         background-color: @navbar-inverse-link-active-bg;
       }
     }
     > .disabled > a {
       &,
       &:hover,
       &:focus {
         color: @navbar-inverse-link-disabled-color;
         background-color: @navbar-inverse-link-disabled-bg;
       }
     }
   }

   // Darken the responsive nav toggle
   .navbar-toggle {
     border-color: @navbar-inverse-toggle-border-color;
     &:hover,
     &:focus {
       background-color: @navbar-inverse-toggle-hover-bg;
     }
     .icon-bar {
       background-color: @navbar-inverse-toggle-icon-bar-bg;
     }
   }

   .navbar-collapse,
   .navbar-form {
     border-color: darken(@navbar-inverse-bg, 7%);
   }

   // Dropdowns
   .navbar-nav {
     > .open > a {
       &,
       &:hover,
       &:focus {
         background-color: @navbar-inverse-link-active-bg;
         color: @navbar-inverse-link-active-color;
       }
     }

     @media (max-width: @grid-float-breakpoint-max) {
       // Dropdowns get custom display
       .open .dropdown-menu {
         > .dropdown-header {
           border-color: @navbar-inverse-border;
         }
         .divider {
           background-color: @navbar-inverse-border;
         }
         > li > a {
           color: @navbar-inverse-link-color;
           &:hover,
           &:focus {
             color: @navbar-inverse-link-hover-color;
             background-color: @navbar-inverse-link-hover-bg;
           }
         }
         > .active > a {
           &,
           &:hover,
           &:focus {
             color: @navbar-inverse-link-active-color;
             background-color: @navbar-inverse-link-active-bg;
           }
         }
         > .disabled > a {
           &,
           &:hover,
           &:focus {
             color: @navbar-inverse-link-disabled-color;
             background-color: @navbar-inverse-link-disabled-bg;
           }
         }
       }
     }
   }

   .navbar-link {
     color: @navbar-inverse-link-color;
     &:hover {
       color: @navbar-inverse-link-hover-color;
     }
   }

   .btn-link {
     color: @navbar-inverse-link-color;
     &:hover,
     &:focus {
       color: @navbar-inverse-link-hover-color;
     }
     &[disabled],
     fieldset[disabled] & {
       &:hover,
       &:focus {
         color: @navbar-inverse-link-disabled-color;
       }
     }
   }
 }

1.2、navbar.less応用
 
 <nav class="navbar navbar-default" role="navigation">
   <div class="container-fluid">
     <div class="navbar-header">
       <a class="navbar-brand" href="#"> a>
     div>
     <div>
       <ul class="nav navbar-nav">
         <li class="active"><a href="#">iOSa>li>
         <li><a href="#">SVNa>li>
         <li class="dropdown">
           <a href="#" class="dropdown-toggle" data-toggle="dropdown">
             Java
             <b class="caret">b>
           a>
           <ul class="dropdown-menu">
             <li><a href="#">jmetera>li>
             <li><a href="#">EJBa>li>
             <li><a href="#">Jasper Reporta>li>
             <li class="divider">li>
             <li><a href="#"> a>li>
             <li class="divider">li>
             <li><a href="#"> a>li>
           ul>
         li>
       ul>
     div>
   div>
 nav>
 
 <nav class="navbar navbar-default" role="navigation">
   <div class="container-fluid">
     <div class="navbar-header">
       <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#example-navbar-collapse">
         <span class="sr-only"> span>
         <span class="icon-bar">span>
         <span class="icon-bar">span>
         <span class="icon-bar">span>
       button>
       <a class="navbar-brand" href="#"> a>
     div>
     <div class="collapse navbar-collapse" id="example-navbar-collapse">
       <ul class="nav navbar-nav">
         <li class="active"><a href="#">iOSa>li>
         <li><a href="#">SVNa>li>
         <li class="dropdown">
           <a href="#" class="dropdown-toggle" data-toggle="dropdown">
             Java <b class="caret">b>
           a>
           <ul class="dropdown-menu">
             <li><a href="#">jmetera>li>
             <li><a href="#">EJBa>li>
             <li><a href="#">Jasper Reporta>li>
             <li class="divider">li>
             <li><a href="#"> a>li>
             <li class="divider">li>
             <li><a href="#"> a>li>
           ul>
         li>
       ul>
     div>
   div>
 nav>
 
 <nav class="navbar navbar-default" role="navigation">
   <div class="container-fluid">
     <div class="navbar-header">
       <a class="navbar-brand" href="#"> a>
     div>
     <div>
       <p class="navbar-text">Runoob  p>
     div>
     <form class="navbar-form navbar-left" role="search">
       <div class="form-group">
         <input type="text" class="form-control" placeholder="Search">
       div>
       <button type="submit" class="btn btn-default"> button>
       <button type="button" class="btn btn-default navbar-btn"> button>
     form>
     <ul class="nav navbar-nav navbar-right">
       <li><a href="#"><span class="glyphicon glyphicon-user">span>  a>li>
       <li><a href="#"><span class="glyphicon glyphicon-log-in">span>  a>li>
     ul>
   div>
 nav>
 
 <nav class="navbar navbar-inverse navbar-fixed-bottom" role="navigation">
   <div class="container-fluid">
     <div class="navbar-header">
       <a class="navbar-brand" href="#"> a>
     div>
     <div>
       <ul class="nav navbar-nav">
         <li class="active"><a href="#">iOSa>li>
         <li><a href="#">SVNa>li>
         <li class="dropdown">
           <a href="#" class="dropdown-toggle" data-toggle="dropdown">
             Java <b class="caret">b>
           a>
           <ul class="dropdown-menu">
             <li><a href="#">jmetera>li>
             <li><a href="#">EJBa>li>
             <li><a href="#">Jasper Reporta>li>
             <li class="divider">li>
             <li><a href="#"> a>li>
             <li class="divider">li>
             <li><a href="#"> a>li>
           ul>
         li>
       ul>
     div>
   div>
 nav>
 
 <nav class="navbar navbar-default navbar-static-top" role="navigation">
   <div class="container-fluid">
     <div class="navbar-header">
       <a class="navbar-brand" href="#"> a>
     div>
     <div>
       <ul class="nav navbar-nav">
         <li class="active"><a href="#">iOSa>li>
         <li><a href="#">SVNa>li>
         <li class="dropdown">
           <a href="#" class="dropdown-toggle" data-toggle="dropdown">
             Java <b class="caret">b>
           a>
           <ul class="dropdown-menu">
             <li><a href="#">jmetera>li>
             <li><a href="#">EJBa>li>
             <li><a href="#">Jasper Reporta>li>
             <li class="divider">li>
             <li><a href="#"> a>li>
             <li class="divider">li>
             <li><a href="#"> a>li>
           ul>
         li>
       ul>
     div>
   div>
 nav>