Header.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. <template>
  2. <nav class="navbar">
  3. <div class="container">
  4. <div class="navbar-translate">
  5. <a class="navbar-brand">众测</a>
  6. <button
  7. type="button"
  8. data-toggle="collapse"
  9. aria-expanded="false"
  10. aria-label="Toggle navigation"
  11. @click="openNavBarFunc"
  12. v-bind:class="['navbar-toggler',{ 'open-fixed': openNavBar}]"
  13. >
  14. <span class="navbar-toggler-icon"></span>
  15. <span class="navbar-toggler-icon"></span>
  16. <span class="navbar-toggler-icon"></span>
  17. </button>
  18. </div>
  19. <div class="collapse navbar-collapse" v-bind:style="{right:openNavBar?'230px':'0'}">
  20. <ul class="navbar-nav ml-auto" >
  21. <li class="dropdown nav-item">
  22. <router-link to="/home">
  23. <a class="dropdown-toggle nav-link" data-toggle="dropdown">
  24. <img class="icon" src="@/assets/img/home_icon.svg">
  25. <span>首页</span>
  26. </a>
  27. </router-link>
  28. </li>
  29. <li class="dropdown nav-item">
  30. <router-link to="/square">
  31. <a class="dropdown-toggle nav-link" data-toggle="dropdown">
  32. <img class="icon" src="@/assets/img/square_icon.svg">
  33. <span>任务广场</span>
  34. </a>
  35. </router-link>
  36. </li>
  37. <li class="dropdown nav-item">
  38. <router-link to="/mine">
  39. <a class="dropdown-toggle nav-link" data-toggle="dropdown">
  40. <img class="icon" src="@/assets/img/mine_icon.svg">
  41. <span>我的众测</span>
  42. </a>
  43. </router-link>
  44. <div class="dropdown-menu dropdown-with-icons">
  45. <a href="./sections.html#headers" class="dropdown-item">
  46. <i class="material-icons"></i> Headers
  47. </a>
  48. <a href="./sections.html#features" class="dropdown-item">
  49. <i class="material-icons"></i> Features
  50. </a>
  51. </div>
  52. </li>
  53. </ul>
  54. </div>
  55. </div>
  56. </nav>
  57. </template>
  58. <script>
  59. export default {
  60. name: "header-container",
  61. data(){
  62. return{
  63. openNavBar:false
  64. }
  65. },
  66. methods:{
  67. openNavBarFunc(){
  68. this.openNavBar = !this.openNavBar;
  69. }
  70. }
  71. };
  72. </script>
  73. <style lang="less" scoped>
  74. .open-fixed{
  75. position:fixed;
  76. right:5px;
  77. z-index: 1033;
  78. }
  79. .navbar {
  80. background-color: #fff !important;
  81. box-shadow: none;
  82. padding-top: 10px;
  83. padding-bottom: 10px;
  84. color: #000;
  85. transition: all 0.15s ease 0s;
  86. display: flex;
  87. flex-wrap: wrap;
  88. align-items: center;
  89. justify-content: space-between;
  90. }
  91. @media (max-width: 991px) {
  92. [class*="navbar-expand-"] > .container {
  93. padding-left: 15px;
  94. padding-right: 15px;
  95. }
  96. }
  97. .navbar > .container {
  98. display: flex;
  99. flex-wrap: wrap;
  100. align-items: center;
  101. justify-content: space-between;
  102. flex: 1;
  103. }
  104. .navbar .navbar-brand {
  105. position: relative;
  106. color: inherit;
  107. font-size: 1.8rem;
  108. line-height: 30px;
  109. padding: 10px 0;
  110. margin-right: 1rem;
  111. display: inline-block;
  112. white-space: nowrap;
  113. }
  114. @media (max-width: 991px) {
  115. .navbar .navbar-translate {
  116. width: 100%;
  117. position: relative;
  118. display: flex;
  119. -ms-flex-pack: justify !important;
  120. justify-content: space-between !important;
  121. -ms-flex-align: center;
  122. align-items: center;
  123. transition: transform 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
  124. }
  125. }
  126. .navbar-collapse {
  127. flex-basis: 100%;
  128. flex-grow: 1;
  129. align-items: center;
  130. }
  131. @media (max-width: 991px) {
  132. .navbar-collapse {
  133. position: fixed;
  134. display: block;
  135. top: 0;
  136. height:100vh;
  137. width: 230px;
  138. right: 0;
  139. margin-right: 0 !important;
  140. z-index: 1032;
  141. visibility: visible;
  142. background-color: #fff;
  143. overflow-y: visible;
  144. border-top: none;
  145. text-align: left;
  146. padding-right: 0;
  147. padding-left: 0;
  148. max-height: none !important;
  149. -webkit-transform: translate3d(230px, 0, 0);
  150. transform: translate3d(230px, 0, 0);
  151. transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1);
  152. }
  153. }
  154. @media (min-width: 992px) {
  155. .navbar-collapse {
  156. display: flex !important;
  157. flex-basis: auto;
  158. }
  159. }
  160. [type="reset"],
  161. [type="submit"],
  162. button,
  163. html [type="button"] {
  164. -webkit-appearance: button;
  165. }
  166. .navbar-toggler {
  167. padding: 0.25rem 0.75rem;
  168. font-size: 1.25rem;
  169. line-height: 1;
  170. background-color: transparent;
  171. border: 1px solid transparent;
  172. border-radius: 0.25rem;
  173. outline: none;
  174. }
  175. .navbar-toggler:not(:disabled):not(.disabled) {
  176. cursor: pointer;
  177. }
  178. @media (min-width: 992px) {
  179. .navbar-toggler {
  180. display: none;
  181. }
  182. }
  183. @media (max-width: 991px) {
  184. .navbar.navbar-transparent .navbar-toggler .navbar-toggler-icon {
  185. background-color: #fff;
  186. }
  187. }
  188. .navbar .navbar-toggler .navbar-toggler-icon + .navbar-toggler-icon {
  189. margin-top: 4px;
  190. }
  191. .navbar .navbar-toggler .navbar-toggler-icon {
  192. width: 22px;
  193. height: 2px;
  194. vertical-align: middle;
  195. outline: 0;
  196. display: block;
  197. border-radius: 1px;
  198. }
  199. .navbar .navbar-toggler .navbar-toggler-icon {
  200. background-color: #555;
  201. }
  202. .navbar-toggler-icon {
  203. display: inline-block;
  204. width: 1.5em;
  205. height: 1.5em;
  206. vertical-align: middle;
  207. content: "";
  208. background: no-repeat 50%;
  209. background-size: 100% 100%;
  210. }
  211. .navbar-nav {
  212. display: flex;
  213. flex-direction: column;
  214. padding-left: 0;
  215. margin-bottom: 0;
  216. list-style: none;
  217. text-align: center;
  218. }
  219. @media (min-width: 991px) {
  220. .navbar .navbar-nav {
  221. align-items: center;
  222. }
  223. }
  224. @media (min-width: 992px) {
  225. .navbar-nav {
  226. flex-direction: row;
  227. }
  228. }
  229. @media (max-width: 991px) {
  230. .navbar-nav {
  231. margin-top:70px;
  232. text-align: right;
  233. }
  234. }
  235. .ml-auto,
  236. .mx-auto {
  237. margin-left: auto !important;
  238. }
  239. .collapsing,
  240. .dropdown,
  241. .dropup {
  242. position: relative;
  243. }
  244. .dropdown-menu {
  245. position: absolute;
  246. top: 100%;
  247. left: 0;
  248. z-index: 1000;
  249. float: left;
  250. min-width: 10rem;
  251. padding: 0.5rem 0;
  252. margin: 0.125rem 0 0;
  253. font-size: 1rem;
  254. color: #212529;
  255. text-align: left;
  256. list-style: none;
  257. background-color: #fff;
  258. background-clip: padding-box;
  259. border: 1px solid rgba(0, 0, 0, 0.15);
  260. border-radius: 0.25rem;
  261. box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2),
  262. 0 1px 5px 0 rgba(0, 0, 0, 0.12);
  263. display: none;
  264. padding: 0.3125rem 0;
  265. border: 0;
  266. opacity: 0;
  267. transform: scale(0);
  268. transform-origin: 0 0;
  269. will-change: transform, opacity;
  270. transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1),
  271. opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
  272. box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
  273. }
  274. .navbar-nav .dropdown-menu {
  275. float: none;
  276. }
  277. @media (min-width: 992px) {
  278. .navbar-nav .dropdown-menu {
  279. position: absolute;
  280. }
  281. }
  282. @media (min-width: 992px) {
  283. .navbar-nav .nav-link {
  284. padding-right: 0.5rem;
  285. padding-left: 0.5rem;
  286. }
  287. }
  288. .navbar .navbar-nav .nav-item .nav-link {
  289. padding: 15px;
  290. // text-align: center;
  291. height: 20px;
  292. vertical-align: middle;
  293. color: inherit;
  294. display: block;
  295. }
  296. .nav-link > span {
  297. /* font-size: 1.2rem; */
  298. height: 100%;
  299. vertical-align: middle;
  300. display: inline-block;
  301. line-height: 20px;
  302. }
  303. </style>