Dành cho quảng cáo
liên hệ: groupviet@gmail.com

[Theme Development] Phần 8: Viết CSS cho giao diện Mobile-first phần cuối

Admin | 3:08 PM | 0 comments

Chào mọi người, mấy hôm nay cũng lu bu mấy việc nên cũng không thể viết bài đăng được, và bây giờ mình xin trở lại bằng việc tiếp tục bài hướng dẫn viết CSS cho giao diện để tiến hànhtự làm một theme WordPress. Và bài này cũng là phần cuối của bài hướng dẫn viết CSS, tức là viết CSS cho giao diện Desktop sau khi tạo xong hai giao diện dành cho Mobile và Tablet.


Về phần Desktop thì chúng ta sẽ không cần viết quá nhiều lắm đâu, vì như mình đã mô tả ngay từ đầu là chúng ta viết theo quy trình Mobile-first nên các loại giao diện về sau sẽ thừa hưởng những yếu tố của bản giao diện trước mà nếu cần thay đổi gì thì chúng ta chỉ cần viết thêm hoặc đè lên giá trị cũ bằng cách viết thêm !important sau mỗi thuộc tính cần đè.



Như hai lần trước, bạn sẽ cần mở file desktop.less lên và khai báo đầy đủ những đoạn sau:













1

2

3

4

5


@media screen and (min-width: 48em) {

        @import "../less_file/grid.less";

        @import "../less_file/variables.less";

        @total-width: 100%;

}




Khỏi cần giải thích chắc bạn cũng hiểu ý nghĩa của các đoạn trên rồi đúng không nào? Nếu bạn chưa hiểu thì xem lại phần 7 và 8 nhé. :D


Bây giờ ngay dưới đọan @total-width: 100%;, bạn tiếp tục viết thêm đoạn này vào để tùy chỉnh kích thước chữ về 94% để chữ nó to ra 1 xíu trên giao diện desktop.













1

2

3


body {

        font-size: 94% !important;

}




Bây giờ việc quan trọng nhất mình cần làm trên giao diện desktop đó là chuyển menu từ dạng cũ sang dạng dành cho desktop, tức là mình sẽ làm 1 kiểu menu bình thường chứ không cần hiệu ứng gì cả. Đầu tiên ta có:













01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39


#header {

        width: 100%;

        margin: 0;

        .site-title {

                .push(1); //Thêm margin-left

         }

        .header-menu {

                .push(2); //Thêm margin-left

                .column(6,12);

                .show-menu { display:none !important }

                        & > ul {

                        display: block !important;

                        position: relative;

                                &:after {

                                        content: " ";

                                        clear: both;

                                        display: block;

                                }

                        li {

                                display: inline;

                                background: transparent !important;

                                a:hover { font-weight: normal !important;}


                                ul { // Menu con

                                        display: none; //Ẩn menu con khi mặc định.

                                        position: absolute;

                                        top: 35%; left: 15%;

                                        li {

                                                a { font-size: 0.8em }

                                        }

                                 }


                                &:hover ul { //Rê chuột vào menu

                                        display: block; //Hiện menu con

                                }

                        } // end .header-menu ul li

                } // end .header-menu ul

        } // end .header-menu

} // end #header




