Tooltip là những nhãn nhỏ chứa thông tin về phần tử mà khi ta rê chuột vào phần tử này thì tooltip sẽ xuất hiện,nó có chức năng tương tự như thuộc tính title trong thẻ html.Bài viết này tôi sẽ hướng dẫn các bạn tạo tooltip cho icon chia sẻ qua mạng xã hội bằng hiệu ứng của css3-transition.
Xem Demo
Đây là một số hình ảnh mình sẽ sử dụng troang thủ thuật này(ở bài hướng dẫn này ta sử dụng icon 48×48):
Mở đầu với mã HTML
<ul class="tooltip">
<li>
<a href="#">
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9tyQ5TD552P2gtjjnhOOB890KsIlbMAKO2s2VDVW9LxNQKi4m4j-ER4vtlRnVvjvtqRCWsZBQtl1z9bksZhfdQvs4_Pwb8qO5PdAYhyphenhyphenDWeZM0CUp6fus-7H52w9RX_eWxGg1JxU7mYv8/s1600/facebook_white.png">
<span>Đăng lên facebook</span><!--tooltip-->
</a>
</li>
<li>
<a href="#">
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA6TiWohoY3c1__JdOxdl8YId9c1HTq_NI6v4_-IT9qtdoMG77ZPPpmC5WSIEERQyCSffzMHY0QLkB0Hl83tO0-W2XLk8Sy5JJ2PmwekqCv6p7Xy7R_1S7ZfZmDIbKFRYGS3swk7ViTZk/s1600/pinterest_white.png">
<span>Đăng lên pinterest</span>
</a>
</li>
<li>
<a href="#">
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0Jc8Zw-tTO6uCGmbKiga3BPUz4D0je2SuX2Q4nvydbusGpnJTvD5rRYEeLwCSmKCswtl7nVz4RgTRUK5NDofKvMQkFFKq5HxI2YHxd4Cf2pNtpuhL6PW97JPECISufbVF4RGXG53NoEo/s1600/twitter_white.png">
<span>Chia sẻ qua twitter</span>
</a>
</li>
<li>
<a href="#">
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc67bjdW9I7Nbb_3dNz6KinMh6CVZJ-r0I1HO-Ch3jux7lwNxZnuJn69MYnBh08_eKKW7vVMN1sMKEWikVfxZqpjFt0MCT6Fvu2E6AQ0hF4NMG4QVsHY3JGd8-z4Dnw_O2Vr6gYSIgEjE/s1600/google_plus_white.png">
<span>Đăng lên google+</span>
</a>
</li>
<li>
<a href="#">
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUOJv6KOZHtdrzKd99h2ONsOIghccULZ2iD4JbCpczDwUIcbQGMAuQFwZEfhMGMDYry3Y_dBXCznYzueYdNWEG8xogjuYSfv1yjz93lVoh5Uf2VL1ktYHbu4AzhrDwT3XpTAymrQDlWcw/s1600/rss_white.png">
<span>Nhận tin RSS</span>
</a>
</li>
</ul>
Ở đây tooltip là thẻ span mang thông tin về mỗi icon. Mục đích của ta ở đây là khi rê chuột vào icon thì sẽ thẻ span sẽ xuất hiện.

CSS

Gõ đoạn mã css như sau:
.tooltip li{
display:inline;
}

.tooltip a{
float:left;
position:Relative;
margin-left:10px;
margin-right:10px;
}

.tooltip a span{
position:Absolute;
top:-25px;
left:-100%;
white-space:nowrap;
font-size:12px;
font-family:arial,sans-serif;
padding:6px 17px;
border-radius:3px;
color:white;
background-color:#101010;
text-shadow:0 1px 0 rgba(0,0,0,0.7);
box-shadow:0 1px 1px rgba(0,0,0,1);
}
Kết quả:
Sau đó sử dụng pseudo-class để tạo hình tam giác giống như hình dưới
Code: 
.tooltip a span:after{
content:"";
width:0;
height:0;
position:absolute;
bottom:-12px;
left:48%;
border:6px solid transparent;
border-top:7px solid #101010;
}
Nếu các bạn chưa biết cách tạo hình tam này có thể xem qua bài sau.

