Học làm web (63) - JS căn bản (5)

Tiếp theo của: Học làm web (62) - JS căn bản (4)
----

2.3       Sử dụng JavaScript


Tới đây đã có những khái niệm căn bản về ngôn ngữ lập trình JavaScript. Phần này sẽ sử dụng JavaScript vào việc làm web. Bằng việc sử dụng JavaScript trên đối tượng DOM, người lập trình có thể thao tác, chỉnh sửa các phần tử, thuộc tính và nội dung của trang web.

2.3.1       DOM là gì?


DOM là viết tắt của Document Object Model (Mô hình đối tượng tài liệu). DOM là một chuẩn của W3C, dùng để biểu diễn tài liệu HTML, XML; cho phép người lập trình có thể truy cập và xử lý nội dung của tài liệu HTML, XML bằng ngôn ngữ lập trình, ví dụ ngôn ngữ JavaScript. DOM gồm ba loại là Core DOM, XML DOM và HTML DOM. Trong phần này chỉ quan tâm tới HTML DOM, để tiện trình bày, gọi tắt là DOM.

Như đã biết, sau khi trình duyệt nhận được tài liệu HTML, nó sẽ thực hiện phân tích mã HTML để tạo ra cây DOM (DOM tree).

Ở dạng DOM, mỗi phần tử (element) của tài liệu HTML đều được xem là một đối tượng, có thuộc tính và phương thức. Do đó, người lập trình có thể lấy, thay đổi, thêm, xóa các phần tử của tài liệu HTML. Mỗi phần tử được biểu diễn bằng một nút (node) trong cây DOM.

Tài liệu HTML sẽ được chuyển thành một trong các loại nút sau:

– Document: là nút gốc, đại diện cho toàn bộ tài liệu HTML

– Element: tất cả các phần tử của HTML đều thuộc loại nút này

– Text: phần nội dung văn bản trong tài liệu HTML thuộc loại nút này

– Attribute: thuộc tính của các phần tử trong tài liệu HTML thuộc loại nút này

­– Comment: các chú thích trong tài liệu HTML thuộc loại nút này


Dưới đây là hình minh họa, kết quả chuyển từ tài liệu HTML sang cây DOM.



Có thể xem DOM như một giao diện lập trình (một API) của một trang HTML.

2.3.2       Truy cập tới các nút của cây DOM


Để tiện minh họa, các đoạn mã JavaScript sẽ thực hiện trên đoạn mã HTML sau:

[HTML]

<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>testing</title>
<script>

</script>
</head>
<body>
            <div id="header">
                        <h1>Trang web của tôi</h1>
            </div>
            <div id="content">
                        <p>Xin chào</p>
                        <p id="doan1" class="mau-do">Đoạn 1</p>
                        <p id="doan2" class="mau-do">Đoạn 2</p>
            </div>
            <div id="footer">
                        <p>copyright &copy;</p>
            </div>
           
</body>
</html>

Phương thức getElementsByTagName()

Sử dụng phương thức getElementsByTagName() để lấy tham chiếu tới các phần tử theo tên, qua tham chiếu này có thể truy cập tới phần tử. Do các phần tử trong HTML thường xuất hiện nhiều lần trong một tài liệu, nên kết quả trả về của phương thức này là một danh sách các tham chiếu. Ví dụ, đoạn mã sau sẽ lấy mọi tham chiếu của phần tử có tên là p, lưu vào biến paragraphs, rồi dựa vào tham chiếu, xuất phần văn bản nằm trong mỗi phần tử ra cửa sổ thông báo (alert). Đặt đoạn mã này ngay trước thẻ 
</body>,
            <script>
                        var paragraphs = document.getElementsByTagName('p');
                        for (var i = 0; i < paragraphs.length; i++) {
                                    alert(paragraphs[i].innerHTML);
                        }
            </script>

Phương thức innerHTML() ở đoạn mã trên dùng để lấy phần nội dung nằm trong một phần tử.

