Code giao diện Navigation

Lập trình CSS và SASS nâng cao với dự án website Landing Page

5.0 (1 đánh giá)
Tạo bởi Nguyễn Minh Chí Cập nhật lần cuối 16:02 17-11-2019 1.420 lượt xem 0 bình luận
Học nhanh

Danh sách bài học

Code giao diện Navigation

Dẫn nhập

Trong bài học trước chúng ta đã cùng nhau code xong POPUP COMPONENT.

Trong bài học này chúng ta sẽ cùng nhau code phần Giao diện cho Navigation.


Nội dung

Để tiếp thu tốt bài học này, các bạn cần:

Trong bài học này chúng ta sẽ cùng nhau:

  • Code HTML của navigation
  • Code Navigation__button và Navigation__background
  • Code Navigation__nav

Code HTML của navigation

Chúng ta sẽ cùng quan sát giao diện phần này.

Ở đây ta có thể thấy là navigation gồm 3 phần :

  • Phần 1 chinh là button để show navigation

  • Phần 2 chính là những đường link dẫn đến các phần của website.
  • Phần cuối cùng chính là background của website.
<div class="navigation">
        <input type="checkbox" class="navigation__checkbox" id="navi-toggle">
        <label for="navi-toggle" class="navigation__button">
            <span class="navigation__icon">&nbsp;</span>
        </label>
        <div class="navigation__background">&nbsp;</div>
        <div class="navigation__nav">
            <ul class="navigation__list">
                <li class="navigation__item"><a href="/redirect?Id=Ok7QNCdcSHCUf3tyR7o94w%3d%3d" class="navigation__link">About us</a></li>
                <li class="navigation__item"><a href="/redirect?Id=Ok7QNCdcSHCUf3tyR7o94w%3d%3d" class="navigation__link">Our Skills</a></li>
                <li class="navigation__item"><a href="/redirect?Id=Ok7QNCdcSHCUf3tyR7o94w%3d%3d" class="navigation__link">Our courses</a></li>
                <li class="navigation__item"><a href="/redirect?Id=Ok7QNCdcSHCUf3tyR7o94w%3d%3d" class="navigation__link">Testimonials</a></li>
                <li class="navigation__item"><a href="/redirect?Id=Ok7QNCdcSHCUf3tyR7o94w%3d%3d" class="navigation__link">Enroll form</a></li>
            </ul>
        </div>
    </div>

Button của phần này được chỉnh thông qua class navigation__button navigation__checkbox.

Ở đây navigation__checkbox navigation__button là label sẽ giúp tạo hiệu ứng đóng mở background của phần navigation.

Trong khi navigation__icon sẽ giúp chỉnh giao diện của button. Trong đó navigation__icon sẽ giúp tạo ra 3 gạch ngang cũng như hiệu ứng sau khi click 3 gạch ngang chuyển thành dấu x của button, sẽ được nói kĩ hơn trong phần sau của bài học.

Phần background sẽ được chỉnh thông qua class navigation__background.

Và tiếp theo là navigation__nav bao quanh navigation__list chứa các navigation__itemnavigation__link link đến các phần trong website.

Vậy là chúng ta đã xong phần html của navigation (thực tế bạn sẽ code html từng phần rồi code css luôn như background sau đó đến list và button, nhưng ở đây mình để sẵn code html toàn bộ để từ phần sau chúng ta chỉ quan tâm đến css của navigation thôi ).


Code Navigation__button và Navigation__background

Tạo file _navigation.scsslayout và import vào file main.scss

Trước hết chúng ta sẽ display: none navigation__checkbox, (chỉ cần click vào label thì nó cũng tự check checbox do label đã link đến checkbox thông qua id của checkbox, for=”navi-toggle”).

.navigation {
    &__checkbox {
        display: none;
    }
}

Giờ thì ta sẽ code label (navigation__button)

Nó là 1 hình tròn (sử dụng border-radius), và posision fixed (scroll lên xuống đếu fix ở vị trí góc phải màn hình), text-align: center để icon 3 gạch được căn giữa (sẽ code icon 3 gạch ở phần sau), và thêm 1 chút shadow. Nhớ set z-index để chắc rằng navigation__button luôn ở trên các phần còn lại nha.