Sau đó chúng ta ẩn tooltip này đi bằng cách thêm cho thẻ span dòng code sau.
.tooltip a span{
/*---code trước---*/
visibility:hidden;
opacity:0;
}
Ở thẻ span ta chú ý đến 3 thuộc tính cùng tham số của nó,thứ nhất là visibility:hidden dùng để ẩn tooltip đi rồi đến khi rê chuột vào icon ta sẽ để tham số là visible để nó xuất hiện.Còn 2 giá trị còn lại là opacity:0 và top:-25px với mục đích để tạo hiệu ứng bằng css-transition khi tooltip này xuất hiện .Ta có đoạn mã cuối như sau:
/*---thêm hiệu ứng với css-transition---*/
.tooltip a span{
/*---code trước---*/
-moz-transition:top 0.4s,opacity 0.4s ease;
-webkit-transition:top 0.4s,opacity 0.4s ease;
-o-transition:top 0.4s,opacity 0.4s ease;
transition:top 0.4s,opacity 0.4s ease;
}

/*--code khi rê chuột vào icon---*/
.tooltip a:hover span{
visibility:visible;
top:-40px;
opacity:1;
}
Khi rê chuột vào icon, tooltip sẽ xuất hiện với hiệu ứng giống như trong demo(chả biết miêu tả hiệu ứng này như thế nào nữa :D )
Ở loạt bài trước, chúng ta đã bàn tới các ứng dụng quản lý người sử dụng, xây dựng bộ đếm, tạo mã bảo mật để phòng chống những người có dụng ý xấu trên website. Tiếp theo, trong bài này chúng ta sẽ bàn về cách thức xây dựng hệ thống cho phép người dùng bình chọn khi họ tiến hành thăm viếng website của chúng ta. Để xây dựng hệ thống bình chọn chúng ta cần phân tích xem hệ thống này cần có bao nhiêu bảng quan hệ.


A- Phân tích và thiết kế cơ sở dữ liệu:

Trong tình huống này chúng ta cần 1 bảng câu hỏi và 1 bảng câu trả lời.

Phân tích quan hệ giữa chúng ta có:

1 Câu hỏi có nhiều câu trả lời.

1 câu trả lời chỉ dành cho 1 câu hỏi.

Vậy giữa 2 bảng này sẽ phát sinh một khóa ngoại, là khóa dùng để liên kết giữa hai bảng này.

 
Bài 17: Xây dựng hệ thống bình chọn trên website bằng PHP&MYSQL

