peri hokiperihokiclarustologisticsrimashaop.comfenomena gates of olympus buka peluang besar bagi duta76cara dapat pola emas rahasia di duta7 wild west goldtrik menang pgsoft mahjong ways 2 modal receh maxwin duta76duta76 main pgsoft mahjong ways 2 di sela istirahatscatter hitam mahjong wins 3 spin pasti jepe duta76pola petir tersembunyi gates of olympus perihokipgsoft perkuat mahjong ways 2 di akun perihokiperihoki beri pola jitu mahjong wins 3 auto maxwinexclusive perihoki gates of olympus hadirkan fitur super scatterpgsoft mahjong ways perihoki punya irama scatter sendiripola jitu scatter hitam mahjong wins 3 auto maxwin di perihokiakun baru langsung panen di gates of olympus di duta76cara buat akun duta76 menjadi gacor main mahjong ways 2 pgsoftmahjong wins 3 duta76 viral karena tembus maxwin dalam 7 menitcuan 10rb scatter mahjong wayssantai main mahjong wins gacorscatter emas 257jt mahjong winspegawai menang mahjong awsbetharta karun dari kerja keraskeajaiban mahjong layar dibanjiri scatter hitammalam sunyi mahjong menarinaga hitam bawa hoki akun barupemulung dapat rumah dan modal usahafenomena meledak meletup jackpothidup lebih hidup saat scatter hitam munculkeunggulan profit dari putaran pertamamenghidupkan malam dengan keberuntungan mahjongingin cuan cepat joki profesional gates of olympus perihokijalan perihoki pasti cuan dari spin scatter hitam mahjong ways 2 pgsoftmahjong wins 3 sukses dengan teknik pancingan gacor perihkibanyak jalan alternatif baccarat online di perihokikemenangan substansial mahjong ways 2 keuntungan nyata perihokiscatter hitam mahjong wins 3 spin perihoki pasti jeperahasia rtp live pola pragmatic gates of olympus duta76trik duta7 pgsoft mahjong ways 2 modal receh maxwingampang meraih keberuntungan di mahjong wins 3 duta76cara dapat saldo lewat jalur pintas dadu sicbo duta76spin mahjong ways 2 pgsoft scatter hitam maxwin duta76duta76 berikan kemenangan konsisten di mahjong wins 3mahjong wins bantu ekonomi keluargaabc1131 bahas rtp live mahjong pgsoftpanduan pemula bermain mahjong

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 282

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: session_set_cookie_params(): Cannot change session cookie parameters when headers already sent

Filename: Session/Session.php

Line Number: 294

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 304

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 314

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 315

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 316

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 317

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: Session/Session.php

Line Number: 375

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time

Filename: drivers/Session_files_driver.php

Line Number: 108

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: session_set_save_handler(): Cannot change save handler when headers already sent

Filename: Session/Session.php

Line Number: 110

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: session_start(): Cannot start session when headers already sent

Filename: Session/Session.php

Line Number: 143

Backtrace:

File: /home/blogchuabenh/domains/freetuts.net/public_html/site/controllers/Main_controller.php
Line: 10
Function: __construct

File: /home/blogchuabenh/domains/freetuts.net/public_html/sources/index.php
Line: 299
Function: require_once

File: /home/blogchuabenh/domains/freetuts.net/public_html/index.php
Line: 26
Function: require_once

Bài 07: Nested Selector trong SASS - Freetuts
SASS CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Bài 07: Nested Selector trong SASS

Như chúng ta biết hoạt động truy vấn các đối tượng HTML trong CSS sẽ sử dụng cú pháp selector. Nhưng trong một trang HTML việc quản lý các selector đó thực sự rất là rối, vì vậy SASS phải cung cấp cho chúng ta một cách nào đó để quản lý dễ dàng hơn.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Nested Selector trong SASS

SASS phân cấp bằng cách sử dụng cặp dấu {} với cú pháp như sau:

selectors {
    // selector bên trong
}

Ví dụ: thiết lập backgroud màu đỏ cho thẻ div.bg-red nằm trong thẻ div.bg

Cho cấu trúc HTML:

<div>
    <div class="bg-red">Nội dung thứ nhất</div>
</div>
<div class="bg">
    <div class="bg-red">Nội dung thứ hai</div>
</div>

Như vậy chỉ có thẻ div.bg-red phía dưới mới có background màu đỏ. Với CSS thông thường thì ta viết như sau:

Bài viết này được đăng tại [free tuts .net]

.bg .bg-red{
    background: red
}

Chuyển qua với SASS thì ta viết như sau: (đương nhiên khi biên dịch thì nó chuyển sang CSS thông thường như trên)

.bg {
    .bg-red{
        background: red;
    }
}

Nếu ban nghĩ dài dòng quá thì đó là sai lầm của bạn đấy. Giả sử có khoảng 100 phần tử con thì nó rất là rõ ràng và mạch lạc.

2. Một ví dụ khác về Nested Selector trong SASS

Cho đoạn mã HTML sau:

<div class="wrapper">
    
    <div id="header">
        <div class="top-menu">
            
        </div>
        <div class="logo">
            
        </div>
        <div class="main-menu">
            
        </div>
    </div>
    
    <div id="content">
        <div class="left-sidebar">
            
        </div>
        <div class="main-content">
            
        </div>
        <div class="right-sidebar">
            
        </div>
    </div>
    
    <div id="footer">
        <div class="copyright">
            
        </div>
        <div class="friend-list">
            
        </div>
    </div>
