Chuyển px sang rem trong CSS

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

5.0 (2 đánh giá)
Tạo bởi Nguyễn Minh Chí Cập nhật lần cuối 19:48 29-10-2021 11.086 lượt xem 2 bình luận
Tác giả/Dịch giả: Nguyễn Minh Chí
Học nhanh

Danh sách bài học

Chuyển px sang rem trong CSS

Dẫn nhập

Trong bài học trước chúng ta đã kết thúc việc TÌM HIỂU CÁCH HOẠT ĐỘNG CỦA CSS. Quá trình CSS convert rem, em, % về px, cách mà browser xử lí việc khai báo properties chồng chéo nhau cho cùng 1 element, …

Trong bài học này chúng ta sẽ cùng nhau tìm hiểu cách Chuyển px sang rem (convert px to rem).


Nội dung

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

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

  • Convert px sang rem
  • Sử dụng thuộc tính inherit trong Css
  • Chú ý

Convert px sang rem

Ở trong bài  TÌM HIỂU QUÁ TRÌNH XỬ LÝ CUỐI CÙNG CỦA CSS chúng ta đã biết rằng việc sử dụng rem sẽ giúp chỉnh responsive 1 cách dễ dàng hơn. Và trong bài này chúng ta sẽ áp dụng điều đó vào project Web Landing Page của chúng ta:

SELTAUGHT LANDING PAGE

Đầu tiên, cùng nhắc lại kiến thức về công thức convert rem sang px:

Giá trị px của element = Giá trị rem của element * root fontsize của browser

 Trong đó:

  • giá trị default root fontsize 16px

Trước hết để chỉnh dễ dàng chúng ta set root fontsize là 10px trong project Web Landing Page của chúng ta.

html{
    font-size: 10px;
}

Từ đây chúng ta sẽ convert toàn bộ giá trị px của các element sang rem.

  • Ví dụ: 

35px = 3.5rem

40px = 4rem

Sau khi chỉnh xong chúng ta sẽ thấy webpage không có gì thay đổi.

Tiếp tục ví dụ về lợi ích khi sử dụng rem. Ta thu nhỏ website lại

Chuyển px sang rem trong CSS, SASS, Howkteam, Landing page, Website đơn giản

Ta thấy heading text bị tràn ra ngoài, bây giờ ta chỉ cần chỉnh duy nhất root fontsize từ 10px xuống 7px, thì sẽ được kết quả như sau:

Chuyển px sang rem trong CSS, SASS, Howkteam, Landing page, Website đơn giản

Từ đó ta thấy thay vì phải chỉnh media queries cho từng properties thì ta chỉ cần chỉnh media queries cho root fontsize mà thôi.

Vậy ta có thể thấy lợi ích của việc sử dụng rem thay vì px. Và tất nhiên trong khóa học này chúng ta sẽ lựa chọn cách tối ưu hơn, sử dụng rem trong xuyên suốt Project thay vì px như lúc trước.


Sử dụng thuộc tính inherit trong CSS

Ở đây ta biết fontsize là 1 property có thể thừa kế (inherit) được.

Ta có thể chỉnh từ 10px sang 62.5% (16px*62.5% = 10px).

html{
    font-size: 62.5%;
}

Tuy nhiên có những property lại không mặc định có thể inherit được (ví dụ như property: box-sizing)

Ở đây để ép thuộc tính có thể thừa kế ta sử dụng giá trị inherit của CSS.

body{
    box-sizing: border-box;
}
*{
    margin: 0;
    padding: 0;
    box-sizing: inherit;
}

Trong đó, * sẽ sử dụng được thừa kế giá trị (border-box) từ cha là element body.


Chú ý

Thêm chỉnh sửa cải tiến nữa khi set thuộc tính cho *, thì ta thấy rằng chúng ta có sử dụng nhiều pseudo class là ::before, ::after. Nên chúng ta sẽ khai báo mặc định thêm cho các pseudo-class này như sau.

*,
*::before,
*::after{
margin: 0;
padding: 0;
box-sizing: inherit;
}

Tương tự việc set cho * thì set mặc định cho *::after *::before để chúng ta không gặp những lỗi không mong muốn khi set width, padding, margin, … cho các pseudo element này.