Vậy ta có cú pháp tạo 2 bảng như sau.

 
Bảng câu hỏi ( question)
1
2
3
4
mysql> create table question(qid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
-> qtitle VARCHAR(255) NOT NULL,
-> qdate DATE NOT NULL DEFAULT '0000-00-00',
-> PRIMARY KEY(qid));
Bảng câu trả lời (anwser)
1
2
3
4
5
mysql> create table answer(aid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
-> qid INT(10) UNSIGNED NOT NULL,
-> atitle VARCHAR(255) NOT NULL,
-> acount INT(10) NOT NULL DEFAULT '0',
-> PRIMARY KEY(aid));
Nhập liệu bằng CSDL ta có:
1
2
3
4
5
6
mysql> Insert into question(qtitle,qdate) values("Ban thay qhonline the nao ?","
2009-10-10");
mysql> Insert into answer(qid,atitle,acount) values("1","Nhin rat dep",0);
mysql> Insert into answer(qid,atitle,acount) values("1","Nhin Dep",0);
mysql> Insert into answer(qid,atitle,acount) values("1","Nhin Cung duoc",0);
mysql> Insert into answer(qid,atitle,acount) values("1","Nhin qua xau",0);
B- Xây dựng trang bình chọn poll.php

Kết nối cơ sở dữ liệu:
1
2
3
4
<?php
$conn=mysql_connect("localhost","root","root") or die("can not connect database");
mysql_select_db("poll_exam",$conn);
?>
Lựa chọn câu hỏi có trong cơ sở dữ liệu để liệt kê ra trên website, sau đó ta lại tiếp tục liệt kê các câu trả lời của câu hỏi đó bằng cách sử dụng dấu chọn lựa (radio). Như vậy chúng ta sẽ phải chạy cùng lúc 2 câu truy vấn lồng nhau trong suốt quá trình truy xuất.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$sql="select * from question order by qid desc";
$query=mysql_query($sql);
if(mysql_num_rows($query) > 0)
{
 $row=mysql_fetch_array($query);
 $qid=$row[qid];
 echo "<form action='poll.php?questionid=$qid' method='post' >";
 echo "<h2>$row[qtitle]</h2>";
 $sql2="select * from answer where qid='$qid' order by aid";
 $query2=mysql_query($sql2);
 if(mysql_num_rows($query2) > 0)
 {
  while($row2=mysql_fetch_array($query2)){
  echo "<input type=radio name=answer value=$row2[aid]>$row2[atitle]<br />";
  }
 }
 echo "<input type='submit' name='ok' value='Binh Chon'>";
 echo "<a href='result.php?questionid=$qid'>Xem Ket Qua</a>";
 echo "</form>";
}
?>
Và màn hình sẽ xuất ra như hình bên dưới

Bài 17: Xây dựng hệ thống bình chọn trên website bằng PHP&MYSQL

Và khi người dùng nhất nút Bình chọn, chúng ta sẽ gọi lại chính trang đó để xử lý dữ liệu mà người dùng vừa lựa chọn.

Vậy ta phải sử dụng lệnh isset() để kiểm tra xem người dùng có nhấn nút bình chọn không, tiếp đến ta lấy ra id mà người dùng vừa tiến hành chọn ở form bên dưới.

Cuối cùng ta cập nhật dữ liệu bằng cách lấy số trong cơ sở dữ liệu cộng tiếp cho 1 đơn vị nữa. Và đưa người dùng sang trang kết quả.

Vì trong đoạn code này có lệnh header nên chúng ta phải đặt quá trình xử lý này ở trên form. Nếu không sẽ bị lỗi dữ liệu khi gởi.
1
2
3
4
5
6
7
8
9
10
11
<?php
if(isset($_POST['ok']))
{
 $id=$_POST['answer'];
 $qid=$_GET['questionid'];
 $sql3="update answer set acount=acount + 1 where aid='".$id."'";
 mysql_query($sql3);
 header("location: result.php?questionid=$qid");
 exit();
}
?>
Vậy toàn bộ code của trang poll.php này như sau.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
$conn=mysql_connect("localhost","root","root") or die("can not connect database");
mysql_select_db("poll_exam",$conn);
if(isset($_POST['ok']))
{
 $id=$_POST['answer'];
 $qid=$_GET['questionid'];
 $sql3="update answer set acount=acount + 1 where aid='".$id."'";
 mysql_query($sql3);
 header("location: result.php?questionid=$qid");
 exit();
}
$sql="select * from question order by qid desc";
$query=mysql_query($sql);
if(mysql_num_rows($query) > 0)
{
 $row=mysql_fetch_array($query);
 $qid=$row[qid];
 echo "<form action='poll.php?questionid=$qid' method='post' >";
 echo "<h2>$row[qtitle]</h2>";
 $sql2="select * from answer where qid='$qid' order by aid";
 $query2=mysql_query($sql2);
 if(mysql_num_rows($query2) > 0)
 {
  while($row2=mysql_fetch_array($query2)){
  echo "<input type=radio name=answer value=$row2[aid]>$row2[atitle]<br />";
  }
 }
 echo "<input type='submit' name='ok' value='Binh Chon'>";
 echo "<a href='result.php?questionid=$qid'>Xem Ket Qua</a>";
 echo "</form>";
}
?>
C- Xây dựng trang kết quả bình chọn result.php

Ở trang này, ta sẽ lấy giá trị question id của người bình chọn từ trang poll.php và tính toán xem tỷ lệ phần trăm của các câu hỏi ấy như thế nào.

Đầu tiên, ta lấy giá trị từ poll.php?questionid=1. vậy 1 là giá trị ta sẽ có được từ $_GET['questionid']. Tiếp đến ta lại dùng giá trị vừa lấy được này để liệt kê thông tin câu hỏi và tính toán giá trị.

Để tính toán giá trị, ta cần biết tổng số bình chọn trong toàn bộ các câu trả lời hiện nay là bao nhiêu. Bằng câu lệnh SUM ta có thể làm được điều đó.
1
$sql2="select qid, SUM(acount) as total from answer group by qid having qid='".$qid."'";
Câu lệnh này cho phép ta lấy ra tổng số bình chọn trong cơ sở dữ liệu của câu hỏi mà ta truyền vào. Để SUM được acount ta cần phải GROUP(gom nhóm) chúng ta lại theo mã câu hỏi mà chúng ta cần tìm. having là mệnh đề theo sau có ý nghĩa tương đương với where, nó thường được sử dụng theo GROUP.

Như vậy để lấy ra tổng số phiếu bình chọn ta chỉ việc thực thi câu truy vấn này, và lấy tên cột tạm là total.
1
2
3
4
5
6
<?php
$sql2="select qid, SUM(acount) as total from answer group by qid having qid='".$qid."'";
$query2=mysql_query($sql2);
$row2=mysql_fetch_array($query2);
$total=$row2[total];
?>
kế tới, ta lại tính toán số phiếu của từng câu hỏi trong cơ sở dữ liệu, dựa vào tổng số câu hỏi này.

Ví dụ: Tổng số lượt bình chọn là 10
câu 1 là 3
câu 2 là 4
câu 3 là 2
câu 4 là 1
Vậy suy ra phần trăm trên tổng số 10 của 4 câu này được tính bằng cách lấy. số liệu của từng câu chia cho tổng số câu hỏi và nhân cho 100. Ví dụ câu 1 là: (3/10)*100 = 30%

Để làm tròn kết quả ta sử dụng hàm round(). Giúp dữ liệu đưa về sự đồng bộ và rõ ràng nhất.

Vậy code xử lý của chúng ta như sau:
1
2
3
4
5
6
7
8
9
10
11
<?php
$sql3="select * from answer where qid='".$qid."' order by aid";
$query3=mysql_query($sql3);
if(mysql_num_rows($query3) > 0)
{
 while($row3=mysql_fetch_array($query3)){
 $percent=round(($row3[acount]/$total)*100,2);
 echo "<h4 style='color:red; font:12px verdana; '>$row3[atitle] : $row3[acount] ($percent %)</h4>";
 }
}
?>
Kết quả khi xuất ra sẽ có hình như sau:

Bài 17: Xây dựng hệ thống bình chọn trên website bằng PHP&MYSQL

Vậy toàn bộ mã nguồn của trang result.php này như sau:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$conn=mysql_connect("localhost","root","root") or die("can not connect database");
mysql_select_db("poll_exam",$conn);
if(isset($_GET['questionid']))
{
 $qid=$_GET['questionid'];
 $sql="select * from question where qid='".$qid."'";
 $query=mysql_query($sql);
 $row=mysql_fetch_array($query);
 echo "<h2>$row[qtitle]</h2>";
 $sql2="select qid, SUM(acount) as total from answer group by qid having qid='".$qid."'";
 $query2=mysql_query($sql2);
 $row2=mysql_fetch_array($query2);
 $total=$row2[total];
 $sql3="select * from answer where qid='".$qid."' order by aid";
 $query3=mysql_query($sql3);
 if(mysql_num_rows($query3) > 0){
  while($row3=mysql_fetch_array($query3)){
  $percent=round(($row3[acount]/$total)*100,2);
  echo "<h4 style='color:red; font:12px verdana; '>$row3[atitle] : $row3[acount] ($percent %)</h4>";
  }
 }
}
?>
Download toàn bộ mã nguồn của bài này tại đây.

PHIM LẺ XEM NHIỀU NHẤT

NGÀY TUẦN THÁNG

Big Hero 6

Người Hùng 6

Lượt xem phim: 76528