Phương thức getElementById()

Phương thức getElementById() dùng để lấy tham chiếu tới một phần tử dựa vào giá trị thuộc tính id của phần tử. Ví dụ, đoạn mã sau sẽ lấy tham chiếu tới phần tử p có giá trị iddoan1, xuất nội dung của phần tử ra cửa sổ thông báo:

var paragraph = document.getElementById('doan1');
                        alert(paragraph.innerHTML);

Nếu để ý, sẽ thấy chữ Element trong phương thức getElementById() là số ít chứ không phải số nhiều như trong phương thức getElementsByTagName().

Phương thức getElementsByClassName()

Phương thức getElementsByClass() dùng để lấy tham chiếu tới nhiều phần tử dựa vào giá trị thuộc tính class của phần tử. Ví dụ, đoạn mã sau sẽ lấy tham chiếu tới các phần tử p có giá trị classmau-do, xuất nội dung của các phần tử ra cửa sổ thông báo:

var paragraphs = document.getElementsByClassName('mau-do');
                        for (var i = 0; i < paragraphs.length; i++) {
                                    alert(paragraphs[i].innerHTML);
                        }

Phương thức querySelectorAll()

Phương thức querySelectorAll() dùng để lấy tham chiếu tới các phần tử dựa vào bộ chọn CSS (CSS-style selector). Ví dụ, đoạn mã sau sẽ lấy tham chiếu tới các phần tử p là con của phần tử dividcontent:

 var paragraphs = document.querySelectorAll('#content p');
                        for (var i = 0; i < paragraphs.length; i++) {
                                    alert(paragraphs[i].innerHTML);
                        }

Nếu để ý sẽ thấy, bộ chọn CSS cũng có thể là tên phần tử, class, và id, do vậy phương thức querySelectorAll() có thể sử dụng để thay thế cho các phương thức getElementsByTagName(), getElementById(),getElementsByClass().

Ví dụ, hai đoạn mã sau là tương đương về chức năng:

var paragraphs = document.querySelectorAll('.mau-do');
                        for (var i = 0; i < paragraphs.length; i++) {
                                    alert(paragraphs[i].innerHTML);
                        }


var paragraphs = document.getElementsByClassName('mau-do');
                        for (var i = 0; i < paragraphs.length; i++) {
                                    alert(paragraphs[i].innerHTML);
                        }

2.3.3       Truy cập tới thuộc tính


Ngoài việc tham chiếu tới các phần tử DOM, JavaScript còn cho phép tham chiếu tới và lấy về giá trị của thuộc tính, sử dụng phương thức getAttribute(), với tham số là tên của thuộc tính.

Ví dụ,

 [HTML]

<p id="doan1" class="mau-do">Đoạn 1</p>

Đoạn mã sau sẽ lấy tham chiếu tới phần tử p, lưu vào biến para, sau đó lấy giá trị của thuộc tính class và xuất ra màn hình:

var para = document.getElementById('doan1');
alert(para.getAttribute('class'));

Kết quả xuất ra màn hình là: “mau-do”.

2.3.4       Thao tác trên các nút


Sau khi truy cập được tới các nút, lập trình viên có thể thực hiện một số thao tác trên đó, ngoài ra cũng có thể thao tác trên thuộc tính hoặc nội dung của nút.

Thiết lập giá trị cho thuộc tính

Để thiết lập giá trị cho thuộc tính, sử dụng phương thức setAttribute(), phương thức này cần hai tham số. Một là tên thuộc tính, hai là giá trị của thuộc tính.

Ví dụ,

[HTML]

<p id="doan1" class="mau-do">Đoạn 1</p>

Đoạn mã sau sẽ sửa lại giá trị của class từ “mau-do” thành “mau-xanh”,

var para = document.getElementById('doan1');
                        para.setAttribute('class', 'mau-xanh');

[Kết quả]

 <p id="doan1" class="mau-xanh">Đoạn 1</p>