Cho dễ hiểu, mình xin giải thích từng dòng cho luôn nhé, dòng nào không quan trọng mình xin bỏ qua:




  • Dòng 2: Dòng này là mình đưa tổng chiều rộng của phần #header về 100% bởi vì ở 2 phần trước mình đặt cho nó hàm .row(12) nên nó sẽ có kích thước là 103%, gây thừa trang.

  • Dòng 5: Mình cần một đoạn margin bên tay trái để tạo khoảng trống cho nó.

  • Dòng 8: Cũng là thêm margin nhưng nhiều hơn so với đoạn 5.

  • Dòng 9: Đưa menu qua nằm bên phải của trang, mình không làm bước này cho .site-title là vì nó có sẵn rồi, mình đã làm ở phần 7 đó thôi.

  • Dòng 10: Cho cái nút Menu để mình ấn vào ẩn đi, vì không cần dùng tới nữa.

  • Dòng 11 và dòng 18: Các đoạn code trong phần này sẽ được viết cho class .header-menu > ul li. Bạn có thể xem output CSS.

  • Dòng 12: Đưa cả đối tượng này về dạng block, từ đó phần này cũng sẽ được hiển thị lên. Bởi vì ở phần 6 ta viết jQuery cho nó thì trình duyệt đã tự thêm display: none cho nó ở mặc định.

  • Dòng 13: Mục đích ra thêm position cho chỗ này là vì tí nữa ta cần viết position: absolute cho menu con. Lúc đó vị trí menu con sẽ dựa vào đối tượng có position: relative gần nó nhất để hiển thị chính xác chứ không trôi đi lung tung.

  • Dòng 20: Đưa các đối tượng trong menu nằm thẳng hàng mà không cần float.

  • Dòng 21: Xóa bỏ background màu đỏ.

  • Dòng 22: Xóa bỏ hiệu ứng làm đậm chữ khi rê chuột vào menu.

  • Từ 24 tới 31: Các đoạn trong đây sẽ viết cho toàn bộ menu con.

  • Dòng 25: Cho nó ẩn đi.

  • Dòng 26: Thiết lập vị trí menu con nằm trong block của menu mẹ. Xem giải thích dòng 13.

  • Dòng 27: Căn chỉnh vị trí của menu con.

  • Dòng 29: Thu nhỏ font chữ của menu con.

  • Dòng 34: Cho menu con hiển thị khi rê chuột vào menu mẹ.


Sau khi Save lại, chúng ta có kết quả trông như thế này


Header cho giao diện Desktop


Kế tiếp, phần toàn bộ nội dung trong trang ta chỉ có một đoạn CSS như thế này:













01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27


#wrapper {

        overflow: hidden;

        margin-bottom: 1em !important;

        width: 75%;

        margin: 0 auto;

        .featured-post {

                padding: 0;

        }

        .content {

                .row(12);

                .content-main {

                        .column(8,12);

                        .post-below { display: block }

                } //end .content-main


                /*--SIDEBAR--*/

                .sidebar {

                        .column(4,12);

                        clear: none;

                        padding-top: 0;


                        .recent-post {

                                li { .column(12); }

                        }

                } //end .sidebar

        } //end .content

} //end #wrapper




Trong đọan trên không có gì khó hiểu phải không nào, với các kiến thức CSS cơ bản thì bạn có thể hiểu rất rõ mà mình không cần phải giải thích thêm cho dài dòng.


Kết quả ở phần nội dung ta có thế này. Xin lỗi mình không thể chụp hết vì cái Snagit của mình có tí vấn đề :(


Giao diện nội dung trên Desktop


Và cuối cùng ta chỉ cần một vài đoạn CSS ngắn ngủn để chia cột lại phần #footer thôi vì ở phần đó ta không cần làm thêm gì trên giao diện desktop.













1

2

3

4

5

6

7


/*--FOOTER--*/


#footer {

        overflow: hidden;

        .col-1, .col-2 { .column(3,12) }

        .col-3 { .column(6,12); clear: none }

}




Kết quả


Giao diện #footer trên Desktop


Ta tự hỏi, phần này ta viết CSS bằng LESS thấy nó ngắn quá vậy khi in ra CSS thì nó trông như thế nào nhỉ? Cũng ngắn thôi..












Toàn bộ code CSS trong phần 8

001

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

017

018

019

020

021

022

023

024

025

026

027

028

029

030

031

032

033

034

035

036

037

038

039

040

041

042

043

044

045

046

047

048

049

050

051

052

053

054

055

056

057

058

059

060

061

062

063

064

065

066

067

068

069

070

071

072

073

074

075

076

077

078

079

080

081

082

083

084

085

086

087

088

089

090

091

092

093

094

095

096

097

098

099

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135