Chúng ta cũng chú là việc sử dụng rem, cũng như thuộc tính inheritcác thuộc tính khác trong khóa học này sẽ không áp dụng được cho các browser đời cũ. Tuy nhiên mục đích của khóa học là cung cấp nhưng công cụ modern của CSS nên chúng ta sẽ không hướng đến mục tiêu hiển thị website trên tất cả các browser :D.


Code CSS

*,
*::before,
*::after{
    margin: 0;
    padding: 0;
    box-sizing: inherit;
}

html{
    font-size: 62.5%;
}

body {
    font-family: "Lato", sans-serif;
    font-weight: 400;
    font-size: 1.6rem;
    line-height: 1.7;
    color: #777777;
    padding: 3rem;
    box-sizing: border-box;
}

header{
    background-image: 
    linear-gradient(to right bottom, rgba(142, 158, 252, .8),rgba(28, 62, 255, .8)),
    url('../img/background1.jpg');
    background-size: cover;
    background-
    
    height: 95vh;
}

header{
    -webkit-clip-path: ellipse(60% 60% at 50% 33%);
    clip-path: ellipse(60% 60% at 50% 33%);
}

.text-box{
    
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    text-align: center;
}

.logo{
    height: 7rem;
} 

.logo-box{
    
    top: 3rem;
    left: 3rem;
} 

.heading-primary{
    color: #fff;
    text-transform: uppercase;
    margin-bottom: 6rem;
}

.heading-primary__main{
    display: block;
    font-size: 6.2rem;
    font-weight: 400;
    letter-spacing: 1.5rem;
}

.heading-primary__sub{
    display: block;
    font-size: 2rem;
    font-weight: 700;
    letter-spacing: 1.8rem;
}

.btn,
.btn:link,
.btn:visited{
    text-transform: uppercase;
    text-decoration: none;
    padding: 1.5rem 4rem;
    display: inline-block;
    border-radius: 10rem;
    font-size: 1.6rem;
    
    transition: all .2s;
}

.btn::after {
    content: "";
    display: inline-block;
    height: 100%;
    width: 100%;
    
    top: 0;
    left: 0;
    z-index: -1;
    border-radius: 10rem;
    transition: all .4s;
}

.btn:hover{
    transform: translateY(-.3rem);
    box-shadow: 0 .5rem 2rem rgba(0, 0, 0, .2);
}

.btn:active{
    outline: none;
    transform: translateY(-.1rem);
    box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .2);
}
.btn-white{
    color: #777777;
    background-color: #fff;
}

.btn-white::after{
    background-color: #fff;
}

.btn:hover::after{
    transform: scaleX(1.4) scaleY(1.6);
    opacity: 0;
}

.heading-primary__main{
    animation: moveInLeft 1s ease-out;
}

.heading-primary__sub{
    animation: moveInRight 1s ease-out
}

.btn-animated{
    animation: moveInBottom .5s ease-out .75s;
    animation-fill-mode: backwards;
}

@keyframes moveInLeft {
    0% {
        opacity: 0;
        transform: translateX(-10rem);
    }

    80% {
        transform: translateX(1rem)
    }

    100% {
        opacity: 1;
        transform: translateX(0);
    }
}

@keyframes moveInRight {
    0% {
        opacity: 0;
        transform: translateX(10rem);
    }

    80% {
        transform: translateX(-1rem)
    }

    100% {
        opacity: 1;
        transform: translateX(0);
    }
}

@keyframes moveInBottom {
    0% {
        opacity: 0;
        transform: translateY(3rem);
    }

    100% {
        opacity: 1;
        transform: translateY(0);
    }
}

Kết luận

Trong bài học này chúng ta đã cùng nhau Convert px sang rem.

Ở bài học sau chúng ta sẽ cùng nhau TÌM HIỂU VỀ BEM ( CÁCH ĐẶT TÊN CLASS).

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

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Chuyển px sang rem trong CSS dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!

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ê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á

hadang89 đã đánh giá 21:18 26-02-2020

Lightingoverplay đã đánh giá 19:58 13-07-2019

cảm ơn mọi người trong team howkteam đã cho em nhiều bài học hữu ích nha

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
giadat1999 đã bình luận 00:31 23-08-2019

cho em xin file word của cách thức hoạt động css 1 2 3 và chuyển px sang rem với ạ, em phô ra để đọc cho nhớ, em cảm ơn !

truonggiadat1999@gmail.com

Không có video.