Ví dụ một số tình huống có thể dùng tới phương thức setAttribute(),

– Cập nhật lại trạng thái chọn (checked) cho phần tử radio, checkbox khi người dùng tương tác trên các phần tử khác

– Tìm phần tử link, sau đó thay đổi giá trị thuộc tính href, để thay đổi toàn bộ phần định dạng CSS của trang web

– Cập nhật giá trị title dựa theo trạng thái của phần tử

Thay thế nội dung của một phần tử

Để thiết lập phần nội dung của một phần tử, sử dụng phương thức innerHTML(). Nội dung của một phần tử có thể là văn bản hoặc phần tử khác.

Ví dụ,

[HTML]

<div id="header">
                        <h1>Trang web của tôi</h1>
            </div>

Đoạn mã sau sẽ chèn <h2>Phần giới thiệu</h2> vào phần nội dung của phần tử div có id=“header”, nội dung vừa được chèn sẽ thay thế toàn bộ nội dung trước đó của phần tử,
var headerDiv = document.getElementById('header');
            header.innerHTML = '<h2>Phần giới thiệu</h2>';

Thao tác với thuộc tính style

Có thể lấy, thêm, thay đổi hoặc gỡ bỏ phần định dạng CSS của một phần tử bằng thuộc tính style. Việc thêm hoặc thay đổi nội dung CSS cũng giống như việc định dạng cho phần tử bằng cách style theo kiểu inline.

Ví dụ,

[HTML]

<p id="doan1" class="mau-do">Đoạn 1</p>

Đoạn mã sau sẽ thêm thuộc tính CSS để nội dung của phần tử p sẽ có chữ màu đỏ và nền màu xanh,

var doan1 = document.getElementById('doan1');
doan1.style.color = 'red';
doan1.style.backgroundColor = 'green';

Lưu ý, tên các thuộc tính khi viết ở dạng CSS sẽ sử dụng dấu gạch ngang (-) để nối các thuộc tính có hai từ trở lên (ví dụ: background-color), tuy nhiên, trong JavaScript và DOM thì sẽ được chuyển sang dạng camelCase (ví dụ backgroundColor).

Đoạn mã sau sẽ thực hiện lấy giá trị của CSS bằng thuộc tính style,

var kq = doan1.style.color;
alert(kq);

Có thể viết rút gọn như sau:

document.getElementById('doan1').style.color = 'red';
document.getElementById('doan1').style.backgroundColor = 'green';
alert(document.getElementById('doan1').style.color);

Lab 2.3.a
-----------
Cập nhật [27/9/2018]
-----------
Xem thêm: Tổng hợp các bài viết về Học làm web
Xem thêm: Học làm web (64) - JS căn bản (6)

Lập trình CSDL_03_CheckBox MessageBox Panel RadioBox

Bài trước: Lập trình CSDL_02_Label Button Textbox
-----
Câu hỏi 11. Thuộc tính anchor dùng để làm gì?

Câu hỏi 12. Thuộc tính Modifiers dùng để làm gì?

Câu hỏi 13. Phân biệt phương thức Show() và ShowDialog()?

2.7 CheckBox


Bài 6. CheckBox


Checkalign để thay đổi vị trí của ô check so với phần chữ

Checked: 2 trạng thái (checked, unchecked)

CheckState: 3 trạng thái (checked, unchecked, indeterminate). Cần thiết lập thuộc tính ThreeState là True. Trạng thái checked và indeterminate đều trả về giá trị True, unchecked trả về giá trị False.

Vậy, ngoài khác biệt về số trạng thái (2 và 3), thì Checked và CheckState còn khác nhau điều gì? Chúng khác nhau ở hai sự kiện là CheckedChanged và CheckStateChanged. Ví dụ,

        private void checkBox1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Clicked");
        }
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            MessageBox.Show("CheckedChanged");
        }
       private void checkBox1_CheckStateChanged(object sender, EventArgs e)
        {
            MessageBox.Show("CheckStateChanged");
        }