@media screen and (min-width: 48em) {

  body {

    width: 100%;

    *zoom: 1;

  }

  body:before,

  body:after {

    content: "";

    display: table;

  }

  body:after {

    clear: both;

  }

  /*

        # Thiết lập các biến cần dùng thường xuyên

  */

  /*--COLOR--*/

  /*--MISC--*/

  body {

    font-size: 94% !important;

  }

  /*--Menu--*/

  #header {

    width: 100%;

    margin: 0;

  }

  #header .site-title {

    margin-left: 9.374999999999998%;

  }

  #header .header-menu {

    margin-left: 17.708333333333332%;

    display: inline;

    float: left;

    width: 47.91666666666667%;

    margin: 0 1.0416666666666665%;

  }

  #header .header-menu .show-menu {

    display: none !important;

  }

  #header .header-menu > ul {

    display: block !important;

    position: relative;

  }

  #header .header-menu > ul:after {

    content: " ";

    clear: both;

    display: block;

  }

  #header .header-menu > ul li {

    display: inline;

    background: transparent !important;

  }

  #header .header-menu > ul li a:hover {

    font-weight: normal !important;

  }

  #header .header-menu > ul li ul {

    display: none;

    position: absolute;

    top: 35%;

    left: 15%;

  }

  #header .header-menu > ul li ul li a {

    font-size: 0.8em;

  }

  #header .header-menu > ul li:hover ul {

    display: block;

  }

  /*--CONTENT--*/

  #wrapper {

    overflow: hidden;

    margin-bottom: 1em !important;

    width: 75%;

    margin: 0 auto;

  }

  #wrapper .featured-post {

    padding: 0;

  }

  #wrapper .content {

    display: block;

    width: 102.08333333333333%;

    margin: 0 -1.0416666666666665%;

    *zoom: 1;

    /*--SIDEBAR--*/


  }

  #wrapper .content:before,

  #wrapper .content:after {

    content: "";

    display: table;

  }

  #wrapper .content:after {

    clear: both;

  }

  #wrapper .content .content-main {

    display: inline;

    float: left;

    width: 64.58333333333334%;

    margin: 0 1.0416666666666665%;

  }

  #wrapper .content .content-main .post-below {

    display: block;

  }

  #wrapper .content .sidebar {

    display: inline;

    float: left;

    width: 31.25%;

    margin: 0 1.0416666666666665%;

    clear: none;

    padding-top: 0;

  }

  #wrapper .content .sidebar .recent-post li {

    display: inline;

    float: left;

    width: 97.91666666666666%;

    margin: 0 1.0416666666666665%;

  }

  /*--FOOTER--*/

  #footer {

    overflow: hidden;

  }

  #footer .col-1,

  #footer .col-2 {

    display: inline;

    float: left;

    width: 22.916666666666664%;

    margin: 0 1.0416666666666665%;

  }

  #footer .col-3 {

    display: inline;

    float: left;

    width: 47.91666666666667%;

    margin: 0 1.0416666666666665%;

    clear: none;

  }

}




Ok, xong rồi đó. Bây giờ bạn có thể test thử cái giao diện mà bạn vừa làm xong trên di động, máy tính bảng và desktop nhé. Để test kỹ hơn, đừng quên sử dụng tính năng Remote có trong Prepros để truy cập xem giao diện trên các thiết bị di động nha.



Tổng kết phần viết CSS


Trong bốn phần vừa qua các bạn chắc cũng đã nắm được kha khá kiến thức liên quan tới CSS rồi đúng không nè? Dựa vào các kiến thức đó, mình tin chắc các bạn sẽ có thể dễ dàng tự tạo ra các giao diện mobile-first dành cho riêng mình mà không còn phải bối rối nên bắt đầu từ đâu.


Tiếp theo của serie này, chúng ta sẽ bắt đầu tiên hành đi vào phần quan trọng nhất để tạo một theme cho WordPress đó là quy trình chuyển giao diện HTML/CSS qua WordPress sử dụng PHP. Trong phần này chúng ta sẽ có nhiều đinh nghĩa cần xem qua, vì vậy mình khuyến khích bạn nên tranh thủ mấy hôm mình bận để học qua PHP cơ bản nếu bạn chưa biết nhé, sẽ dễ dàng hơn cho bạn rất nhiều khi bắt đầu đấy.


Hẹn gặp lại bạn trong phần kế tiếp!.


Tải source phần 8

Category: ,

0 comments