Showing posts with label Thiết kế web. Show all posts
Showing posts with label Thiết kế web. Show all posts
Tuesday, December 17, 2019

Hướng dẫn tạo slider bằng plugin Advanced Custom Fields PRO

Hi! anh em mình là Thịnh DEV đây đã lâu không viết về lập trình rồi, hôm nay mình rảnh nên thực hành và hướng dẫn luôn anh em cách tạo ra slide cho web wordpress bằng Advanced Custom Fields PRO, bởi gần đây trên mạng nhiều anh em tìm hiểu


Để làm được điều này chúng ta cần:
Plugin Advanced Custom Fields PRO tải tại đây => TẢI VỀ , yên tâm sạch 100%
Javascript/ Framework js. ở đây mình dùng Owlcarousel2, anh em dùng cái nào cũng được nhé Bootstrap cũng được
HTML/CSS cơ bản
PHP cơ bản
Đó là những kiến thức và công cụ để cho chúng ta tạo ra slider nếu các anh em chưa hiểu thì hãy lên google tìm hiểu thêm nhé, ở đây mình chỉ hướng dẫn làm và có code tham khảo :D

Nào chúng ta hãy bắt tay thực hiện


Hướng dẫn tạo slider bằng plugin Advanced Custom Fields PRO chi tiết

Mình sẽ làm theo trình tự từ các kiến thức nên trên để các anh em nắm rõ sử sử dụng Advanced Custom Fields PRO => Javascript/ Framework js => HTML/CSS => get dữ liệu ra bằng PHP

Đầu tiên tải và cài plugin Advanced Custom Fields PRO

Và copy đoạn code này dưới đây vào file function.php để tạo ra một option theme lấy tên là slider, cái này tùy anh em đặt nhé

if( function_exists('acf_add_options_page') ) {

acf_add_options_page(array(

'page_title' => 'Slider', // Title hiển thị khi truy cập vào Slider

'menu_title' => 'Slider', // Tên menu hiển thị ở khu vực admin

'menu_slug' => 'theme-settings', // Url hiển thị trên đường dẫn của Slider

'capability' => 'edit_posts',

'redirect' => false

));

}

Vào admin để kiểm tra anh em sẽ thấy xuất hiện menu tùy chỉnh như hình phía dưới!.



Lưu ý nó trắng trơn chưa có gì đâu chỉ có dòng chữ Create a Custom Field Group sau đó anh em click vào dòng chữ ấy để di chuyển và làm việc với Custom Field

Chúng ta bắt đầu thêm group field và thêm các field mong muốn.
Mình sẽ đặt group field là Slider nhé muốn nó hiển thị ở cái Slider mà vừa mình tạo ra thì chúng ta nhìn ở khu vực location các anh em chọn Options Page và lưu lại như hình phía dưới.



Tiếp theo ta thêm các field vào bằng cách + Add Field

Chú ý: chúng ta có thể tạo các nhiều field với Field Type là Image tuy nhiên nó không tối ưu và code nhiều dòng vì Slider thường có nhiều ảnh ví dụ muốn có 10 ảnh chạy thì phải tạo ra nhiều Field và nó sẽ giới hạn việc up ảnh muốn nhiều hơn thì lại phải thêm mới
Thay vào đó chúng ta sử dụng Field Type là Repeater


 Trong nó ta chọn Add Field ở chỗ Sub Fields tạo ra 2 Field mới:

+ Image 
+ Link

Như ảnh dưới đây:






Sau khi thêm xong chúng ta lưu và vào Slider se thấy hiển thị như hình dươi và ấn vào thêm ảnh + link thôi


Xong bước cấu hình plugin ACF anh em muốn có một slider chạy thì làm sao? ở đây mình sẽ chia làm 2 phần nhé

1 Tạo ra slide bằng html css + js


Mã html tĩnh:
<div id="home" class="slide-anh owl-carousel owl-theme">
<div class="single-hs-item">// các bạn có thể copy 2 cái và thêm ảnh vào chạy thử
<a href="link">
<img src="anh">
</a>
</div>
</div>
 Mã css: 