Lab 5. Chương trình ví dụ sử dụng checkbox

[Giao diện]



[Mô tả chức năng]

– Khi người dùng bấm vào nút Gửi ý kiến: lấy “tên” và ý kiến của người dùng, xuất ra một MessageBox

[Đoạn mã tham khảo]

        private void btnGui_Click(object sender, EventArgs e)
        {
            string name = txtName.Text;
            string haiLong = chkHaiLong.CheckState == CheckState.Checked ? "hài lòng" : chkHaiLong.CheckState == CheckState.Unchecked ? "không hài lòng" : "phân vân";
            string strShow = string.Format("Bạn {0} cảm thấy {1} về dịch vụ!", name, haiLong);
            MessageBox.Show(strShow);
        }

Để ý cách sử dụng hàm string.Format("abcdef {0} ghijk {1} mnop!", noiDung0,  noiDung1). Nội dung của biến noiDung0 sẽ được chèn vào {0}, nội dung của biến noiDung1 sẽ được chèn vào {1}.

2.8 MessageBox


Bài 7. MessageBox


MessageBox không phải là một control mà là một lớp hỗ trợ.

Tại một thời điểm, chỉ có một MessageBox được xuất hiện trên giao diện.

Để thêm tiêu đề cho cửa sổ MessageBox, sử dụng tham số caption, ví dụ:

MessageBox.Show("Nội dung thông báo", "Nội dung của thanh tiêu đề (caption)");
MessageBox.Show("Bạn chưa nhập dữ liệu!", "Thông báo");

Để tùy chỉnh các nút cho cửa sổ MessageBox, sử dụng tham số MessageBoxButton, ví dụ:

MessageBox.Show("Bạn có muốn đóng chương trình không?", "Thông báo", MessageBoxButtons.YesNoCancel);

Để thêm biểu tượng (icon) cho cửa sổ MessageBox, sử dụng tham số MessageBoxIcon, ví dụ:

