frontend.less 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995
  1. @import (reference) "bootstrap-less/mixins.less";
  2. @import (reference) "bootstrap-less/variables.less";
  3. @import "lesshat.less";
  4. @import url("../css/bootstrap.css");
  5. @import url("../css/fastadmin.css");
  6. @import url("../css/iconfont.css");
  7. @import url("../libs/font-awesome/css/font-awesome.min.css");
  8. @import url("../libs/toastr/toastr.min.css");
  9. @import url("../libs/fastadmin-layer/dist/theme/default/layer.css");
  10. @import url("../libs/bootstrap-table/dist/bootstrap-table.min.css");
  11. @import url("../libs/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css");
  12. @import url("../libs/bootstrap-daterangepicker/daterangepicker.css");
  13. @import url("../libs/nice-validator/dist/jquery.validator.css");
  14. @import url("../libs/bootstrap-select/dist/css/bootstrap-select.min.css");
  15. @import url("../libs/fastadmin-selectpage/selectpage.css");
  16. @import url("../libs/bootstrap-slider/slider.css");
  17. @import "tinycss.less";
  18. @primary-color: #007bff;
  19. //@primary-color: #2d76d9;
  20. @input-min-height: 33px;
  21. .clearfix() {
  22. &:before,
  23. &:after {
  24. content: " ";
  25. display: table;
  26. }
  27. &:after {
  28. clear: both;
  29. }
  30. }
  31. html,
  32. body {
  33. height: 100%;
  34. }
  35. body {
  36. padding-top: 60px;
  37. font-size: 14px;
  38. background: #f4f6f8;
  39. height: 100%;
  40. line-height: 1.5715;
  41. -webkit-font-smoothing: antialiased;
  42. text-rendering: optimizeLegibility;
  43. -moz-osx-font-smoothing: grayscale;
  44. font-feature-settings: 'liga';
  45. -webkit-text-size-adjust: 100%;
  46. font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Ubuntu, Helvetica Neue, Helvetica, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei UI, Microsoft YaHei, Source Han Sans CN, sans-serif;
  47. font-weight: 400;
  48. color: #616161;
  49. }
  50. a {
  51. color: @primary-color;
  52. &:hover, &:focus {
  53. color: @primary-color;
  54. }
  55. }
  56. .navbar-white {
  57. background-color: #fff;
  58. border-color: #fff;
  59. box-shadow: 0 1px 8px rgba(0, 0, 0, .08);
  60. .dropdown-menu {
  61. border-radius: 5px;
  62. //box-shadow: 0 1px 8px rgba(0, 0, 0, .08);
  63. .box-shadow(0px 20px 30px rgba(83, 88, 93, 0.05), 0px 0px 30px rgba(83, 88, 93, 0.1));
  64. }
  65. }
  66. @media (min-width: 768px) {
  67. .navbar-default {
  68. .navbar-brand {
  69. height: 60px;
  70. line-height: 27px;
  71. }
  72. .navbar-nav {
  73. > li > a {
  74. height: 60px;
  75. line-height: 27px;
  76. }
  77. }
  78. }
  79. .navbar-white .navbar-nav {
  80. > li > a {
  81. height: 60px;
  82. line-height: 27px;
  83. color: #555;
  84. &:hover, &:focus {
  85. color: @primary-color;
  86. }
  87. }
  88. > .active > a {
  89. &, &:hover, &:focus {
  90. background-color: inherit;
  91. color: @primary-color;
  92. }
  93. }
  94. }
  95. }
  96. @media (max-width: 768px) {
  97. body {
  98. padding-top: 50px;
  99. }
  100. .navbar-white {
  101. .navbar-nav .open .dropdown-menu {
  102. background: #eee;
  103. }
  104. .navbar-toggle {
  105. border-color: #ddd;
  106. .icon-bar {
  107. background-color: #888;
  108. }
  109. }
  110. .navbar-collapse.in {
  111. border-top-color: #f5f5f5;
  112. }
  113. }
  114. }
  115. #header-navbar {
  116. .dropdown:hover .dropdown-menu {
  117. display: block;
  118. margin-top: 0;
  119. }
  120. li.dropdown ul.dropdown-menu {
  121. min-width: 100px;
  122. }
  123. }
  124. .navbar {
  125. border: none;
  126. }
  127. .navbar-nav {
  128. > li > a {
  129. font-size: 14px;
  130. }
  131. }
  132. .dropdown-menu {
  133. > li > a {
  134. font-size: 14px;
  135. padding: 5px 20px;
  136. }
  137. }
  138. .dropdown-menu {
  139. border-radius: 2px;
  140. border: 0px;
  141. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
  142. padding: 5px 0px;
  143. li a {
  144. padding-top: 10px !important;
  145. padding-bottom: 10px;
  146. }
  147. }
  148. .dropdown-menu > li > a {
  149. font-weight: 400;
  150. color: #444;
  151. padding: 5px 15px;
  152. padding-bottom: 10px;
  153. &:hover, &:focus {
  154. text-decoration: none;
  155. color: #777;
  156. background: rgba(0, 0, 0, 0.05);
  157. }
  158. }
  159. .toast-top-center {
  160. top: 60px;
  161. }
  162. #toast-container > div {
  163. .box-shadow(none);
  164. }
  165. /*修复nice-validator和summernote的编辑框冲突*/
  166. .nice-validator .note-editor .note-editing-area .note-editable {
  167. display: inherit;
  168. }
  169. /*预览区域*/
  170. .plupload-preview, .faupload-preview {
  171. padding: 0 10px;
  172. margin-bottom: 0;
  173. li {
  174. margin-top: 10px;
  175. }
  176. .thumbnail {
  177. margin-bottom: 10px;
  178. }
  179. a {
  180. display: block;
  181. &:first-child {
  182. height: 90px;
  183. }
  184. img {
  185. height: 80px;
  186. object-fit: cover;
  187. }
  188. }
  189. }
  190. .layui-layer-content {
  191. clear: both;
  192. }
  193. .layui-layer-fast {
  194. .layui-layer-content {
  195. > table.table {
  196. margin-bottom: 0;
  197. }
  198. }
  199. .layui-layer-confirm {
  200. display: none;
  201. position: absolute;
  202. width: 100%;
  203. height: 100%;
  204. left: 0;
  205. bottom: 0;
  206. border: 1px solid transparent;
  207. background: transparent;
  208. color: transparent;
  209. &:focus {
  210. border: 1px solid #444c69;
  211. .border-radius(2px);
  212. }
  213. &:focus-visible {
  214. outline: 0;
  215. }
  216. }
  217. }
  218. .layui-layer-fast-msg {
  219. min-width: 100px;
  220. border-radius: 2px;
  221. }
  222. .input-group > .msg-box.n-right {
  223. position: absolute;
  224. }
  225. .bootstrap-select {
  226. .status {
  227. background: #f0f0f0;
  228. clear: both;
  229. color: #999;
  230. font-size: 12px;
  231. font-weight: 500;
  232. line-height: 1;
  233. margin-bottom: -5px;
  234. padding: 10px 20px;
  235. }
  236. .msg-box {
  237. position: absolute;
  238. right: 0;
  239. top: 0;
  240. }
  241. .bs-placeholder {
  242. min-height: @input-min-height;
  243. }
  244. min-height: @input-min-height;
  245. }
  246. select.bs-select-hidden, select.selectpicker {
  247. display: inherit !important;
  248. max-height: @input-min-height;
  249. overflow: hidden;
  250. &[multiple] {
  251. height: 31px;
  252. //visibility: hidden;
  253. padding: 0;
  254. background: #f4f4f4;
  255. option {
  256. color: #f4f4f4;
  257. .opacity(0);
  258. }
  259. @media not all and (min-resolution: .001dpcm) {
  260. @supports (-webkit-appearance:none) {
  261. visibility: hidden;
  262. }
  263. }
  264. }
  265. }
  266. input.selectpage {
  267. color: transparent;
  268. pointer-events: none;
  269. }
  270. .sp_container {
  271. input.selectpage {
  272. color: inherit;
  273. pointer-events: inherit;
  274. padding-left: 12px;
  275. padding-right: 12px;
  276. }
  277. .sp_element_box {
  278. input.selectpage {
  279. padding-left: 0;
  280. padding-right: 0;
  281. }
  282. li:first-child {
  283. input.selectpage {
  284. padding-left: 9px;
  285. padding-right: 9px;
  286. }
  287. }
  288. }
  289. min-height: @input-min-height;
  290. }
  291. /*修复radio和checkbox样式对齐*/
  292. .radio, .checkbox {
  293. > label {
  294. margin-right: 10px;
  295. > input {
  296. margin: 5px 0 0;
  297. }
  298. }
  299. }
  300. form.form-horizontal .control-label {
  301. font-weight: normal;
  302. }
  303. .panel-default {
  304. padding: 0 15px;
  305. border: none;
  306. .box-shadow(none);
  307. > .panel-heading {
  308. position: relative;
  309. font-size: 16px;
  310. padding: 15px 0;
  311. background: #fff;
  312. border-bottom: 1px solid #f5f5f5;
  313. }
  314. h2.page-header {
  315. margin-top: 0;
  316. height: 50px;
  317. line-height: 31px;
  318. font-size: 18px;
  319. padding: 10px 0;
  320. border-bottom: 1px solid #f5f5f5;
  321. }
  322. > .panel-heading {
  323. .panel-title {
  324. color: #313131;
  325. > i {
  326. display: none;
  327. }
  328. }
  329. .more {
  330. position: absolute;
  331. top: 13px;
  332. right: 0;
  333. display: block;
  334. color: #919191;
  335. .transition(all 0.3s ease);
  336. }
  337. .more:hover {
  338. color: #616161;
  339. .transition(all 0.3s ease);
  340. }
  341. .panel-bar {
  342. position: absolute;
  343. top: 7px;
  344. right: 0;
  345. display: block;
  346. }
  347. }
  348. }
  349. @media (max-width: 767px) {
  350. .panel-default {
  351. padding: 0 10px;
  352. > .panel-heading {
  353. padding: 10px 0;
  354. .more {
  355. top: 8px;
  356. }
  357. }
  358. }
  359. > .panel-body {
  360. position: relative;
  361. padding: 15px 0;
  362. }
  363. > .panel-footer {
  364. padding: 15px 0;
  365. background: none;
  366. }
  367. }
  368. .panel-gray {
  369. .box-shadow(0 2px 4px rgba(0, 0, 0, 0.08));
  370. > .panel-heading {
  371. background-color: #f5f5f5;
  372. color: #919191;
  373. }
  374. > .panel-body {
  375. color: #919191;
  376. background: #fff;
  377. border-bottom-left-radius: 4px;
  378. border-bottom-right-radius: 4px;
  379. }
  380. }
  381. .panel-page {
  382. padding: 45px 50px 50px;
  383. min-height: 500px;
  384. .panel-heading {
  385. background: transparent;
  386. border-bottom: none;
  387. margin: 0 0 30px 0;
  388. padding: 0;
  389. h2 {
  390. font-size: 25px;
  391. margin-top: 0;
  392. }
  393. }
  394. }
  395. @media (max-width: 767px) {
  396. .panel-page {
  397. padding: 15px;
  398. min-height: 300px;
  399. }
  400. .n-bootstrap {
  401. .n-right {
  402. margin-top: 0;
  403. top: -20px;
  404. position: absolute;
  405. left: 0;
  406. text-align: right;
  407. width: 100%;
  408. .msg-wrap {
  409. position: relative;
  410. }
  411. }
  412. .col-xs-12 > .n-right {
  413. .msg-wrap {
  414. margin-right: 15px;
  415. }
  416. }
  417. }
  418. }
  419. .nav-pills > li {
  420. margin-right: 5px;
  421. > a {
  422. padding: 10px 15px;
  423. color: #616161;
  424. .transition(all 0.3s ease);
  425. &:hover {
  426. .transition(all 0.3s ease);
  427. background-color: #f5f5f5;
  428. }
  429. }
  430. &.active > a {
  431. border: none;
  432. color: #fff;
  433. background: @primary-color;
  434. .transition(all 0.3s ease);
  435. border-radius: 3px;
  436. }
  437. }
  438. .nav-pills.nav-pills-sm > li > a {
  439. font-size: 12px;
  440. line-height: 1.5;
  441. padding: 4px 13px;
  442. }
  443. .fieldlist dd {
  444. display: block;
  445. margin: 5px 0;
  446. input {
  447. display: inline-block;
  448. width: 300px;
  449. }
  450. input:first-child {
  451. width: 110px;
  452. }
  453. ins {
  454. width: 110px;
  455. display: inline-block;
  456. text-decoration: none;
  457. }
  458. }
  459. /* 弹窗中的表单 */
  460. .form-layer {
  461. height: 100%;
  462. min-height: 150px;
  463. min-width: 300px;
  464. .form-body {
  465. width: 100%;
  466. overflow: auto;
  467. top: 0;
  468. position: absolute;
  469. z-index: 10;
  470. bottom: 50px;
  471. padding: 15px;
  472. }
  473. .form-footer {
  474. height: 50px;
  475. line-height: 50px;
  476. background-color: #ecf0f1;
  477. width: 100%;
  478. position: absolute;
  479. z-index: 200;
  480. bottom: 0;
  481. margin: 0;
  482. }
  483. .form-footer .form-group {
  484. margin-left: 0;
  485. margin-right: 0;
  486. }
  487. }
  488. footer.footer {
  489. width: 100%;
  490. color: #aaa;
  491. background: #555;
  492. margin-top: 25px;
  493. .copyright {
  494. line-height: 50px;
  495. text-align: center;
  496. background: #393939;
  497. margin: 0;
  498. a {
  499. color: #aaa;
  500. &:hover {
  501. color: #fff;
  502. }
  503. }
  504. }
  505. }
  506. .rotate {
  507. .transition-duration(0.8s);
  508. .transition-property(transform);
  509. overflow: hidden;
  510. &:hover {
  511. .transform(rotate(360deg));
  512. }
  513. }
  514. .user-section {
  515. background: #fff;
  516. padding: 15px;
  517. margin-bottom: 20px;
  518. .border-radius(4px);
  519. }
  520. .login-section {
  521. margin: 50px auto;
  522. width: 460px;
  523. .border-radius(0);
  524. &.login-section-weixin {
  525. min-height: 315px;
  526. }
  527. .logon-tab {
  528. margin: -15px -15px 0 -15px;
  529. > a {
  530. display: block;
  531. padding: 20px;
  532. float: left;
  533. width: 50%;
  534. font-size: 16px;
  535. text-align: center;
  536. color: #616161;
  537. background-color: #efefef;
  538. .transition(all 0.3s ease);
  539. &:hover {
  540. background-color: #fafafa;
  541. .transition(all 0.3s ease);
  542. }
  543. &.active {
  544. background-color: #fff;
  545. .transition(all 0.3s ease);
  546. }
  547. }
  548. }
  549. .login-main {
  550. padding: 40px 45px 20px 45px;
  551. }
  552. }
  553. .login-section, .form-section {
  554. .n-bootstrap {
  555. .controls {
  556. position: relative;
  557. }
  558. .input-group {
  559. position: inherit;
  560. }
  561. .n-right {
  562. margin-top: 0;
  563. top: -20px;
  564. position: absolute;
  565. left: 0;
  566. text-align: right;
  567. width: 100%;
  568. .msg-wrap {
  569. position: relative;
  570. }
  571. }
  572. }
  573. }
  574. main.content {
  575. width: 100%;
  576. overflow: auto;
  577. padding: 15px;
  578. padding-top: 20px;
  579. min-height: calc(~ '100vh - 135px');
  580. }
  581. .sidenav {
  582. padding: 20px 0 10px 0;
  583. margin-bottom: 20px;
  584. background-color: #fff;
  585. .list-group {
  586. &:last-child {
  587. margin-bottom: 0;
  588. }
  589. .list-group-heading {
  590. list-style-type: none;
  591. color: #919191;
  592. margin-bottom: 10px;
  593. margin-left: 35px;
  594. font-size: 14px;
  595. }
  596. .list-group-item {
  597. .border-radius(0);
  598. border: none;
  599. padding: 0;
  600. border-left: 2px solid transparent;
  601. &:last-child, &:first-child {
  602. .border-radius(0);
  603. }
  604. &:hover {
  605. border-left: 2px solid rgba(245, 245, 245, 0.38);
  606. background-color: rgba(245, 245, 245, 0.38);
  607. }
  608. > a {
  609. display: block;
  610. color: #616161;
  611. padding: 10px 15px 10px 35px;
  612. }
  613. &.active {
  614. border-left: 2px solid @primary-color;
  615. background-color: rgba(245, 245, 245, 0.38);
  616. > a {
  617. color: @primary-color;
  618. }
  619. }
  620. }
  621. }
  622. }
  623. .nav li {
  624. .avatar-text, .avatar-img {
  625. height: 30px;
  626. width: 30px;
  627. line-height: 30px;
  628. font-size: 14px;
  629. }
  630. .avatar-img {
  631. font-size: 0;
  632. img {
  633. border-radius: 30px;
  634. width: 30px;
  635. height: 30px;
  636. }
  637. }
  638. }
  639. .avatar-text, .avatar-img {
  640. display: inline-block;
  641. box-sizing: content-box;
  642. color: #fff;
  643. text-align: center;
  644. vertical-align: top;
  645. background-color: #e8ecf3;
  646. font-weight: normal;
  647. width: 48px;
  648. height: 48px;
  649. border-radius: 48px;
  650. font-size: 24px;
  651. line-height: 48px;
  652. }
  653. .avatar-img {
  654. font-size: 0;
  655. img {
  656. border-radius: 48px;
  657. width: 48px;
  658. height: 48px;
  659. }
  660. }
  661. @media (max-width: 767px) {
  662. main.content {
  663. position: inherit;
  664. padding: 15px 0;
  665. }
  666. .login-section {
  667. width: 100%;
  668. margin: 20px auto;
  669. .login-main {
  670. padding: 20px 0 0 0;
  671. }
  672. }
  673. footer.footer {
  674. position: inherit;
  675. .copyright {
  676. padding: 10px;
  677. line-height: 30px;
  678. }
  679. }
  680. }
  681. .pager {
  682. .pagination {
  683. margin: 0;
  684. }
  685. li {
  686. margin: 0 .4em;
  687. display: inline-block;
  688. &:first-child, &:last-child {
  689. > a, > span {
  690. padding: .5em 1.2em;
  691. }
  692. }
  693. }
  694. }
  695. .pager li > a, .pager li > span {
  696. background: none;
  697. border: 1px solid #e6e6e6;
  698. border-radius: 0.25em;
  699. padding: .5em .93em;
  700. font-size: 14px;
  701. }
  702. .jumpto input {
  703. width: 50px;
  704. margin-left: 5px;
  705. margin-right: 5px;
  706. text-align: center;
  707. display: inline-block;
  708. }
  709. .fixed-columns, .fixed-columns-right {
  710. position: absolute;
  711. top: 0;
  712. height: 100%;
  713. min-height: 41px;
  714. background-color: #fff;
  715. box-sizing: border-box;
  716. z-index: 2;
  717. box-shadow: 0 -1px 8px rgba(0, 0, 0, .08);
  718. .fixed-table-body {
  719. min-height: 41px;
  720. overflow-x: hidden !important
  721. }
  722. }
  723. .fixed-columns {
  724. left: 0;
  725. }
  726. .fixed-columns-right {
  727. right: 0;
  728. box-shadow: -1px 0 8px rgba(0, 0, 0, .08);
  729. }
  730. .bootstrap-tagsinput {
  731. background-color: #fff;
  732. border: 1px solid #ccc;
  733. box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  734. display: inline-block;
  735. padding: 4px 6px;
  736. //margin-bottom: 10px;
  737. color: #555;
  738. vertical-align: middle;
  739. //border-radius: 4px;
  740. //max-width: 100%;
  741. width: 100%;
  742. line-height: 22px;
  743. cursor: text;
  744. input {
  745. border: none;
  746. box-shadow: none;
  747. outline: none;
  748. background-color: transparent;
  749. padding: 0;
  750. margin: 0;
  751. font-size: 13px;
  752. //width: auto !important;
  753. width: 80px;
  754. max-width: inherit;
  755. &:focus {
  756. border: none;
  757. box-shadow: none;
  758. }
  759. }
  760. .tagsinput-text {
  761. display: inline-block;
  762. overflow: auto;
  763. visibility: hidden;
  764. height: 1px;
  765. position: absolute;
  766. bottom: -1px;
  767. left: 0;
  768. }
  769. .tag {
  770. margin-right: 2px;
  771. color: white;
  772. [data-role="remove"] {
  773. margin-left: 5px;
  774. cursor: pointer;
  775. &:after {
  776. content: "x";
  777. padding: 0px 2px;
  778. }
  779. &:hover {
  780. background-color: rgba(255, 255, 255, .16);
  781. }
  782. }
  783. }
  784. }
  785. .autocomplete-suggestions {
  786. border-radius: 2px;
  787. background: #FFF;
  788. overflow: auto;
  789. min-width: 200px;
  790. .box-shadow(0px 20px 30px rgba(83, 88, 93, 0.05), 0px 0px 30px rgba(83, 88, 93, 0.1));
  791. strong {
  792. font-weight: normal;
  793. color: red;
  794. }
  795. .autocomplete-suggestion {
  796. padding: 5px 10px;
  797. white-space: nowrap;
  798. overflow: hidden;
  799. }
  800. .autocomplete-selected {
  801. background: #F0F0F0;
  802. }
  803. .autocomplete-group {
  804. padding: 5px 10px;
  805. strong {
  806. display: block;
  807. border-bottom: 1px solid #ddd;
  808. }
  809. }
  810. }
  811. .autocontent {
  812. position: relative;
  813. .autocontent-caret {
  814. position: absolute;
  815. right: 0;
  816. top: 0;
  817. height: 100%;
  818. line-height: 1;
  819. background: #eee;
  820. color: #ddd;
  821. vertical-align: middle;
  822. padding: 0 5px;
  823. display: flex;
  824. justify-content: center;
  825. align-items: center;
  826. cursor: pointer;
  827. &:hover {
  828. color: #ccc;
  829. }
  830. }
  831. }