• fans
  • 1036 reader
  • followers
Chương 4 – Hiệu ứng
  • Tutorial Details
  • Độ khó: Căn bản
  • Thời gian: 30 phút
  • File size: < 1 Mb
  • Yêu cầu: Mọi đối tượng đều có thể học được
Có 8 bài viết trong series jQuery căn bảnHiển thị

Các hiệu ứng động của jQuery sẽ làm cho trang web của bạn thêm phần sinh động. Jquery cho phép bạn ẩn hiện, trượt lên trượt xuống các thành phần của trang web. Bạn cũng có thể cho nó xảy ra cùng một lúc hoặc theo thứ tự định trước. Trong phần này chúng ta sẽ tìm hiểu các hiệu ứng jQuery và kết hợp chúng để tạo ra những hiệu ứng hay.

Thay đổi Inline CSS

Trước khi chúng ta học những hiệu ứng jQuery, chúng ta cần xem lại một chút về CSS. Trong những chương trước đây chúng ta thay đổi giao diện của các thành phần trên trang bằng cách khai báo thuộc tính của class trong một stylesheet riêng biệt. Sau đó chúng ta thêm hoạc loại bỏ những class đó bằng jQuery. Về cơ bản thì cách này nên được sử dụng để thêm CSS vào HTML bởi vì nó tôn trọng quy luật tách riêng phần trình bày và cấu trúc. Tuy nhiên, đôi khi chúng ta muốn áp dụng style cho những thành phần chưa được, hoặc khó mà được, định dạng bằng stylesheet. Nhưng rất may mắn là jQuery có phương thức .css() để sử dụng cho những trường hợp này.

Phương thức này hoạt động bằng cả hai cách lấy và đăt. Để lấy giá trị của một thuộc tính, chúng ta chỉ cần chuyển tên của thuộc tính đó thành một một chuỗi, dạng như .css(‘backgroundColor’). Jquery có thể hiểu được những thuộc tính kết hợp bởi nhiều từ và nối với nhau bằng dấu – như là trong CSS (‘background-color’), hoặc dạng viết hoa chữ cái đầu như là (‘backgroundColor’). Để định dạng thuộc tính style, phương thức .css() có hai cách sử dụng. Cách thứ nhất chỉ nhận một cặp thuộc tính – giá trị. Cách thứ hai là nhận một tập hợp các cặp thuộc tính – giá trị.

.css('property','value')
.css({property1: 'value1', 'property-2': 'value2'}) 

Những người đã quen với JavaScript sẽ nhận ra đây là dạng đối tượng trực kiện JavaScript.

Chú ý: Các giá trị số không dùng dấu ngoặc kép trong khi giá trị chuỗi phải có dấu ngoặc kép. Tuy nhiên, khi sử dụng bản đồ ký hiệu, dấu ngoặc kép không bắt buộc cho những tên thuộc tính được viết dưới dạng in hoa chữ cái đầu.

Chúng ta sử dụng phương thức .css() cũng giống như cách chúng ta đã sử dụng .addClass(). Bằng cách gán nó cho một Selector sau đó thì Bind nó vào một sự kiện. Để minh hoạ, chúng ta sẽ sử dụng bộ nút thay đổi định dạng trong chương 3, nhưng với mã HTML khác.

<div id="switcher">
        <div class="label">Cỡ chữ</div>
        <button id="switcher-default">Mặc Định</button>
        <button id="switcher-large">Lớn</button>
        <button id="switcher-small">Nhỏ</button>
    </div><!--End #switcher-->
    
    <div class="speech">
        <p>
        Pellentesque habitant morbi tristique senectus et netus et malesuada 
        fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, 
        tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. 
        Aenean ultricies mi vitae est. 
        </p>
   </div><!--End .speech-->

Với một chút định dạng CSS cơ bản chúng ta có được hình dưới đây.

chuong 4 - hieu ung

Xem Demo online – Example 1

Khác với bộ nút ở chương trước, trong chương này chúng ta sẽ sử dụng phần tử <button>. Khi người dùng nhấp chuột vào nút Lớn hoặc Nhỏ sẽ tăng hoặc giảm cỡ chữ trong thẻ <div class=’speech’>. Cuối cùng họ cũng có thể nhấn vào nút Mặc Định để trả cỡ chữ về giá trị ban đầu.