&__button {
        background-color: $color-white;
        height: 7rem;
        width: 7rem;
        position: fixed;
        top: 6rem;
        right: 6rem;
        border-radius: 50%;
        z-index: 2000;
        cursor: pointer;
        text-align: center;
        box-shadow: 0 1rem 3rem rgba($color-black, .15);
    }

Tiếp theo chúng ta sẽ code phần background.

Các bạn để ý hiệu ứng khi click vào button.

Background thực chất là 1 hình tròn đè lên website với tâm xuất phát từ button.

Vậy nên code background lúc chưa check cũng tương tự như chúng ta code phần button, chỉ khác màu, z index và có lẽ sẽ để kích thước hình tròn nhỏ hơn để có thể núp sau navigation__button.  

&__background {
        height: 6rem;
        width: 6rem;
        border-radius: 50%;
        position: fixed;
        top: 6.5rem;
        right: 6.5rem;
        background-image: radial-gradient($color-primary, $color-primary-dark);
        z-index: 1000;
        transition: transform .8s;
    }

Và khi ta click button thì background sẽ scale lên để che kín toàn bộ website (80 lần).

&__checkbox:checked~&__background {
        transform: scale(80);
    }

(~ dùng để sử dụng 1 hành động của element này để chỉnh thuộc tính CSS của element khác ngang hàng)

(Giờ thì các bạn có thể click để quan sát hiệu ứng mở background).

Tiếp sau đây chúng ta sẽ chỉnh CSS của navigation__nav.


Code Navigation__nav

Trước hết ta chỉnh scale của background lên 80 để chỉnh thuộc tính Css của navigation__nav thì có thể dễ dàng quan sát hơn.

Ở đây trước hết ta quan tâm đến z-index của nav, nó sẽ lớn hơn background nhưng phải nhỏ hơn button để không đè lên button khi xuất hiện. Position fixed cùng với backround. Opacity sẽ là 0 (nhưng ta tạm thời cứ để nó là 1 để chỉnh CSS cho nó xong xuôi trước đã :D),

Và đừng quên thêm transition của nó giống với transition của background.

Height sẽ là toàn màn hình, width sẽ để là 0 khi button chưa được check

(tương tự như opacity thì ta vẫn cứ để width 100% để ta chỉnh CSS trước đã ) 

  &__nav {
        height: 100vh;
        position: fixed;
        top: 0;
        right: 0;
        z-index: 1500;
        opacity: 0;
        width: 0;
        transition: all .8s;
    }

Tiếp theo chúng ta sẽ chỉnh đển navigation__list.

Trước hết sẽ là căn giữa, ta sẽ sử dụng mixin absCenter, list-style: none, text-align: center

&__list {
        @include absCenter;
        list-style: none;
        text-align: center;
    }

Giờ thì đến item link của navigation.

Trước hết ta tạo khoảng cách giữa các item bằng cách sử dụng margin

&__item {
        margin: 1rem;
    }

Giờ thì đến navigation__link và hiệu ứng hover của nó.

 

(Background-image là 1 hình elip)

    

     (background-image che kín background có border-radius)

 

  &__link {

        &:link,
        &:visited {
            display: inline-block;
            font-size: 3rem;
            font-weight: 300;
            padding: 1rem 2rem;
            color: $color-white;
            text-decoration: none;
            text-transform: uppercase;
        }
    }

Đầu tiến là để link là display: inline-block, font-size, font-weight, padding nè và color: $color-white, tiếp đến text-decoration là none và tập cả chữ đều à uppercase, border-radius

Đây là lúc chúng ta sẽ chỉnh hiệu ứng hover của nó, ở đây background-image là 1 hình elip

background-image:
                radial-gradient(150% 200% ellipse at 115%,
                    $color-white 0%,
                    $color-white 50%,
                    transparent 50%);

(các bạn có thể xem lại việc sử dụng radial-gradient trong bài CODE ENROLL SECTION)

Ta set size của background image thật to là 252%, thì phần trắng (không chứa elip) sẽ đủ chứa toàn bộ link, và hình elip sẽ ở phía bên trái. Và khi hover thì ta chỉ cần dịch vị trí của background (background-position: 100%) để phần elip đè lên link.