MessageBox.Show("Bạn có muốn đóng chương trình không?", "Thông báo", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

Để thiết lập nút được chọn mặc định (focus) cho cửa sổ MessageBox, sử dụng tham số MessageBoxDefaultButton, ví dụ:

MessageBox.Show("Bạn có muốn đóng chương trình không?", "Thông báo", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3);

Có thể nhận kết quả trả về của cửa sổ MessageBox, để sử dụng cho các xử lý khác, ví dụ:

DialogResult result = MessageBox.Show("Bạn có muốn đóng chương trình không?", "Thông báo", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button3);
            if ( result == System.Windows.Forms.DialogResult.Yes )
            {
                MessageBox.Show("Người dùng vừa bấm nút Yes");
            }

Thực hiện Insert Snippets cho lệnh switch (Với các lệnh khác cách làm tương tự, chỉ cần thay tên lệnh), cách làm như sau:

– Để dấu nháy chuột ở chỗ cần chèn lệnh switch,

– Sử dụng tổ hợp phím tắt Ctrl+K, + X

– Chọn Visual C#

– Chọn switch

– Thay chữ switch_on bằng tên biến (result)

– Gõ phím Enter 2 lần

2.9 Panel và FlowLayoutPanel


Bài 8. Panel và FlowLayoutPanel


Panel là một control dùng để chứa (gom nhóm) các control khác, giúp thuận lợi trong việc thiết kế và xử lý.

Thêm một control và panel,

Button btn = new Button();
            btn.Text = "New Button";
            pnlTest.Controls.Add(btn);

Sử dụng FlowLayoutPanel để sắp xếp các control trong nó có thứ tự.

2.10 RadioButton


Bài 9. RadioButton


RadioButton dùng để chọn một mục trong một nhóm các mục chọn. Để tạo ra một nhóm các mục chọn, sử dụng control Panel.

Với RadioButton, kĩ năng cơ bản nhất cần nắm là: cách duyệt các radio trong một panel, để biết được người dùng đã chọn radio nào.

Để gỡ bỏ chế độ chọn (checked) mặc định cho một radio, thiết lập thuộc tính Tabstop là false.

Để khóa các radio trong một panel, thiết lập thuộc tính Enable là false.

Để duyệt các radio trong một panel sử dụng cú pháp sau:

            RadioButton rb = null;
            // duyệt panel Câu hỏi 1
            foreach(RadioButton item in pnlCauHoi1.Controls)
            {
                if(item.Checked)
                {
                    rb = item;
                }
            }

Lab 6. Tạo một chương trình trắc nghiệm đơn giản

[Giao diện khi chạy chương trình – GiaoDien1]



[Giao diện sau khi người dùng đã làm bài và bấm nút Nộp bài – GiaoDien2]



[Xác nhận chắc chắn nộp bài từ người dùng – GiaoDien3]



[Mô tả chức năng]

– Chương trình cho phép người dùng chọn 01 câu trả lời cho từng câu hỏi, không nhất thiết phải làm hết các câu hỏi, có thể không trả lời câu nào cũng được

­– Nếu người dùng chưa bấm nút “Nộp bài” thì nút “Thoát” bị vô hiệu, để đảm bảo người dùng phải nộp bài mới được đóng chương trình

– Sau khi người dùng bấm nút Nộp bài thì:

  + Hiển thị cửa sổ thông báo như GiaoDien3

  + Nếu người dùng bấm Cancel thì cho tiếp tục làm bài

  + Nếu người dùng xác nhận (OK) thì thực hiện các bước sau:

    ++ Nếu họ không trả lời câu hỏi nào, thì xuất câu thông báo “Bạn chưa làm bài!”

    ++ Ngược lại, xuất kết quả như trong GiaoDien2

    ++ Vô hiệu (khóa) nút “Nộp bài”, khóa các mục chọn như trong GiaoDien2

    ++ Mở nút “Thoát” để người dùng có thể đóng chương trình

[Gợi ý cách làm]

– Khi khởi tạo form sẽ khóa nút btnThoat

– Khi người dùng bấm nút btnNopBai

{
       Khai báo các biến
       string kq = null; // để chứa chuỗi kết quả
       RadioButton rb = null; // để chứa nút người dùng đã chọn
       int flagXuat = 0; // để kiểm tra khi nào thì xuất dòng thông báo “Bạn chưa làm bài”, khi nào thì xuất kết quả chọn của mỗi câu
       Kiểm tra kết quả trả về của GiaoDien3, nếu Cancel thì không làm gì, nếu là OK thì: duyệt qua từng panel, kiểm tra xem nút radio nào được chọn (checked), lấy Tên câu hỏi nối vào chuỗi kq, lấy phần Text của nút được chọn nối vào chuỗi kq, nối thêm kí tự xuống hàng “\r\n”
       Xuất kq vào txtKetQua
}

<///// hết buổi 5
-----
Tiếp theo: Lập trình UD Desktop_04_ComboBox DataBinding
Xem thêm: Danh sách các bài học

Làm web (03) - Photoshop và Bootstrap (03)

Tiếp theo của: Làm web (02) - Photoshop và Bootstrap (02)
-----

5.3        Sử dụng thư viện WOWjs


WOWjs là một thư viện viết bằng JavaScript, do Matt Aussaguel phát triển. Sử dụng WOWj kết hợp với Animate.css để tạo ra các hiệu ứng khi cuộn chuột một cách hoàn hảo hơn. Chỉ khi nào người dùng cuộn chuột tới phần tử thì hiệu ứng mới được thực thi.

Đọc thêm về WOWjs tại đây: https://www.cione.vn/blog/front-end/wowjs.html

Một số giao diện tham khảo: http://thefoxwp.com/

Đọc hướng dẫn sử dụng (tiếng Anh): https://wowjs.uk/docs.html

Các bước sử dụng:

– Tải và nhúng Animate.css vào tài liệu HTML
<link rel="stylesheet" href="css/animate.css">

– Tải thư viện WOWjs (thư mục WOW-master) tại đây: https://github.com/matthieua/WOW

– Nhúng vào tài liệu HTML và khởi tạo thư viện, đặt đoạn mã ở cuối phần tử body (ngay trước thẻ </body>),

            <script src="vendor/WOW-master/dist/wow.min.js"></script>
            <script>
                        new WOW().init();
            </script>
</body>

­– Muốn áp dụng WOW vào phần tử nào chỉ việc khai báo class=“wow loại hiệu ứng”, ví dụ,
<div class="col-sm-6 col-sm-push-3 text-center wow bounceInUp">

– Để thiết lập độ trễ cho hiệu ứng, sử dụng thuộc tính data-wow-delay=“số giây”, ví dụ,
<div class="col-sm-6 col-sm-push-3 text-center wow bounceInUp" data-wow-delay="0.3s">

6          Tạo vùng các khóa học nổi bật


[Photoshop] cắt ảnh:

– Sử dụng công cụ Slice Tool để chọn vùng

– Nhấp đúp chuột vào vùng chọn, đặt tên cho vùng (ví dụ: one-course)

– Vào menu File, chọn Export\ Save for Web (Legacy), chọn loại ảnh (ví dụ JPEG), bấm nút Save

– Trong cửa sổ Save Optimized As, chọn thư mục sẽ lưu ảnh, mục slices chọn Selected Slices, các mục khác để mặc định.

[HTML] đoạn mã cho một khóa học,

<div class="col-sm-6">
            <a href="" class="one-course">
                        <img src="images/courses.png" alt="">
                        <span class="course-info">
                                    <h4 class="name">Front-end căn bản</h4>
                                    <div class="course-group">Front-end</div>
                        </span>
            </a>
</div>

– Cách tạo phần tử gồm hai lớp:

­ + Lớp một,

a.one-course {
    display: block;
    position: relative;
    width: 100%;
    height: 100%;
    overflow: hidden;
    margin-bottom: 30px;
}

 + Lớp hai,

span.course-info {
    display: block;
    width: 100%;
    position: absolute;
    bottom: 0;
    background: #5bbfdd;
    padding: 35px 32px;
    transition: 0.4s;
    bottom: -400px; /* ẩn đi */
}
h4.name {
    color: white;
    margin-bottom: 10px;
    font-weight: 600;
    font-size: 26px;
    text-transform: capitalize;
}
.course-group {
    color: #585858;
    font-size: 23px;
    position: relative;
    padding-top: 10px;
}
a.one-course:hover .course-info {
    bottom: 0; /* hiển thị lên lại */
}

Mã HTML khi có thêm hiệu ứng di chuyển,

<div class="row courses-title text-center wow bounceInUp">
                                                <h2 class="line-over">Outstanding Courses</h2>
                                    </div>
                                    <div class="row courses">
                                                <div class="col-sm-6 wow bounceInUp">
                                                            <a href="" class="one-course">
                                                                        <img src="images/courses.png" alt="">
                                                                        <span class="course-info">
                                                                                    <h4 class="name">Front-end căn bản</h4>
                                                                                    <div class="course-group">Front-end</div>
                                                                        </span>
                                                            </a>
                                                </div>
                                                <div class="col-sm-6 wow bounceInUp" data-wow-delay="0.3s">
                                                            <a href="" class="one-course">
                                                                        <img src="images/courses.png" alt="">
                                                                        <span class="course-info">
                                                                                    <h4 class="name">Front-end căn bản</h4>
                                                                                    <div class="course-group">Front-end</div>
                                                                        </span>
                                                            </a>
                                                </div>
[Hình minh họa]



[Khi rê chuột lên hình]



7          Tạo vùng thống kê


Sử dụng phông “Playfair Display” của Google. Phông này đã hỗ trợ tiếng Việt.

– Vào trang Google gõ từ khóa “Playfair display” hoặc vào thẳng trang: https://fonts.google.com/specimen/Playfair+Display

– Chọn mục SELECT THIS FONT

– Bấm chuột vào cửa sổ Family Selected (ở cuối màn hình, bên phải), chọn CUSTOMIZE, đánh dấu chọn các kiểu chữ, cỡ chữ, chọn mục Vietnamese để sử dụng cho tiếng Việt.

– Bấm chuột vào mục EMBED, chép đường dẫn sau, bỏ vào tài liệu HTML
<link href="https://fonts.googleapis.com/css?family=Playfair+Display:400,400i,700,700i,900,900i&amp;subset=vietnamese" rel="stylesheet">

[HTML]

<!-- begin statistics area -->
            <div class="statistics">
                        <div class="container">
                                    <div class="row">
                                                <div class="col-sm-3">
                                                            <div class="content">
                                                                        <div class="number">10</div>
                                                                        <div class="text">Khóa học</div>
                                                            </div>
                                                </div>
                                                <div class="col-sm-3">
                                                            <div class="content">
                                                                        <div class="number">150</div>
                                                                        <div class="text">Số học viên đang học</div>
                                                            </div>
                                                </div>
                                                <div class="col-sm-3">
                                                            <div class="content">
                                                                        <div class="number">20</div>
                                                                        <div class="text">Lớp học</div>
                                                            </div>
                                                </div>
                                                <div class="col-sm-3">
                                                            <div class="content">
                                                                        <div class="number">500</div>
                                                                        <div class="text">Học viên từng học</div>
                                                            </div>
                                                </div>
                                    </div>
                        </div>
            </div>
            <!-- end statistics area -->

[CSS]

.content {
    width: 100%;
    height: 322px;
    border: 10px solid #5bbfdd;
    text-align: center;
    padding-top: 65px;
    margin-top: 37px;
    color: white;
}
.number {
font-family: "Playfair Display", serif;
font-size: 70px;
color: #5bbfdd;
font-weight: 600;
}
.text {
    font-family: "Playfair Display", serif;
    font-size: 24px;
}


[Hình minh họa]



-----------
Cập nhật [24/9/2018]
-----------
Xem thêm: Tổng hợp các bài viết về Làm web
Xem thêm: Làm web (04) - Photoshop và Bootstrap (04)

Làm web (02) - Photoshop và Bootstrap (02)

Tiếp theo của: Làm web (01) - Photoshop và Bootstrap (01)
-----

5          Tạo hiệu ứng cho Header

5.1        Dùng phông của Google (online và offline)


Một số loại phông (font) nên dùng: Ubuntu, Open Sans, Bebas Neue, Montserrat, Raleway, Cabin, Lato, PS Sans, Entypo Social. Lưu ý: nên chọn những phông đã được Việt hóa, nếu không, sẽ có tình trạng những chữ có dấu bị méo mó, xô lệch.

Phông Open Sans của Google, đã được Việt hóa, khuyến khích sử dụng.

Có thể dùng Open Sans trực tiếp trên mạng, kèm theo một bản dự phòng trong trường hợp không có mạng.

Dùng Open Sans trực tiếp trên mạng:

<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">

Dùng Open Sans trên máy:


Open Sans cho tiếng Việt (làm theo 4 bước):

Ví dụ một đoạn mã dùng @font-face:

/* open-sans-300 - vietnamese_latin */
@font-face {
  font-family: 'Open Sans';
  font-style: normal;
 font-weight: 300;
 src: local('Open Sans Light'), local('OpenSans-Light'),
       url('../vendor/fonts/open-sans-v15-vietnamese_latin/open-sans-v15-vietnamese_latin-300.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */
       url('../vendor/fonts/open-sans-v15-vietnamese_latin/open-sans-v15-vietnamese_latin-300.woff') format('woff'); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
}

5.2        Tạo hiệu ứng cho header


– Trong Sublime Text, bấm Ctrl + H để mở cửa sổ Find & Replace (Tìm và Thay thế).

– Tạo hiệu ứng cho phần tử đi từ trên xuống:

@keyframes move_top_down {
    from { transform: translateY(-300px); opacity: 0; } /* cho phần tử đi lên trên 300px so với vị trí gốc, và làm mờ hoàn toàn*/
    to { transform: translateY(0); opacity: 1; } /* cho phần tử trở về vị trí gốc và làm rõ lại */
}

.navbar-default .navbar-collapse {
    opacity: 0;
    animation: move_top_down 1s forwards;
    animation-delay: .3s;
}

– Tạo hiệu ứng cho phần tử đi từ trái qua:

@keyframes move_left_right {
    from { transform: translateX(-500px); opacity: 0; }
    to { transform: translateX(0); opacity: 1; }
}

.slide-text {
    opacity: 0;
    animation: move_left_right 1s forwards;
    animation-delay: .7s;
}

– Tạo hiệu ứng thu nhỏ:

@keyframes zoom_out {
    from { transform: scale(3); opacity: 0; }
    to { transform: scale(1); opacity: 1; }
}

.navbar-header {
    animation: zoom_out 1s forwards;
}

(Photoshop) để tắt và hiển thị lưới (12 cột) dùng tổ hợp phím Ctrl + ;

(Photoshop) để bỏ các slice đã chọn, vào menu View\Clear Slices

– Cách tạo một kẻ ngang phía trên một dòng văn bản (line over): tạo một phần tử sau dòng văn bản bằng pseudo-element :after, thiết lập position cha là relative, con là absolute, sau đó tùy chỉnh màu, vị trí, độ dài, chiều cao cho phù hợp. Xem đoạn mã ví dụ,

.line-over {
    color: #696868;
    font-weight:  600;
    text-transform: uppercase;
    font-size: 33px;
    position: relative;
    padding-top: 15px;
}

.line-over:after {
    content:  "";
    width: 50px;
    height: 6px;
    background: #5bbfdd;
    position:  absolute;
    top: 0px;
    left: 0px;
}

[Hình minh họa]



– Định dạng cho một nút,

a.btn.btn-default.button-welcome {
    border:  0;
    background: #0e0e0e;
    color: #5bbfdd;
    padding:  18px 30px;
    border-radius:  0;
    border-bottom: 4px solid #5bbfdd;
    font-weight: 600;
    font-size: 17px;
    text-transform:  uppercase;
}

a.btn.btn-default.button-welcome:hover {
    color: #0e0e0e;
    background: #5bbfdd;
    border-color:  black;
    transition:  0.3s;
}

[Hình minh họa]

(bình thường)



(:hover)



– Sử dụng các hiệu ứng có sẵn của jQuery cho các nút:

 + Vào google, gõ từ khóa animate, hoặc vào trực tiếp trang này: https://daneden.github.io/animate.css/

 + Bấm chuột vào mục Download Animate.css, trình duyệt sẽ mở ra toàn bộ mã nguồn, bấm Ctrl+A để chọn hết mã nguồn, lưu lại về máy với tên bất kì, ví dụ animate.css.

 + Link vào trang index.html

 <link rel="stylesheet" href="css/animate.css">

 + Vậy là có thể sử dụng được, ví dụ,

a.btn.btn-default.button-welcome:hover {
    color: #0e0e0e;
    background: #5bbfdd;
    border-color: black;
    transition: 0.3s;
    animation: bounce 1s;
}

[Hình minh họa cho phần header]



-----------
Cập nhật [22/9/2018]
-----------
Xem thêm: Tổng hợp các bài viết về Làm web
Xem thêm: Làm web (03) - Photoshop và Bootstrap (03)