Nếu chúng ta chỉ muốn tăng cỡ chữ một lần với một giá trị đặt trước thì chúng ta vẫn có thể sử dụng phương thức .addClass(). Nhưng lần này chúng ta sẽ cho phép người dùng nhấp chuột nhiều lần vào nút, và mỗi lần nhấp cỡ chữ sẽ tăng hoặc giảm dần lên. Tất nhiên bạn cũng có thể tạo ra nhiều class và gán chúng cho mỗi lần nhấp chuột và sau đó chúng ta cho chạy vòng lặp qua từng class. Nhưng làm như thế nó thủ công quá và rất mất thời gian, cho nên cách lẹ hơn sẽ là lấy cỡ chữ của đoạn văn đó trước, sau đó thì tăng nó lên với giá trị mình muốn. Trong ví dụ này chúng ta sẽ cho tăng cỡ chữ lên 40% mỗi khi người dùng nhấp chuột.

Đoạn mã của chúng ta sẽ bắt đầu bằng $(document).ready() và bộ xử lý sự kiện $(‘#switcher-large’).click()

$(document).ready(function() { 
$('#switcher-large').click(function() { 
});
});

Để biết được cỡ chữ của đoạn văn đó là bao nhiêu rất đơn giản, jQuery có phương thức .css() cho phép bạn làm việc này. Tuy nhiên phương thức này lại trả về giá trị có thêm cái đuôi ‘px’, ví dụ là đoạn văn có kích thước chữ là 16px thì giá trị trả về sẽ là 16px. Cho nên chúng ta phải tìm cách cắt cái đuôi ‘px’ đó đi và chỉ giữ lại phần giá trị số là 16. Một điểm nữa là khi chúng ta định sử dụng một đối tượng jQuery nhiều lần, bạn nên nhớ lại selector bằng cách lưu đối tượng đó vào một biến.

$(document).ready(function() { 
var $speech = $('div.speech'); //lưu đối tượng jQuery vào biến $speech
$('#switcher-large').click(function() { 
var num = parseFloat($speech.css('fontSize'), 10); 
});
});

Ở dòng code thứ 2 chúng ta đã tạo ra một biến là $speech và lưu đối tượng jQuery vào đó. Bạn cũng nên lưu ý cách tôi đặt tên biến bắt đầu bằng dấu $, bởi vì trong javaScript bạn hoàn toàn có thể sử dụng dấu $ để đặt tên cho biến. Cho nên đây là cách để nhắc nhở chúng ta về sau là biến này đang chứa một đối tượng jQuery.

Trông bộ xử lý .click(), chúng ta sử dụng hàm parseFloat() để cắt đi phần đuôi ‘px’ và chỉ giữ lại phần giá trị số. Hàm parseFloat() sẽ kiểm tra một chuối theo thứ tự từ trái qua cho đến khi nó gặp một ký tự không phải là dạng số. Chuỗi số sẽ được biến thành dạng số thập phân. Trong ví dụ này nó sẽ biến chuỗi ’16′ thành dạng số 16 (quá giỏi >:<) và tất nhiên nó cũng sẽ cắt phần đuôi 'px' đi bởi vì nó không phải là số. Còn trong trường hợp chuỗi đó bắt đầu bằng chữ thay vì là số, hàm .parseFloat() sẽ trả về một giá trị là NaN, là chữ viết tắt của Not A Number (không phải số). Hàm parseFloat() có argument thứ hai để đảm bảo rằng giá trị số trả về dưới dạng hàng chục chứ không phải các dạng khác.

Cuối cùng chúng ta chỉ cần nhân biến num với 1.4 (tăng 40%) và sau đó đặt kích cỡ chữ bằng cách kết hợp num với ‘px’

$(document).ready(function() { 
var $speech = $('div.speech'); 
$('#switcher-large').click(function() { 
var num = parseFloat($speech.css('fontSize'), 10 ); 
num *= 1.4; 
$speech.css('fontSize', num + 'px'); 
});
});

Lưu ý: Phương trình num *= 1.4 là dạng viết tắt phổ biến. Nó tương đương với num = num * 1.4. Nếu bạn thấy cách viết thường dễ hiểu hơn thì bạn cũng có thể sử dụng. Còn nếu không bạn cũng có thể dùng cách viết trên cho các phương trình khác như tính cộng num += 1.4, tính trừ num -= 1.4, tính chia num /= 1.4 và chia với số dư num %= 1.4.

chuong 4 - hieu ung

Xem Demo online – Example 2

Bây giờ để nút Nhỏ Hơn có thể hoạt động, chúng ta sẽ chia num /= 1.4. Hơn nữa chúng ta sẽ kết hợp cả hai phép tính trên vào một bộ xử lý .click() cho tất cả các phần tử <button> nằm trong thẻ <div id=’switcher’>. Sau khi đã tìm ra được giá trị số, và dựa vào ID của nút nào được nhấn, chúng ta sẽ sử dụng phép nhân hoặc chia. Dưới đây là đoạn mã để làm việc này.

$(document).ready(function() { 
var $speech = $('div.speech'); 
$('#switcher button').click(function() { 
var num = parseFloat( $speech.css('fontSize'), 10 ); 
if (this.id == 'switcher-large') { 
num *= 1.4; 
} else if (this.id == 'switcher-small') { 
num /= 1.4; 
} 
$speech.css('fontSize', num + 'px); 
});
});

Nhớ lại ở chương 3 chúng ta có thể lấy thuộc tính id của một phần tử DOM bằng cách sử dụng từ khoá this, trong trường hợp này nó xuất hiện trong mệnh đề if … else. Làm như vậy thì nó hiệu quả hơn là phải tạo ra một đối tượng jQuery chỉ để kiểm tra giá trị của một thuộc tính.

Tiếp theo chúng ta cũng phải làm cho nút Mặc Định hoạt động để người dùng có thể trả về giá trị mặc định lúc ban đầu. Việc chúng ta cần làm là lưu kích thước font chữ của đoạn văn vào một biến ngay khi DOM sẵn sàng. Sau đó chúng ta có thể gọi lại giá trị này mỗi khi nút Mặc Định được nhấp. Chúng ta cũng có thể sử dụng thêm một mệnh đề else … if nữa, nhưng có lẽ mệnh đề Switch trong trường hợp này là hợp lý hơn.

$(document).ready(function() { 
var $speech = $('div.speech'); 
var defaultSize = $speech.css('fontSize'); 
$('#switcher button').click(function() { 
var num = parseFloat( $speech.css('fontSize'), 10 ); 
switch (this.id) { 
case 'switcher-large': 
num *= 1.4; 
break; 
case 'switcher-small': 
num /= 1.4; 
break; 
default: 
num = parseFloat(defaultSize, 10); 
} 
$speech.css('fontSize', num + 'px'); 
});
});

Ở đoạn code trên chúng ta vẫn kiểm tra giá trị của this.id và thay đổi kích thước chữ dựa vào nó, nhưng nếu giá trị của nó không phải là ‘switcher-large’ hoặc ‘switcher-small’ thì nó sẽ mặc định là kích cỡ ban đầu.

Xem Demo online – Example 3

Ẩn hiện cơ bản

Hai phương thức .hide().show(), khi không có tham số, có thể được coi là phương thức rút gọn của .css(‘display’,’string’), ở đó ‘string’ là một giá trị bất kỳ. Hiệu ứng đạt được của hai phương thức này thì cũng đơn giản như tên gọi, có nghĩa là nó sẽ ẩn hoặc hiện một thành phần nào đó.

Phương thức .hide() sẽ làm cho thuộc tính inline style cho các phần tử phù hợp trở thành display:none. Nhưng cái hay của phương thức này là ở chỗ nó ghi nhớ giá trị thuộc tính của display (thường là inline hoặc block) trước khi nó bị đổi thành none. Ngược lại, phương thức .show() lại trả về giá trị thuộc tính display ban đầu trước khi nó bị biến thành display:none.

Tính năng này của .show() và .hide() đặc biệt có ích khi bạn muốn ẩn một thành phần nào đó có thuộc tính display mặc định đã được khai báo trong stylesheet. Ví dụ, phần tử <li> có giá trị display mặc định là display:block, nhưng chúng ta lại muốn biến nó thành display:inline để sử dụng trong menu nằm ngang. May cho chúng ta là khi sử dụng phương thức .show() cho một thành phần bị ẩn như ở ví dụ này là những thẻ <li>. Nó sẽ không trả lại giá trị mặc định là display:block, bởi vì nếu như thế thì mỗi thẻ <li> lại xuất hiện trên một hàng thì hỏng hết. Thay vào đó, các phần tử sẽ được trả lại trạng thái trước là display:inline, như thế thì menu nằm ngang mới có thể hoạt động được.

Để minh hoạ cho tính năng trên, chúng ta sẽ thêm một đoạn văn bản thứ hai và một thẻ link “read more” vào sau đoạn văn thứ nhất.

<div id="switcher">
        <div class="label">Cỡ chữ</div>
        <button id="switcher-default">Mặc Định</button>
        <button id="switcher-large">Lớn</button>
        <button id="switcher-small">Nhỏ</button>
    </div><!--End #switcher-->
    
    <div class="speech">
        <p>
        Pellentesque habitant morbi tristique senectus et netus et malesuada 
        fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, 
        tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. 
        Aenean ultricies mi vitae est. 
        </p>
        <p>
        Pellentesque habitant morbi tristique senectus et netus et malesuada 
        fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, 
        tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. 
        Aenean ultricies mi vitae est. 
        </p>
        
        <a href="#" class="more">Read More</a>

Khi DOM sẵn sàng thì đoạn văn thứ hai bị ẩn đi

$(document).ready(function() {
$('p:eq(1)').hide();
});
chuong 4 - hieu ung

Xem Demo online – Example 4

Khi đường link Read More được click thì đoạn văn thứ 2 sẽ xuất hiện và chữ Read More sẽ bị ẩn đi

$(document).ready(function() {
          $('p:eq(1)').hide();
          $('a.more').click(function() { //Khi thẻ <a class='more'> được click
            $('p:eq(1)').show(); //cho hiển thị đoạn văn thứ 2
            $(this).hide(); //this ở đây là chỉ đối tượng jQuery a.more ẩn đi
            return false; // ngăn không cho đường link hoạt động như mặc định
          });        
        });
chuong 4 - hieu ung

Dòng mã mà bạn cần lưu ý ở trên là đoạn return false. Bởi vì mặc định của đường liên kết mỗi khi được nhấp là sẽ liên kết đến trang khác hoặc phần nào đó. Nhưng khi ta thêm dòng return false, nó sẽ giúp ngăn chặn mặc định của đường liên kết.

Hai phương thức .show() và .hide() ở trên tuy ngắn gọn và dễ sử dụng nhưng nó lại không được “mướt” cho lắm, cho nên ở phần tiếp theo chúng ta sẽ làm cho nó mướt hơn.

Demon Warlock Website facebook twitter user_email

Tôi được sinh ra ở Việt Nam, nhưng hiện tại đang sống và làm việc tại Mỹ. Ngành tôi học không có liên quan gì đến thiết kế web. Nhưng đây là sở thích từ ngày còn là sinh viên du học, do vậy bây giờ dù cho đang đi làm nhưng tôi vẫn thích dùng thời gian rảnh rỗi của mình để học về thiết kế web. Như các bạn, tôi cũng việc mày mò tự học và khám phá.

  • DUCBM90

    thanks DW nhieu nha

  • Pirates Pirates

    Anh DW cho e hỏi vẫn đoạn code :
    $(document).ready(function() {
    var $speech = $(‘div.speech’);
    var defaultSize = $speech.css(‘fontSize’);
    $(‘#switcher button’).click(function() {
    var num = parseFloat($speech.css(‘fontSize’) , 10 );
    switch (this.id) {
    case ‘switcher-large’:
    num *= 1.4;
    break;
    case ‘switcher-small’:
    num /= 1.4;
    break;
    default:
    num = parseFloat(defaultSize, 10);
    }
    $speech.css(‘fontSize’, num + ‘px’);
    });
    });

    E sửa lại thành :
    $(document).ready(function() {
    var $speech = $(‘div.speech’);
    var defaultSize = $speech.css(‘fontSize’);
    $(‘#switcher button’).click(function() {
    var num = parseFloat(defaultSize , 10 );
    switch (this.id) {
    case ‘switcher-large’:
    num *= 1.4;
    break;
    case ‘switcher-small’:
    num /= 1.4;
    break;
    default:
    num = parseFloat(defaultSize, 10);
    }
    $speech.css(‘fontSize’, num + ‘px’);
    });
    });

    Tại sao khi ấn vào button – ví dụ Large – nó chỉ tăng kích thước lên 1.4 – Chỉ có tác dụng lần click đầu tiên !

  • Sang

    anh ơi. anh cho em xin cái css của chương 4 được hok anh.thân anh.mong chờ phản hồi.:))

  • teoee

    cái này:var $link = $(this);
    if ( $link.text() == “read more” ) {
    $link.text(‘read less’);
    } else {
    $link.text(‘read more’);
    }
    có t/d gì vậy sao em bỏ đi nó vẫn chạy bt

  • bao hoa

    num = parseFloat(def,10);

    cho e hỏi số 10 ở đây có nghĩa la j vậy

  • http://nvt.com.vn Mr Tri

    Trong Jquery cái nào cho loop nhỉ, chẳng hạn như làm 1 cái wiget cho nó hiện ra các bài viết nhưng được 50s nó sẽ tự động slideUp các bài viết khác, cứ mỗi 50s thì hiện ra 1 list các bài viết khác, DW hướng dẫn dùm, dùng cái nào có event timer interval 50s vậy?

    • http://bocau.net Trung

      Dùng ajax để load, bạn tìm hiểu jquery ajax đi nha

  • Chie

    Bài viết chi tiết quá , cám ơn anh đã bỏ công sức để trình bày

  • http://nothing sonoop

    Thanks anh DW, bài viết của anh có hệ thống đi theo một hướng từng tự rất dể hiểu.

    • http://nothing sonoop

      $(document).ready(function(){
      var $increa = $(‘.speech’);
      var def = parseFloat($increa.css(‘fontSize’), 10);
      $(‘#switcher button’).click(function() {
      var num = parseFloat($increa.css(‘fontSize’), 10);
      if(this.id == ‘large’) {
      num += 1;
      }else if (this.id == ‘small’){
      num -= 1;
      }
      else if (this.id == ‘default’){
      num = def;
      }
      $increa.animate({fontSize: num + ‘px’}, 1);
      });

      $(‘p:eq(1)’).hide();
      $(‘a.more’).toggle(function(){
      $(‘p:eq(1)’).show(1000);
      $(this).text(‘Hide Now’);
      return false;
      }, function(){
      $(‘p:eq(1)’).hide(1000);
      $(this).text(‘Show Now’);
      return false;
      });

      $(‘#show a’).click(function(){
      $(‘div#login’).animate({opacity: ‘toggle’}, ’1000′);
      return false;
      });

      $(‘div.label’).click(function(){
      var paraWidth = $(‘div.speech p’).outerWidth();
      var switchWidth = $(this).parent().outerWidth();
      $(this).parent().animate({height: ‘+=20′}, ’1000′)
      .animate({left: ‘+=5px’}, {duration: ’100′, queue: false})
      .fadeTo(‘slow’,0.5)
      .slideUp(‘slow’)
      .fadeTo(‘slow’,1, function(){
      $(this).css(‘backgroundColor’, ‘#f00′);
      })
      .slideDown(‘slow’);

      });

      $(‘p:eq(2)’).css(‘border’, ’1px solid #333′)
      .click(function() {
      $(this).slideUp(‘slow’)
      .next().slideDown(‘slow’);
      });
      $(‘p:eq(3)’).css(‘backgroundColor’, ‘#ccc’).hide();

      $(‘p:eq(3)’).click(function() {
      $(this).slideUp(‘flow’);
      $(‘p:eq(2)’).slideDown(‘flow’);
      });
      });

      Code em chơi 1 lèo vậy có sao hem anh nhỉ?

  • zhaolong

    Anh DW làm thêm cái video hướng dẫn nữa thì thật tuyệt. Mình đang học JQuery của anh. Chắc rùi sẽ có ajax thui :D.

    Thanks anh DW nhìu nhiu.

  • traiphonui

    $(document).ready(function(){
    $(“.a1″).hide();
    $(“.a2″).mouseover(function()
    $(this).siblings().slideToggle(“normal”);
    });
    });
    Bạn cho mình hỏi: Khi mình viết đoạn jquery trên thì khi đưa chuột vào class a1 thì show ra a2. Đưa chuôt vào 1 lần nữa thì ẩn a2. Bây giờ mình muốn khi đưa chuột vào a1 thì hiện a2. Khi rê chuột ra khỏi a1 thì ẩn a2 liền chứ không phải đưa ra ngoài rồi đưa vào 1 lần nữa mới ẩn a2 thì thêm hàm như thế nào?
    Chân thành cảm ơn.

    • Đỗ Văn Tiến

      Không biết có phải thế này không.
      $(document).ready(function(){
      $(“.a1″).hover(function(){
      Hiện .a2
      },function(){
      Ẩn .a2
      });
      });

    • http://ngankute.coo.vn JimmyLin

      @traiphonui says:

      $(document).ready(function(){
      $(‘.a1′).hover(function(){
      $(‘.a2′).show()
      },function(){
      $(‘.a2′).hide()
      });
      });

  • Thoi

    Thanhk nhiều nhe! Tôi đang cố gắng học về jquery và tôi thấy bài viết này hay!

    • http://Đangmò Ku Noob

      anh DW ơi sao mấy bài này ko có link down vay anh

  • Wpine2000

    Anh ơi, trong chuơng 4 phần làm việc với Đa Hợp Phần Tử ấy. em thấy khi dòng 3 ẩn thì dòng thứ 4 không hiện lên mà, nếu được anh chỉnh lại cho chúng em với nhé.
    Cảm ơn anh nhiều.!

  • http://dinhcoi.info kenichifc

    thanks for tutorial :)

  • asterix

    Hi, em muốn hỏi anh về cách thu nhỏ webpage có sử dụng jQuery. Chuyện thế này, e có file CSS định dạng pixel, lúc duyệt web ở cái notebook thì nó ko vừa do quá cỡ.; e có đọc 1 bài viết hướng dẫn sử dụng jQuery để chuyển pixel thành Em. Nhưng do e mới học nên ko hiểu lắm. anh DW giải thích giúp nhé. e nghĩ cái này cũng khá hay hj. Thanks

    Link bài viết bằng tiếng anh:

    http://www.filamentgroup.com/lab/update_jquery_plugin_for_retaining_scalable_interfaces_with_pixel_to_em_con/

  • http://www.programmervn.com/ Truong

    Cảm ơn anh nhé. Vài tháng vừa rồi không thấy anh viết bài nên ít vào, bây giờ thì ngày nào cũng phải zo tìm cái mới. Em chủ yếu làm về .Net nên rất thích các tutorials về jquery và css

  • The-Capslock

    Sự trở lại rất hoành tráng của bác DW! Thanks bác!

  • http://www.izwebz.com Demon Warlock

    @kaylaximuoi: yeah yeah! con đọc mà thấy chỗ nào “cà giựt” thì nói chú để chú sửa nha.

    @h2you: chắc cũng sẽ có mà phải từ từ các chú. Anh muốn lần này tập trung vào jQuery đã. Làm cho xong một phần rồi đến phần kia. Chí để dở dang lâu quá cũng kỳ.

  • kaylaximuoi

    Con đã đọc xong chương 4 rồi, cảm ơn chú nhiều!!! Giờ con quay lại đọc mấy chương trước, thời gian rồi vắng chú, chữ nghĩa cũng lần lượt nối gót ra đi.. :D

  • abcd

    Lâu lăm rồi ko có tut wordpess của anh DW nhỉ, nhớ anh quá :D

    • h2you

      Đúng rồi anh DW ra thêm một số tuts về WP nữa đi.

  • http://it2hut.net tinharvard

    bài viết rất hay và đầy đủ nữa…
    cảm ơn anh…

  • http://butchivn.com/ mrkyt

    Một ngày chưa có Video thì vẫn chưa tin về sự trở lại của DW :(

  • http://www.izwebz.com Demon Warlock

    @LaCrus: đây là dạng ebook mà chứ có phải tutorial đâu mà cần chia ra em. Cái này để cho những ngươi thực sự quan tâm đến jQuery muốn học từ đầu đến cuối.

    @đoan: yeah yeah! sẽ có video thui em. Mới quay lại nên còn hơi “bỡ ngỡ”. :D

  • kiepphongtran2k3

    Bạn ơi, chương 3 bạn nói còn nữa mà sao giờ đã qua chương 4 rồi nè. Dù sao cũng thanks bạn vì những bài viết quá hay

  • đoàn

    anh dw làm 1 video hướng dẫn anh em đi lâu lắm ko dc nghe giọng nói của anh thấy nhớ quá !! lý thuyết đi đôi với thực hành là học nhanh nhất

  • http://pinkhouseshop.tk LaCrus

    Em nghĩ nên chia bài này thành 3 hoặc 4 phần thì hợp lý hơn :|
    http://pinkhouseshop.tk (demo)

    • kats

      Dong y 2 tay voi ban nay

  • Son NT

    Bài viết hay quá! Thank anh DW!

  • http://skyvnn.net Goncorpius

    Chưa đọc hết ,nhưng phải thanks bác vì đã có bài mới hay và bổ ích thế này ,để rảnh ngồi ngâm xem ^^

  • Minh

    Bài viết chi tiết quá, thanks bác

Newbie

Các series nên xem trên izwebz cho newbie

Khi vào izwebz chắc nhiều bạn cho rằng các bài viết trên izwebz đều không có hệ thống gì cả? Thực chất, các bài biết đều đi theo một series của riêng nó, ví dụ như PHP, HTML & CSS, PSD2HTML, Photoshop, illustrator,… Trong bài viết này, mình sẽ tổng hợp lại các series bài viết cần thiết cho một newbie.

Izwebz facebook group

Social connect

Recent Comments

Archives