.slide-anh {position: relative;}
.owl-carousel .owl-nav button.owl-prev {background-color: #333;position: absolute;left: 0;top: 50%;
color: #fff;font-size: 30px;margin: -40px 0 0;border-radius: 0;height: 50px;width: 50px;}
.owl-carousel .owl-nav button.owl-next {background-color: #333;position: absolute;right: 0;top: 50%;color: #fff;font-size: 30px;margin: -40px 0 0;border-radius: 0;height: 50px;width: 50px;
}
.owl-theme .owl-nav {margin-top: 0;}
.owl-dots {position: absolute;left: 0;right: 0; bottom: 20px;}
.owl-theme .owl-dots .owl-dot span {width: 15px;height: 15px; border-radius: 50%}
.owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span {background: #333;}
.single-hs-item img{
width: 100%
}
@media only screen and (max-width: 600px) {
.owl-carousel .owl-nav button.owl-next {
top: auto;
margin: 0;
bottom: 0px;
}
.owl-carousel .owl-nav button.owl-prev {
top: auto;
margin: 0;
bottom: 0px;
}
.owl-dots {
bottom: 10px;
left: 50px;
right: 50px;
}
}

Đối với thư viện OWL các bạn copy code bên dưới như sau:

Bỏ ở header:
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.theme.default.min.css">

Bỏ ở Footer:
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js"></script>


<script>
$('.slide-anh').owlCarousel({
loop:true,
margin:0,
padding:0,
responsiveClass:true,
responsive:{
0:{
items:1,
nav:true
},
600:{
items:1,
nav:false
},
1000:{
items:1,
nav:true,
dots: true,
loop:false
}
}
})
</script>

2 Get dữ liệu ra bằng PHP
Để get dữ liệu ra chúng  ta có code php sau:
Ở đây mình sai Repeater ACF và code thêm cho nó các bạn có thể đọc tài liệu về nó trong plugin ACF để hiểu thêm nhé
Chúng ta có dòng code php như sau:
 <div id="home" class="slide-anh owl-carousel owl-theme">
<?php if ( have_rows('slider_anh','option') ):?>
  <?php  while ( have_rows('slider_anh','option') ) : the_row(); ?>
<div class="single-hs-item">
    <?php $image=get_sub_field('image','option'); ?>
    <?php $link=get_sub_field('link','option'); ?>
    <?php if($image): ?>
     <?php if($link): ?>
      <a href="<?php echo $link['url']; ?>"><img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt'];?>"></a>
      <?php else : ?>
        <a href="#"><img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt'];?>"></a>
        <?php endif ?>
      <?php else : ?>
      <p>Chưa cập nhập..</p>
       <?php endif ?>
     
</div>
<?php endwhile; ?>
       <?php else : ?>
       <?php endif; ?>
</div>
Ở code trên mình có thể giải thích như sau
- Chỗ bôi đỏ chính là cái Repeater có Field Name mà mình đã đặt tên ở phần cấu hình ACF
- Chỗ bôi xanh chính là  Field Name của sub_field thuộc Repeater trên
- Vòng lặp trên có nghĩa cơ bản la kiểm trả điều kiện các biến trên tồn tại hay không nếu tồn tại thì xuất dữ liệu ra.

Trên đây là tất cả những gì mình hướng dẫn anh em tạo ra slider cho website wordpress bằng ACF. Chúc anh em thành công! Nếu thấy bổ ích hãy truy cập blog của mình thường xuyên mình sẽ có nhiều bài về lập trinh hay nữa :D
Wednesday, September 18, 2019

Tách nền ảnh trực tuyến chỉ vài giây không cần photoshop

Hi! anh em nhiều anh em làm front end hay design web thường hay sử dụng nhiều ảnh để thiết kế, có những yêu cầu cần lọc bỏ nền chỉ giữ lại hình chủ.

Việc đó, có rất nhiều phần mềm để làm. Tuy nhiên, nó mất rất nhiều thời gian và tỉ mỉ, nếu anh em nào lười và muốn nhanh gọn mà rất nuột nà thì hãy tham khảo công cụ tách nền anh trực tuyến sau

Công cụ tách nền ảnh trực tuyến



Đầu tiên chúng ta truy cập vào web https://www.remove.bg


Ở đây nó cho upload ảnh từ máy tính của bạn hay đường dẫn nhé hoàn toàn free



Chọn tiếp Select a photo và chọn ảnh cần tách chờ khoảng vài giây nó tự tách cho mình



Như vậy đã xong rồi đó rất nhanh đúng không nào :D

Ngoài ra, khi tách xong nó còn cho mình edit lại và chúng ta chỉ cần tải về và sài

Thế là mình đã giới thiệu xong công cụ tách nền ảnh trực tuyến rồi đó hoàn toàn miễn phí, chúc anh em thanh công




Friday, September 6, 2019

Hướng dẫn code menu ngang đẹp bằng html css có hiệu ứng hover

Một trang web có chứa các thành phần quan trọng. Trong đó, menu ngang chiếm một vị trí không thể thiếu để hình thành nên bố cục, cũng như tạo cho website trở nên chuyên nghiệp và đa dụng.


Vậy làm thế nào để có một menu chính đẹp, hãy đọc bài chia sẻ hướng dẫn code menu ngang đẹp bằng html css dưới đây.


Mình chỉ lấy ví dụ để các bạn hiểu, từ đó có thể phát triển ý tưởng từ đoạn code này.

Hướng dẫn code menu ngang đẹp bằng html css có hiệu ứng hover

Bây giờ các bạn vào phần mềm gõ code và tạo project với tên file là index.html.


Tiện thể mình chia sẻ luôn cách để code nhanh một dự án, ở đây mình hay sử dụng phần mềm sublime text có cài plugin hỗ trợ, hôm sau mình sẽ hướng dẫn cài plugin cho sublime text cũng như cách dùng một số packet control.

Khai báo html

<!DOCTYPE html>
<html lang="vi">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
 </head>
<body>
    <nav>   
      <div class="menu">
        <ul class="clear">
          <li>
            <a href="#" title="Home">
              <i class="fa fa-home" aria-hidden="true"></i>
              <span class="link-text">Home page</span>
            </a>
          </li>
       
           <li>
            <a href="#" title="About">
              <i class="fa fa-camera" aria-hidden="true"></i>
               <span class="link-text">About us</span>
            </a>
          </li>
          <li>
            <a href="#" title="Product">
              <i class="fa fa-pencil" aria-hidden="true"></i>
              <span class="link-text">Product</span>
            </a>
          </li>
          <li>
            <a href="#" title="Blog">
              <i class="fa fa-comment" aria-hidden="true"></i>
              <span class="link-text">Blog</span>
            </a>
          </li>
          <li>
            <a href="#" title="Contact">
              <i class="fa fa-envelope" aria-hidden="true"></i>
              <span class="link-text">Contact</span>
            </a>
          </li>
        </ul>
      </div>
</nav>
</body>
</html>

Tao file style.css rồi copy mà sau vào file đó và chèn bên trong cặp thẻ head với cú pháp như sau:

Do code html trên có các class icon do đó mình sử dụng link đến bootstrap

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="style.css">

Mã css:

  body {
  background:url(hero-bg.jpg) #222 ;
        background-size: cover;
        background-position: center;
        height: 85vh;
  font-family: 'Oswald', sans-serif;
  font-weight: 300;
}
a {
  text-decoration: none;
}
.clear:after {
  content: " ";
  display: block;
  clear: both;
}
nav .menu {
  margin-top: 159px;
  text-align: center;
    margin-left: -37px;
}
nav .menu ul {
  list-style-type: none;
  display: inline-block;
}
nav .menu ul li {
  float: left;
  width: 124px;
  height: 140px;
  border-left: 1px solid;
  border-color: #e3e3e3;
  background-color: #fff;
  -moz-transition: background-color 0.2s linear 0s;
  -ms-transition: background-color 0.2s linear 0s;
  -o-transition: background-color 0.2s linear 0s;
  -webkit-transition: background-color 0.2s linear 0s;
  transition: background-color 0.2s linear 0s;
}
nav .menu ul li:last-child {
  border-right: 1px solid #e3e3e3;
}
nav .menu ul li a {
  display: table;
  width: 100%;
  height: 100%;
  position: relative;
  text-align: center;
}
nav .menu a i {
    display: block;
    vertical-align: middle;
    color: #333;
    font-size: 23px;
    -moz-transition: all 0.2s linear 0s;
    -ms-transition: all 0.2s linear 0s;
    -o-transition: all 0.2s linear 0s;
    -webkit-transition: all 0.2s linear 0s;
    transition: all 0.2s linear 0s;
    padding: 44px 0px 10px;
}
nav .menu a i:before {
  border: 2px solid;
  border-color: #333;
  border-radius: 500px;
  width: 41px;
  display: inline-block;
  height: 41px;
  line-height: 37px;
  transition: color 0.2s linear 0s, font-size 0.2s linear 0s, border-color 0.2s linear 0.2s, height 0.2s linear 0s, width 0.2s linear 0s, line-height 0.2s linear 0s;
}
nav .menu a .link-text {
    right: 45px;
    color: #333;
    font-size: 14px;
    text-transform: uppercase;
    -moz-transition: all 0.2s linear 0s;
    -ms-transition: all 0.2s linear 0s;
    -o-transition: all 0.2s linear 0s;
    -webkit-transition: all 0.2s linear 0s;
    transition: all 0.2s linear 0s;
}
nav .menu ul li:hover {
  background-color: #ffea00;
  border-color: #ffea00;
}
nav .menu ul li:hover + li {
  border-color: #ffea00;
}
nav .menu ul li:hover + li:last-child {
  border-right-color: #e3e3e3;
}
nav .menu ul li:hover .link-text {
  opacity: 0;
}
nav .menu ul li:hover i {
  color: #333;
  font-size: 43px;
}
nav .menu ul li:hover i:before {
  border-color: transparent;
  border-radius: 500px;
  width: 66px;
  height: 66px;
  line-height: 40px;
  transition: color 0.2s linear 0s, font-size 0.2s linear 0s, border-color 0.2s linear 0s, height 0.2s linear 0s, width 0.2s linear 0s, line-height 0.2s linear 0s;
}
Code menu ngang không phải là khó chỉ cần chúng ta có ít kiến thức cơ bản cũng như ý tưởng thôi, chúc các bạn thực hành tốt

Like và chia sẻ nếu thấy bổ ích nhé :D 
     

Hướng dẫn CSS Hover Effects cho một khối DIV lung linh


Hello lại là mình Thịnh DEV đây, chúc anh em buổi tối vui vẻ, Nhiều khi anh em lướt web thấy có các hover ở chữ hoặc một box content nào đó rất đẹp như kiểu ảnh dưới đây



Và anh em nghĩ rằng là code nó rất khó đúng không ? :D, dạng hover css vậy không hề khó, các bạn chỉ cần biết chút html, css3 thôi. Để em hiểu mình sẽ chia sẻ cách CSS Hover Effects cho một box DIV như trên nhé.

Nào chúng ta cùng bắt đầu thôi :D


Đầu tiên anh em hãy khai báo HTML như sau:


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSS Hover Effects</title>
</head>
<body>
<div class="hove-box">
<p>Nội dung chúng ta cần điền tại đây, để làm demo chúc các bạn học tốt front-end có nhiều ý tưởng thiết kế web tuyệt vời hơn nữa, quan trọng là kếm được nhiều tiền. Trong lập trình có nhiều cái hay lắm</p>
     </div>
</body>
</html>

Và chúng ta bắt đầu CSS cho nó như sau:


body
{
margin: 0;
padding: 0;
}
.hove-box
{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
width: 300px;
height: 300px;
border-radius: 50%;
box-shadow: 0 0 0 15px #f40367;
background: #fff;
box-sizing: border-box;
text-align: center;
transition: .5s;
}
.hove-box:hover
{
border-radius: 0;
}
.hove-box:before
{
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #f40367;
z-index: -1;
transform: rotate(-45deg);
border-radius: 10px;
}
.hove-box p
{
margin: 0;
padding: 0;
color: #fff;
font-size: 16px;
padding: 20px;
font-family: sans-serif;
box-sizing: border-box;
position: absolute;
top: 50%;
transform: translateY(-50%);
transition: .5s;
}
.hove-box:hover p
{
box-shadow: 0 0 50px rgba(0,0,0,.5);
}
Chỉ cần đoạn css đơn giản trên các bạn có thể tạo ra những Hover Effects để tô điểm trên trang web của mình rồi đó, các bạn có thể tùy biến mã css trên theo ý mình để có nhiều hiệu ứng đẹp
Thursday, September 5, 2019

Hướng dẫn code form đăng nhập bằng html css đẹp chi tiết

Form đăng nhập là nơi để admin, khách hàng hay các thành viên để truy cập vào web. Vậy làm thế nào để design form đăng nhập bằng html css? Bài viết hôm nay mình sẽ hướng dẫn code form đăng nhập bằng html css.



Trong FRONT END yếu tố thẩm mỹ là hàng đầu, và người lập trình giao diện web phải biết bố trí màu sắc, hay sắp xếp những mảnh ghép đó khiến chúng trở nên đẹp và hợp lí

Lý do để chúng ta cần một form đăng nhập đẹp


Website chuyên nghiệp hơn

Gây ấn tượng và thu hút khách hàng

Tối ưu được cho người quản trị cũng như thành viên

Những kiến thức cần thiết


HTML cơ bản

CSS cơ bản

Đây là 2 kiến thức tối thiểu để chúng ta có thể làm được nếu các bạn chưa có nền tảng 2 ngôn ngữ lập trình trên hãy w3school VÀO ĐÂY để học hoặc vào danh mục html css của web mình tìm hiểu.


Bây mình sẽ hướng dẫn code form đăng nhập bằng html css đơn giản như sau:


Đầu tiên ta khai báo mã html cho dự án


Ở đây mình tạo và đặt là index.html

<html>
<head>
<title>Code form đăng nhập đẹp bằng html css</title>
<body>
    <div class="loginbox">
    <img src="avatar.png" class="avatar">
        <h1>Login Here</h1>
        <form>
            <p>Username</p>
            <input type="text" name="" placeholder="Enter Username">
            <p>Password</p>
            <input type="password" name="" placeholder="Enter Password">
            <input type="submit" name="" value="Login">
            <a href="#">Lost your password?</a><br>
            <a href="#">Don't have an account?</a>
        </form>
     
    </div>
</body>
</head>
</html>

Sau đó chúng ta tạo file style.css và nhúng file index.html vào trước cặp thẻ head với cú pháp

 <link rel="stylesheet" type="text/css" href="style.css">

Tiếp theo các bạn gõ mã css để định dạng form html cho đẹp theo ảnh dưới đây, vào file style.css nhé :D

Lí do của mình là để các bạn tự gõ từ đầu đến cuối để nhớ lâu và học được nhanh hơn. Nếu bạn nào lười gõ thì hãy kéo xuống dưới cùng của bài viết để download Source Code html css form login full cả ảnh nhé. Tuy nhiên, các bạn hãy đọc lướt qua để hiểu hơn, đây là lời khuyên chân thành củ mình đó, vì mình cũng đã từng như vậy





Như vậy, chúng ta đã code xong form đăng nhập bằng html css rồi đó, các bạn có thể thay class với tên mình thích, nhưng nhớ code css đúng class đó nhé

Và đây là full bộ code có cả ảnh của các bạn đây mình để ở Driver yên tập k có quảng cáo gì hết.

Tiếc gì một share để có kiến thức cho bản thân cũng như bạn bè phải không :D, đồng thời cũng giúp mình có động lực ra các series hướng dẫn lập trình khác như lập trình theme wordpress, web bán hàng php. Ngoài html, css này

Link tải của các bạn đây:




Monday, January 28, 2019

Hướng dẫn tạo menu responsive đa cấp html và css 3, jquery chi tiết

Trong lập trình web menu đa cấp rất rất quan trọng, bởi nó thể hiện bộ mặt của website đẹp hay không đẹp, đa dụng hay không đa dụng, cả về phần backend lẫn front-end. Khi chúng ta thiết kế cho bản thân hoặc khách hàng đều phải cần thiết có nó. Nhiều khi chúng ta hay bỏ qua vấn đề này khiến trang web của mình trở nên mất thẩm mỹ khi xem ở thiết bị di động. Vậy làm thế nào để thiết kế được menu đa cấp responsive bằng html, css và jquery hãy theo dõi phần dưới



Trong thiết kế web tĩnh bằng html css có nhiều dạng menu đa cấp, nhưng hôm nay mình sẽ hướng dẫn các bạn xây dựng 2 dạng menu đa cấp phổ biến nhất

Để làm được menu đa cấp responsive cho website chúng ta cần kiến thức gì

Đâu tiên và bắt buộc là các bạn phải biết HTML, CSS cơ bản

Javascrpit/Jquery

Và một chút về độ họa để thẩm mỹ :D (không biết vấn làm được)

Chung ta hãy bắt tay vào xây dựng nó đi thôi

Ở đây mình sẽ hướng dẫn làm 2 kiểu theo trình tự để các bạn biết

1. Responsive DropDown Menu Using JQuery


Xem demo online: tại đây

Mã HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <meta charset="UTF-8">
    <title>Responsive DropDown Menu Using JQuery</title>
</head>
<body>
    <div id="wrapper">
        <header>
            <nav id='main-menu'>
                <div class="logo"><a href="index.html">Responsive menu </a>
                </div>
                <div id="head-mobile"></div>
                <div class="button"></div>
                <ul>
                    <li class='active'><a href='#'>HOME</a>
                    </li>
                    <li><a href='#'>ABOUT</a>
                    </li>
                    <li><a href='#'>PRODUCTS</a>
                        <ul>
                            <li><a href='#'>Product 1</a>
                                <ul>
                                    <li><a href='#'>Sub Product</a>
                                    </li>
                                    <li><a href='#'>Sub Product</a>
                                    </li>
                                </ul>
                            </li>
                            <li><a href='#'>Product 2</a>
                                <ul>
                                    <li><a href='#'>Sub Product</a>
                                    </li>
                                    <li><a href='#'>Sub Product</a>
                                    </li>
                                </ul>
                            </li>
                        </ul>
                    </li>
                    <li><a href='#'>BIO</a>
                    </li>
                    <li><a href='#'>VIDEO</a>
                    </li>
                    <li><a href='#'>GALLERY</a>
                    </li>
                    <li><a href='#'>CONTACT</a>
                    </li>
                </ul>
            </nav>
        </header>
</body>
</html>

Sau đó chúng ta css cho menu đẹp

Mã CSS

Hiển thị menu trên Deskop

/* menu */
.logo{position:relative;z-index:123;padding:10px;font:18px verdana;color:#6DDB07;float:left;width:15%}
.logo a{color:#6DDB07;}
nav{position:relative;width:1170px;margin:0 auto;}
#main-menu,#main-menu ul,#main-menu ul li,#main-menu ul li a,#main-menu #head-mobile{border:0;list-style:none;line-height:1;display:block;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}
#main-menu:after,#main-menu > ul:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}
#main-menu #head-mobile{display:none}
#main-menu{font-family:sans-serif;background:#d81146}
#main-menu > ul > li{float:left}
#main-menu > ul > li > a{padding:17px;font-size:12px;letter-spacing:1px;text-decoration:none;color:#fff;font-weight:700;}
#main-menu > ul > li:hover > a,#main-menu ul li.active a{color:yellow}
#main-menu > ul > li:hover,#main-menu ul li.active:hover,#main-menu ul li.active,#main-menu ul li.has-sub.active:hover{color:yellow!important;-webkit-transition:background .3s ease;-ms-transition:background .3s ease;transition:background .3s ease;}
#main-menu > ul > li.has-sub > a{padding-right:30px}
#main-menu > ul > li.has-sub > a:after{position:absolute;top:22px;right:11px;width:8px;height:2px;display:block;background:#ddd;content:''}
#main-menu > ul > li.has-sub > a:before{position:absolute;top:19px;right:14px;display:block;width:2px;height:8px;background:#ddd;content:'';-webkit-transition:all .25s ease;-ms-transition:all .25s ease;transition:all .25s ease}
#main-menu > ul > li.has-sub:hover > a:before{top:23px;height:0}
#main-menu ul ul{position:absolute;left:-9999px}
#main-menu ul ul li{height:0;-webkit-transition:all .25s ease;-ms-transition:all .25s ease;background:#d81146;transition:all .25s ease}
#main-menu ul ul li:hover{}
#main-menu li:hover > ul{left:auto}
#main-menu li:hover > ul > li{height:35px}
#main-menu ul ul ul{margin-left:100%;top:0}
#main-menu ul ul li a{border-bottom:1px solid rgba(150,150,150,0.15);padding:11px 15px;width:170px;font-size:12px;text-decoration:none;color:#fff;font-weight:400;}
#main-menu ul ul li:last-child > a,#main-menu ul ul li.last-item > a{border-bottom:0}
#main-menu ul ul li:hover > a,#main-menu ul ul li a:hover{color:#fff}
#main-menu ul ul li.has-sub > a:after{position:absolute;top:16px;right:11px;width:8px;height:2px;display:block;background:#ddd;content:''}
#main-menu ul ul li.has-sub > a:before{position:absolute;top:13px;right:14px;display:block;width:2px;height:8px;background:#ddd;content:'';-webkit-transition:all .25s ease;-ms-transition:all .25s ease;transition:all .25s ease}
#main-menu ul ul > li.has-sub:hover > a:before{top:17px;height:0}
/* #main-menu ul ul li.has-sub:hover,#main-menu ul li.has-sub ul li.has-sub ul li:hover{} */
#main-menu ul ul ul li.active a{border-left:1px solid #d81146}
#main-menu > ul > li.has-sub > ul > li.active > a,#main-menu > ul ul > li.has-sub > ul > li.active> a{border-top:1px solid #d81146}
Hiển thị trên thiết bị thông minh (tablet, di dộng)
@media screen and (max-width:1000px){
.logo{position:absolute;top:0;left: 0;width:100%;height:46px;text-align:center;padding:10px 0 0 0 ;float:none}
.logo2{display:none}
nav{width:100%;}
#main-menu{width:100%}
#main-menu ul{width:100%;display:none}
#main-menu ul li{width:100%;}
#main-menu ul li:hover{background:#363636;}
#main-menu ul ul li,#main-menu li:hover > ul > li{height:auto}
#main-menu ul li a,#main-menu ul ul li a{width:100%;border-bottom:0}
#main-menu > ul > li{float:none}
#main-menu ul ul li a{padding-left:25px}
#main-menu ul ul li{background:#d81146!important;}
#main-menu ul ul li:hover{background:#363636!important}
#main-menu ul ul ul li a{padding-left:35px}
#main-menu ul ul li a{color:#fff;background:none}
#main-menu ul ul li:hover > a,#main-menu ul ul li.active > a{color:yellow}
#main-menu ul ul,#main-menu ul ul ul{position:relative;left:0;width:100%;margin:0;text-align:left}
#main-menu > ul > li.has-sub > a:after,#main-menu > ul > li.has-sub > a:before,#main-menu ul ul > li.has-sub > a:after,#main-menu ul ul > li.has-sub > a:before{display:none}
#main-menu #head-mobile{display:block;padding:23px;color:#fff;font-size:12px;font-weight:700}
.button{width:55px;height:46px;position:absolute;right:0;top:0;cursor:pointer;z-index: 12399994;}
.button:after{position:absolute;top:22px;right:20px;display:block;height:4px;width:20px;border-top:2px solid #fff;border-bottom:2px solid #fff;content:''}
.button:before{-webkit-transition:all .3s ease;-ms-transition:all .3s ease;transition:all .3s ease;position:absolute;top:16px;right:20px;display:block;height:2px;width:20px;background:#fff;content:''}
.button.menu-opened:after{-webkit-transition:all .3s ease;-ms-transition:all .3s ease;transition:all .3s ease;top:23px;border:0;height:2px;width:19px;background:#fff;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}
.button.menu-opened:before{top:23px;background:#fff;width:19px;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}
#main-menu .submenu-button{position:absolute;z-index:99;right:0;top:0;display:block;height:46px;width:46px;cursor:pointer}
#main-menu .submenu-button.submenu-opened{background:#262626}
#main-menu ul ul .submenu-button{height:34px;width:34px}
#main-menu .submenu-button:after{position:absolute;top:22px;right:19px;width:8px;height:2px;display:block;background:#fff;content:''}
#main-menu ul ul .submenu-button:after{top:15px;right:13px}
#main-menu .submenu-button.submenu-opened:after{background:#fff}
#main-menu .submenu-button:before{position:absolute;top:19px;right:22px;display:block;width:2px;height:8px;background:#fff;content:''}
#main-menu ul ul .submenu-button:before{top:12px;right:16px}
#main-menu .submenu-button.submenu-opened:before{display:none}
#main-menu ul ul ul li.active a{border-left:none}
#main-menu > ul > li.has-sub > ul > li.active > a,#main-menu > ul ul > li.has-sub > ul > li.active > a{border-top:none}
}
/* end menu */

Để có thể co vào và xổ ra khi người dùng ấn thì các bạn cần phải code jqury cho nó bằng đoạn code sau:

Đầu tiên khai báo thư viện jquery

Ở đây mình dùng bản 1.11, các bạn chèn đoạn mã sau vào trước thẻ đóng </body> nhé
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
        (function($) {
            $.fn.menumaker = function(options) {
                var mainmn = $(this),
                    settings = $.extend({
                        format: "dropdown",
                        sticky: false
                    }, options);
                return this.each(function() {
                    $(this).find(".button").on('click', function() {
                        $(this).toggleClass('menu-opened');
                        var mainmenu = $(this).next('ul');
                        if (mainmenu.hasClass('open')) {
                            mainmenu.slideToggle().removeClass('open');
                        } else {
                            mainmenu.slideToggle().addClass('open');
                            if (settings.format === "dropdown") {
                                mainmenu.find('ul').show();
                            }
                        }
                    });
                    mainmn.find('li ul').parent().addClass('has-sub');
                    multiTg = function() {
                        mainmn.find(".has-sub").prepend('<span class="submenu-button"></span>');
                        mainmn.find('.submenu-button').on('click', function() {
                            $(this).toggleClass('submenu-opened');
                            if ($(this).siblings('ul').hasClass('open')) {
                                $(this).siblings('ul').removeClass('open').slideToggle();
                            } else {
                                $(this).siblings('ul').addClass('open').slideToggle();
                            }
                        });
                    };
                    if (settings.format === 'multitoggle') multiTg();
                    else mainmn.addClass('dropdown');
                    if (settings.sticky === true) mainmn.css('position', 'fixed');
                    resizeFix = function() {
                        var mediasize = 1000;
                        if ($(window).width() > mediasize) {
                            mainmn.find('ul').show();
                        }
                        if ($(window).width() <= mediasize) {
                            mainmn.find('ul').hide().removeClass('open');
                        }
                    };
                    resizeFix();
                    return $(window).on('resize', resizeFix);
                });
            };
        })(jQuery);
         (function($) {
            $(document).ready(function() {
                $("#main-menu").menumaker({
                    format: "multitoggle"
                });
            });
        })(jQuery);
    </script>
Đó mình đã hoàn thành menu đa cấp responsive kiểu 1 rồi. Sau đâu mình sẽ làm tiếp kiểu 2, kiểu này đa số web hiện nay đều sử dụng đến


2. Responsive Multi Level Off canvas



Tương tự như trên ta có mã

HTML

<!Doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">
</head>
<title>Responsive Multi Level Off canvas Navigation Plugin Navpad-Menu</title>
<body>
<div id="menu">
  <div class="menu-toggler"><span><i class="fas fa-align-justify"></i></span></div>
  <div class="responsive-menu">
    <div id="navigator-menu">
      <ul class="nav">
        <li class="title">Off-canvas menu</li>
        <li><a href="#" title="" style="border:none;">Da trắng</a></li>
        <li><a href="#" title="">Tóc đen</a></li>
        <li> <a href="#container" title="">Mắt xinh</a></li>
        <li><a href="#" title="">Dáng đẹp</a></li>
        <li><a href="#" title="">Trang điểm</a></li>
        <li><a href="#" title="">Khéo tay</a></li>
        <li><a href="#" title="">Thời trang</a></li>
        <li><a href="#" title="">Review mỹ phẩm</a></li>
        <li><a href="#" title="">Sức khỏe</a></li>
        <li><a href="#" title="">Làm đẹp</a></li>
        <li> <a href="#container" title=""><i class="fas fa-search"></i></a>
          <ul>
            <li>
              <div class="form-search1">
                  <form action="">
                          <input type="text">
                  </form>
              </div>
            </li>
          </ul>
        </li>
      </ul>
    </div>
  </div>
</div>
</body>

Mã CSS

/* Resets */
 * {
  margin: 0;
  padding: 0;
}
 body {
  font-family: 'Arial', sans-serif;
  font-weight: 400;
  background: #ddd;
}
 a { text-decoration: none; }
 /* Resets */

.alert {
  color: #666;
  text-align: center;
}
@media handheld, screen and (min-width: 641px) {
 .no_scroll { overflow-y: hidden; }
 .menu-cas-toggler { display: none; }
.form-search1{
    padding: 10px;
    background: #fff;
}
.form-search1 input{
  padding:4px
}
#menu-cas {
  max-width:100%;
  height: 50px;
  margin: 0 auto;
}
 #navigator-menu-cas {
  height: 50px;
  line-height: 50px;
  box-shadow: 0 7px 6px -7px #373435;
  -webkit-box-shadow: 0 7px 6px -7px #373435;
  -moz-box-shadow: 0 7px 6px -7px #373435;
      border-color: #ff1493;
    background-color: #ff1493;
}
 #navigator-menu-cas .title { display: none; }
 #navigator-menu-cas ul { list-style: none; }
 #navigator-menu-cas > ul > li {
  padding:0 13px;
  float: left;
}
 #navigator-menu-cas > ul > li > a {
  color: #fefefe;
  font-size: 15px;
  font-family: 'Arial', sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  text-align: center;
  display: block;
}
 #navigator-menu-cas > ul > li:hover > a { color:yellow }
 #navigator-menu-cas ul li > ul,
 #navigator-menu-cas ul li li > ul,
 #navigator-menu-cas ul li li li > ul,
 #navigator-menu-cas ul li li li li> ul,
 #navigator-menu-cas ul li li li li li > ul { display: none; }
 #navigator-menu-cas ul li:hover > ul,
 #navigator-menu-cas ul li li:hover > ul,
 #navigator-menu-cas ul li li li:hover > ul,
 #navigator-menu-cas ul li li li li:hover > ul,
 #navigator-menu-cas ul li li li li li:hover > ul {
  position: absolute;
    z-index: 10;
    width: 201px;
    line-height: 20px;
    display: block;
    right: 152px;
    background: #555;
    box-shadow: 0 7px 6px -7px #373435;
    -webkit-box-shadow: 0 7px 6px -7px #373435;
    -moz-box-shadow: 0 7px 6px -7px #373435;
}
 #menu-cas ul ul li ul {
  top: 0;
  left: 179px;
  min-height: 100%;
  border-left: 1px solid #444;
}
 #menu-cas ul ul li { /*position: relative;*/ }
 #menu-cas ul ul li a {
  color: #fefefe;
  font-size: 14px;
  font-family: 'Arial', sans-serif;
  text-transform: uppercase;
  display: block;
  padding: 12px 7px;
  border-top: 1px solid rgba(255,255,255,0.045);
  border-bottom: 1px solid rgba(0,0,0,0.045);
  text-transform: uppercase;
}
 #menu-cas ul ul li:hover > a { background: #444; }
 #menu-cas ul ul li li:hover > a { }
 #menu-cas ul ul li li li:hover > a { }
 #menu-cas ul ul li li li li:hover > a { }
 #menu-cas ul ul li li li li li:hover > a { }
}
 @media handheld, screen and (max-width: 640px) {

 .menu-cas-toggler { display: block; }
 .menu-cas-toggler span {
  color: #fefefe;
  font-size: 20px;
  font-family: 'Arial', sans-serif;
  text-align: center;
  letter-spacing: 5px;
  position: absolute;
  z-index: 99;
  top: 0;
  left: 0;
  width: 100%;
  height: 50px;
  line-height: 50px;
  margin: 0 auto;
  display: block;
  cursor: pointer;
  background: #333 url() no-repeat 10px center;
  box-shadow: 0 7px 3px -7px #373435;
  -webkit-box-shadow: 0 7px 3px -7px #373435;
  -moz-box-shadow: 0 7px 3px -7px #373435;
}
 .open > .menu-cas-toggler {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  display: block;
  background: rgba(225,225,225,0.85);
}
 .open > .menu-cas-toggler span { opacity: 0.1 !important; }
 .responsive-menu-cas {
  position: fixed;
  z-index: 99;
  top: 0;
  left: -300px;
  width: 300px;
  height: 100%;
  overflow-x: hidden;
  overflow-y: scroll;
  background: #555;
  transition: 0.3s;
  box-shadow: -4px 0 15px 0px #373435;
  -webkit-box-shadow: -4px 0 15px 0px #373435;
  -moz-box-shadow: -4px 0 15px 0px #373435;
  box-sizing: border-box;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  -ms-box-sizing: border-box;
}
 .open > .responsive-menu-cas { left: 0; }

#navigator-menu-cas .title {
  color: #666;
  font-size: 20px;
  font-family: 'Arial', sans-serif;
  text-transform: uppercase;
  text-shadow: 0.8px 0.8px 3px #111;
  height: 60px;
  line-height: 62px;
  display: block;
  padding: 0 20px;
  border-bottom: 1px solid rgba(0,0,0,0.045);
  background: #333 url() no-repeat 20px center;
  box-shadow: -4px 0 5px 0px #373435;
  -webkit-box-shadow: -4px 0 5px 0px #373435;
  -moz-box-shadow: -4px 0 5px 0px #373435;
}
 #navigator-menu-cas ul li > ul,
 #navigator-menu-cas ul li li > ul,
 #navigator-menu-cas ul li li li > ul,
 #navigator-menu-cas ul li li li li > ul,
 #navigator-menu-cas ul li li li li li > ul {
  position: relative;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  margin: 0;
  padding: 0;
  border: none;
  background: rgba(0,0,0,0.1);
  box-sizing: border-box;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  -ms-box-sizing: border-box;
}
 #navigator-menu-cas ul li {
  float: none;
  display: block;
}
 #navigator-menu-cas ul li a {
  color: #999;
  font-size: 14px;
  display: block;
  padding: 20px;
  border-top: 1px solid rgba(255,255,255,0.045) !important;
  border-bottom: 1px solid rgba(0,0,0,0.045) !important;
}
 #navigator-menu-cas > ul > li:hover > a {
  color: #aaa;
  background: #444;
}