</div>

Hãy sử dụng Nested Selector phân chia CSS cho đoạn mã trên.

Ta để ý phân ra header, footer, content thành các block chính, sau đó bên trong ta tiếp tục phân chia tùy vào mã HTML và class của thẻ con.

SASS:

.wrapper
{
    #header {
        .top-menu {
            background: red
        }
        
        .logo {
            background: red
        }
        .main-menu {
            background: red
        }
    }
    
    #content {
        .left-sidebar {
            background: red
        }
        
        .main-content {
            background: red
        }
        
        .right-sidebar {
            background: red
        }
    }
    
    #footer {
        .copyright {
            background: red
        }
        
        .friend-list {
            background: red
        }
    }
}

CSS sau khi biên dịch:

.wrapper #header .top-menu {background: red; }
.wrapper #header .logo {background: red; }
.wrapper #header .main-menu {background: red; }
.wrapper #content .left-sidebar {background: red; }
.wrapper #content .main-content {background: red; }
.wrapper #content .right-sidebar {background: red; }
.wrapper #footer .copyright {background: red; }
.wrapper #footer .friend-list {background: red; }

Việc truy vấn selector cấp rõ ràng như thế này giúp cho website hoạt động tốt và tối ưu hơn rất nhiều.

Như vậy việc quản lý code CSS sau này ta chỉ quan tâm đến file SASS nên muốn sửa trên header thì ta vào header để chỉnh sửa, muốn sửa footer thì vào vị trí footer nên sẽ không có sự dư thừa như trước.

3. Lời kết

Vậy là bạn đã hiểu được cách sử dụng Nested Selector trong SASS và đồng thời cũng trả lời luôn câu hỏi tại sao nên sử dụng Nested Selector.

Cùng chuyên mục:

Mở đầu: Sự khác nhau giữa SASS và SCSS

Mở đầu: Sự khác nhau giữa SASS và SCSS

Khi bạn đọc series này bạn sẽ thấy mình giới thiệu và SASS mà lại…

Bài 16: Các hàm xử lý Number trong SASS

Bài 16: Các hàm xử lý Number trong SASS

Tiếp tục tìm hiểu các hàm có sẵn trong SASS và trong bài này chúng…

Bài 15: Các hàm xử lý chuỗi trong SASS

Bài 15: Các hàm xử lý chuỗi trong SASS

SASS cung cấp khá nhiều các hàm có sẵn giúp cho việc lập trình trở…

Bài 14: Function trong SASS

Bài 14: Function trong SASS

Function không còn xa lại gì trong các ngôn ngữ lập trình nhưng với SASS…

Bài 13: Vòng lặp each trong SASS

Bài 13: Vòng lặp each trong SASS

Ta đã biết vòng lặp foreach trong PHP dùng để lặp mảng và mỗi lần…

Bài 12: Vòng lặp while trong SASS

Bài 12: Vòng lặp while trong SASS

Vòng lặp for dùng để lặp cho những trường hợp ta biết trước tổng số…

Bài 11: Các toán tử hay dùng trong SASS

Bài 11: Các toán tử hay dùng trong SASS

SASS hỗ trợ khá nhiều toán tử không kém gì các ngôn ngữ lập trình,…

Bài 10: Vòng lặp for trong SASS

Bài 10: Vòng lặp for trong SASS

Vòng lặp là một khái niệm không còn xa lạ gì nữa với các bạn…

Bài 09: Lệnh if else trong SASS

Bài 09: Lệnh if else trong SASS

Còn khá nhiều kiến thức quan trọng của SASS mà bạn cần phải học và…

Bài 08: Tìm hiểu Mixin trong SASS

Bài 08: Tìm hiểu Mixin trong SASS

Mình đã từng code CSS cho nhiều trang và mình cũng phân chia và comment…

Bài 06: Khai báo và sử dụng biến trong SASS

Bài 06: Khai báo và sử dụng biến trong SASS

Như mình đã nói SASS có những chức năng rất giống với một ngôn ngữ…

Bài 05: Tìm hiểu Place Holder trong SASS

Bài 05: Tìm hiểu Place Holder trong SASS

Trong bài này chúng ta tìm hiểu cách khai báo một Placer Hoder để cho…

Bài 04: Kế thừa extend trong SASS

Bài 04: Kế thừa extend trong SASS

Như một ngôn ngữ lập trình, SASS cho phép chúng kế thừa lẫn nhau và…

Bài 03: Các lệnh biên dịch file SASS thành file CSS

Bài 03: Các lệnh biên dịch file SASS thành file CSS

Nếu bạn không muốn sử dụng Netbeans và chức năng tự động generate của nó…

Bài 02: Cấu hình SASS trên Netbeans

Bài 02: Cấu hình SASS trên Netbeans

Sau khi cài đặt SASS xong thì chúng ta cần một editor để lập trình.…

Bài 01: SASS là gì? Cài đặt SASS trên Window

Bài 01: SASS là gì? Cài đặt SASS trên Window

Hôm nay chúng ta sẽ tìm hiểu một công nghệ mới dành cho các frontend…

Top