&__link {

        &:link,
        &:visited {
            display: inline-block;
            border-radius: 4rem;
            font-size: 3rem;
            font-weight: 300;
            padding: 1rem 2rem;
            color: $color-white;
            text-decoration: none;
            text-transform: uppercase;
            background-image:
                radial-gradient(150% 200% ellipse at 115%,
                    $color-white 0%,
                    $color-white 50%,
                    transparent 50%);
            background-size: 252%;
            transition: all .4s;
        }
    }

Khi hover thì màu chữ chuyển thành màu $color-primary và chữ hơi dịch theo chiều ngang 1 chút.

 &:hover,
        &:active {
            background-position: 100%;
            color: $color-primary;
            transform: translateX(1rem);
        }

Giờ thì ta chỉ cần chỉnh lại các thuộc tính khi checked mới xuất hiện như scale của background, width, và opacity của list.


Code CSS

.navigation {
    &__checkbox {
        display: none;
    }

    &__button {
        background-color: $color-white;
        height: 7rem;
        width: 7rem;
        position: fixed;
        top: 6rem;
        right: 6rem;
        border-radius: 50%;
        z-index: 2000;
        cursor: pointer;
        text-align: center;
        box-shadow: 0 1rem 3rem rgba($color-black, .15);
    }

    &__background {
        height: 6rem;
        width: 6rem;
        border-radius: 50%;
        position: fixed;
        top: 6.5rem;
        right: 6.5rem;
        background-image: radial-gradient($color-primary, $color-primary-dark);
        z-index: 1000;
        transition: transform .8s;

        //  transform: scale(80);
    }

    &__nav {
        height: 100vh;
        position: fixed;
        top: 0;
        right: 0;
        z-index: 1500;
        opacity: 0;
        width: 0;
        transition: all .8s;
    }

    &__list {
        @include absCenter;
        list-style: none;
        text-align: center;
    }

    &__item {
        margin: 1rem;
    }

    &__link {

        &:link,
        &:visited {
            display: inline-block;
            border-radius: 4rem;
            font-size: 3rem;
            font-weight: 300;
            padding: 1rem 2rem;
            color: $color-white;
            text-decoration: none;
            text-transform: uppercase;
            background-image:
                radial-gradient(150% 200% ellipse at 115%,
                    $color-white 0%,
                    $color-white 50%,
                    transparent 50%);
            background-size: 252%;
            transition: all .4s;
        }
        

        &:hover,
        &:active {
            background-position: 100%;
            color: $color-primary;
            transform: translateX(1rem);
        }

    }

    &__checkbox:checked~&__background {
        transform: scale(80);
    }

    &__checkbox:checked~&__nav {
        opacity: 1;
        width: 100%;
    }
}

Kết luận

Ở bài này chúng ta đã cùng nhau kết thúc quá trình code Giao diện của Navigation.

Ở bài sau chúng ta sẽ kết thúc phần code navigation, CODE HOÀN THIỆN NAVIGATION__ICON.

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận và góp ý của mình để giúp phát triển bài viết tốt hơn. Đừng quên: "Luyện tập – Thử thách – Không ngại khó".


Tải xuống

Project

Nếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả/Dịch giả

Khóa học

Lập trình CSS và SASS nâng cao với dự án website Landing Page

Qua khóa FRONT END CƠ BẢN , Kteam đã hướng dẫn các bạn đã có được những kiến thức cơ bản về  HTML và CSS.

Trong combo Front End 2019, chúng ta sẽ cùng nhau tìm hiểu và áp dụng những kiến thức chuyên sâu về CSS. Do kiến thức về CSS trong khóa học khá lớn và chi tiết nên Kteam đã chia làm 2 phần.

  • Phần 1: CSS và SASS Nâng Cao
  • Phần 2: Flexbox và CSS grid layouts

Ở khóa học này chúng ta sẽ cũng nhau tìm hiểu tổng quát về phần 1: CSS và SASS Nâng Cao với dự án Website Landing Page.

Bạn cũng có thể truy cập vào đường link bên dưới để xem bản PRIEVIEW của website landing page Selftaught 2019 mà chúng ta sẽ cùng thực hiện nhé! 

LANDING PAGE WEBSITE SELFTAUGHT 2019

Đánh giá

minhbaljeet đã đánh giá 11:01 19-12-2019

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Không có video.