1. Phần HTML
Trước hết hãy xem qua toàn bộ đoạn mã nguồn:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
< body > < div class = "parallax" > < div class = "side-menu" > < ul > < li class = "forest" onclick = "moveToImage('.forest')" >Forest</ li > < li class = "eagle" onclick = "moveToImage('.eagle')" >Eagle</ li > < li class = "rhino" onclick = "moveToImage('.rhino')" >Rhino</ li > < li class = "owl" onclick = "moveToImage('.owl')" >Owl</ li > < li class = "lion" onclick = "moveToImage('.lion')" >Lion</ li > < li class = "bear" onclick = "moveToImage('.bear')" >Bear</ li > </ ul > </ div > < div class = "forest" ></ div > < div class = "eagle" > < p > < span >Eagle is the common name for many large birds of prey of the family Accipitridae.</ span > < span >Eagles belong to several groups of genera, not all of which are closely related.</ span > < span >Most of the 60 species of eagle are from Eurasia and Africa.</ span > </ p > </ div > < div class = "rhino" > < p > < span >A rhinoceros commonly abbreviated to rhino is one any of the numerous extinct species.</ span > < span >Two of the extant species are native to Africa and three to Southern Asia.</ span > < span >The term "rhinoceros" is often more broadly applied to now extinct relatives of the superfamily Rhinocerotoidea.</ span > </ p > </ div > < div class = "owl" > < p > < span >Owls are birds from the order Strigiformes.</ span > < span >Owls hunt mostly small mammals, insects, and other birds, although a few species specialize in hunting fish.</ span > < span >They are found in all regions of the Earth except polar ice caps and some remote islands.</ span > </ p > </ div > < div class = "lion" > < p > < span >The lion (Panthera leo) is a species in the family Felidae</ span > < span >A lion pride consists of a few adult males, related females and cubs.</ span > < span >Male lions have a prominent mane, which is the most recognisable feature of the species.</ span > </ p > </ div > < div class = "bear" > < p > < span >Bears are carnivoran mammals of the family Ursidae.</ span > < span >They are classified as caniforms, or doglike carnivorans.</ span > < span >Bears are found on the continents of North America, South America, Europe, and Asia.</ span > </ p > </ div > < div class = "back" ></ div > </ div > </ body > |
Phần này khá đơn giản, chúng ta chỉ cần thêm các thẻ p
và thẻ span
cùng với nội dung mà mình muốn trình bày.
2. Phần CSS
Trước hết hãy xem qua toàn bộ đoạn mã nguồn:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
.parallax > div > p { width : 60% ; text-align : justify ; color : white ; mix-blend-mode: difference; margin : 50px ; font-size : 20px ; } .parallax > div > p > span { width : 100% ; float : left ; -webkit-clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 80% ); clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 80% ); transform: translateY( -50px ); opacity: 0 ; animation: text 10 s 1.5 s ease-in-out infinite; } .parallax > div > p > span:first-child{ animation-delay: 2 s; } .parallax > div > p > span:last-child{ animation-delay: 1 s; } @keyframes text { 0% { transform: translateY( -50px ); opacity: 0 ; -webkit-clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 80% ); clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 80% ); } 20% { transform: translateY( 0 ); opacity: 1 ; -webkit-clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 15% ); clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 15% ); } 80% { transform: translateY( 0 ); opacity: 1 ; -webkit-clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 15% ); clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 15% ); } 100% { transform: translateY( 50px ); opacity: 0 ; -webkit-clip-path: polygon( 100% 0 , 100% -0% , 0 100% , 0 100% ); clip-path: polygon( 100% 0 , 100% -0% , 0 100% , 0 100% ); } } |
Các bước thực hiện:
Bước 1: định dạng cho thẻ p
1
2
3
4
5
6
7
8
|
.parallax > div > p { width : 60% ; text-align : justify ; color : white ; mix-blend-mode: difference; margin : 50px ; font-size : 20px ; } |
Màu sắc của văn bản phải được thiết lập để tương phản với ảnh nền do đó ta dùng thuộc tínhmix-blend-mode: difference
.
Cách thể hiện văn bản cũng nên canh chỉnh hai bên lề trái và phải bằng nhau bằng cách text-align: justify
.
Bước 2: tạo định dạng cho thẻ span
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
.parallax > div > p > span { width : 100% ; float : left ; -webkit-clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 80% ); clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 80% ); transform: translateY( -50px ); opacity: 0 ; animation: text 10 s 1.5 s ease-in-out infinite; } .parallax > div > p > span:first-child{ animation-delay: 2 s; } .parallax > div > p > span:last-child{ animation-delay: 1 s; } |
Ở phần này chỉ lưu ý độ trễ của hiệu ứng trên từng thẻ span
là khác, giúp cho người dùng quen thuộc hơn.
Bước 3: tạo hiệu ứng cho văn bản
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
|
@keyframes text { 0% { transform: translateY( -50px ); opacity: 0 ; -webkit-clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 80% ); clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 80% ); } 20% { transform: translateY( 0 ); opacity: 1 ; -webkit-clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 15% ); clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 15% ); } 80% { transform: translateY( 0 ); opacity: 1 ; -webkit-clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 15% ); clip-path: polygon( 100% 0 , 100% 100% , 0 100% , 0 15% ); } 100% { transform: translateY( 50px ); opacity: 0 ; -webkit-clip-path: polygon( 100% 0 , 100% -0% , 0 100% , 0 100% ); clip-path: polygon( 100% 0 , 100% -0% , 0 100% , 0 100% ); } } |
Việc tạo hiệu ứng này rất quen thuộc, freetuts đã có một bài học hướng dẫn về cách tạo hiệu ứng với từ khóa keyframes
. Các bạn có thể xem chi tiết tại đây: https://freetuts.net/css3-hieu-ung-animation-1665.html
3. Lời kết