第八课:自定义样式

别急,咱们快做完了,实际上应用基本上已经完成了,这节课之后所有功能将会被完善,应用看起来也会漂亮多了。
如果你记得的话,在基础部分我们学习过添加样式的几种方式。如果你跳过了那个部分,或者对我讲的不是很了解,建议你回头去看一遍基础部分的主题定制部分。
> 修改 theme/variables.scss 里的命名颜色变量:

  1. $colors: (
  2. primary: #387ef5,
  3. secondary: #32db64,
  4. danger: #fa2d18,
  5. light: #f4f4f4,
  6. dark: #222,
  7. favorite: #69BB7B
  8. );
  9. $item-ios-padding-left: 0;
  10. $item-md-padding-left: 0;
  11. $item-ios-padding-right: 0;
  12. $item-md-padding-right: 0;
  13. $item-ios-padding-top: 0;
  14. $item-md-padding-top: 0;
  15. $item-ios-padding-bottom: 0;
  16. $item-md-padding-bottom: 0;
  17. $list-ios-margin-bottom: 0px;
  18. $list-ios-margin-top: 0px;
  19. $list-md-margin-bottom: 0px;
  20. $list-md-margin-top: 0px;

首先,我们重新定义了应用模板中会用到的颜色。记住,这些颜色可以这样在模板中使用:
然后我们覆盖了大量默认的SASS变量,这些变量基本就是移除列表和列表项的间隔和边距这样照片就可以填满整个可用区间了。
继续前进来到了组件指定样式。我们将稍稍的改动模板来纳入一些自定义的类,并在每个组件对应的.scss中定义好这些类。我们先从主页开始。
> 修改 src/pages/home/home.html 如下:

  1. <ion-header>
  2. <ion-navbar color="danger">
  3. <ion-title>
  4. <img src="assets/images/logo.png" />
  5. </ion-title>
  6. <ion-buttons end>
  7. <button ion-button icon-only (click)="playSlideshow()"><ion-icon name="play"></ion-icon></button>
  8. </ion-buttons>
  9. </ion-navbar>
  10. </ion-header>
  11. <ion-content>
  12. <ion-list>
  13. <button ion-item *ngIf="!photoTaken" detail-none (click)="takePhoto()">
  14. <img src="assets/images/smile.png" class="list-photo" />
  15. </button>
  16. <ion-item-sliding *ngFor="let photo of photos">
  17. <ion-item>
  18. <img [src]="photo.image" class="list-photo" />
  19. <ion-badge item-right color="light">{{photo.date | daysAgo}} days ago</ion-badge>
  20. </ion-item>
  21. <ion-item-options>
  22. <button ion-button icon-only color="light" (click)="removePhoto(photo)"><ion-icon
  23. name="trash"></ion-icon></button>
  24. </ion-item-options>
  25. </ion-item-sliding>
  26. </ion-list>
  27. </ion-content>

> 修改 src/pages/home/home.scss 如下:

  1. page-home {
  2. .scroll-content {
  3. background-color: #222222;
  4. }
  5. .logo {
  6. max-height: 39px;
  7. }
  8. .list-photo {
  9. width: 100%;
  10. height: auto;
  11. }
  12. ion-badge {
  13. position: absolute;
  14. right: 10px;
  15. top: 5px;
  16. }
  17. }

这里没啥值得激动的事情。我们确保了照片填满整个宽度,给content区域和列表项设置了一个黑色的背景色,使用绝对定位让我们的“days ago”显示到对应的地方。
现在来看看slideshow页面。
> 修改 src/pages/slideshow/slideshow.scss 为如下:

  1. page-slideshow {
  2. .scroll-content {
  3. background-color: #222222;
  4. }
  5. .image-container {
  6. position: absolute;
  7. top: 0;
  8. bottom: 0;
  9. left: 0;
  10. right: 0;
  11. display: flex;
  12. justify-content: center;
  13. align-items: center;
  14. }
  15. #imagePlayer {
  16. width: 100%;
  17. height: auto;
  18. vertical-align: middle;
  19. }
  20. }

这里的样式只是让照片显示在水平和垂直方向上都居中(这不是看起来的那么简单!)。我们用flexbox耍了点小花招才实现。Flexbox稍微有点高级,如果你想看看他的入门介绍的话,请看这个
如果现在看一眼应用的话,现在应该是这样的:
效果图

你也看到了,我们并没有加很多的样式,但是整个应用看起来好看多了。