#navigator-menu-cas > ul > li > .parent,
 #navigator-menu-cas > ul > li:hover > .parent,
 #navigator-menu-cas > ul > li.hover > .parent,
 #navigator-menu-cas ul li li > .parent,
 #navigator-menu-cas ul li li:hover > .parent,
 #navigator-menu-cas ul li li.hover > .parent {
  background-repeat: no-repeat;
  background-position: 260px center;
}
 #navigator-menu-cas > ul > li > .parent,
 #navigator-menu-cas > ul > li:hover > .parent {
  color: #aaa;
  background-color: inherit;
  background-image: url();
}
 #navigator-menu-cas > ul > li.hover > .parent {
  color: #aaa;
  background-color: #444;
  background-image: url();
}

#navigator-menu-cas ul li li a {
  color: #aaa;
  font-size: 12px;
}
 #navigator-menu-cas ul li li > .parent,
 #navigator-menu-cas ul li li:hover > .parent {
  color: #aaa;
  background-color: inherit;
  background-image: url();
}
 #navigator-menu-cas ul li li.hover > .parent {
  color: #aaa;
  background-color: rgba(0,0,0,0.1);
  background-image: url();
}
 .nav ul {
  display: none;
  left: -9999px;
}
 .nav li.hover > ul,
 .nav li li.hover > ul,
 .nav li li li.hover > ul,
 .nav li li li li.hover > ul,
 .nav li li li li li.hover > ul,
 .nav li li li li li li.hover > ul {
  position: static !important;
  display: block !important;
}
}
 @media handheld, screen and (max-width: 480px) {
 .open > .responsive-menu-cas { width: 250px; }
 #menu-cas > ul > li > .parent,
 #menu-cas > ul > li:hover > .parent,
 #menu-cas > ul > li.hover > .parent,
 #menu-cas ul li li > .parent,
 #menu-cas ul li li:hover > .parent,
 #menu-cas ul li li.hover > .parent {
  background-repeat: no-repeat;
  background-position: 210px center;
}
}
 @media handheld, screen and (max-width: 319px) {
 .open > .responsive-menu-cas { width: 200px; }
 #menu-cas > ul > li > .parent,
 #menu-cas > ul > li:hover > .parent,
 #menu-cas > ul > li.hover > .parent,
 #menu-cas ul li li > .parent,
 #menu-cas ul li li:hover > .parent,
 #menu-cas ul li li.hover > .parent {
  background-repeat: no-repeat;
  background-position: 150px center;
}
}

Mã JQUERY

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
jQuery.noConflict();
jQuery(document).ready(function($){
  $('.menu-cas-toggler').click(function(){
    $("body").toggleClass('no_scroll');
  });
});
 jQuery.noConflict();
jQuery(document).ready(function($){
  $(function() {
    initDropDowns($("#menu-cas"));
  });
   function initDropDowns(allMenus) {
    allMenus.children(".menu-cas-toggler").on("click", function() {
      var thisTrigger = jQuery(this),
          thisMenu = thisTrigger.parent(),
          thisPanel = thisTrigger.next();
       if(thisMenu.hasClass("open")){
        thisMenu.removeClass("open");
        jQuery(document).off("click");                              
        thisPanel.off("click");
      }
      else{
        allMenus.removeClass("open");
        thisMenu.addClass("open");
        jQuery(document).on("click", function() {
          allMenus.removeClass("open");
        });
        thisPanel.on("click", function(e) {
          e.stopPropagation();
        });
      }    
      return false;
    });
  }
});
 jQuery.noConflict();
jQuery(document).ready(function($){
  $(document).ready(function() {
    $(".nav li a").each(function() {
      if ($(this).next().length > 0) {
        $(this).addClass("parent");
      };
    })
  })
  $(function(){
    $(".nav li").unbind('mouseenter mouseleave');
    $(".nav li a.parent").unbind('click').bind('click', function(e) {
      // must be attached to anchor element to prevent bubbling
      e.preventDefault();
      $(this).parent("li").toggleClass("hover");
    });
  });
});
</script>

Trên đây là những hướng dẫn tạo menu đa câp responsive đơn giản nhất, các bạn hãy tùy biến theo cách riêng của mình nhé. Hãy theo dõi web thường xuyên để cập nhật những bài học bổ ích. Không chỉ front-end mà cả backend nhé. Sắp tới mình sẽ viết bài hướng dẫn lập trinh theme bán hàng, tin tức bằng wordpress(không phải tùy biến theme co sẵn mà code từ a đến z). Các bạn hãy ủng hộ mình nhé

Chúc các bạn học tốt, kiếm thật nhiều tiền