前端切图学习-好评如潮

Testimonial Box

Posted by R1NG on September 3, 2021 Viewed Times

好评如潮 Testimonial Box

1. 概述

项目本体为一个循环展示客户好评的组件.

效果:

20210905094425


2. 结构和切图

网页的基本结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<body>
    <div class="testimonial-container">
        <div class="progress-bar"></div>
        <div class="fas fa-quote-left fa-quote"></div>
        <div class="fas fa-quote-right fa-quote"></div>
        <p class="testimonial">
            I've worked with literally hundreds of HTML/CSS developers and I have to
            say the top spot goes to this guy. This guy is an amazing developer. He
            stresses on good, clean code and pays heed to the details. I love
            developers who respect each and every aspect of a throughly thought out
            design and do their best to put it in code. He goes over and beyond and
            transforms ART into PIXELS - without a glitch, every time.
        </p>
        <div class="user">
            <img src="https://randomuser.me/api/portraits/women/46.jpg" alt="user" class="user-image"/>
            <div class="user-details">
                <h4 class="username">Miyah Myles</h4>
                <p class="role">Marketing</p>
            </div>
        </div>
    </div>
</body>


3. 编写 CSS 样式

完整的 CSS 样式表如下:

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
* {
    box-sizing: border-box;
}
body {
    background-color: #f4f4f4;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100vh;
    overflow: hidden;
    margin: 0;
    padding: 10px;
}

.testimonial-container {
    background-color: #476ce4;
    color: #fff;
    border-radius: 15px;
    margin: 20px auto;
    padding: 50px 80px;
    max-width: 768px;
    position: relative;
}
.fa-quote {
    color: rgba(255, 255, 255, .3);
    font-size: 28px;
    position: absolute;
    top: 70px;
}
.fa-quote-right {
    right: 40px;
}
.fa-quote-left {
    left: 40px;
}
.testimonial {
    line-height: 28px;
    text-align: justify;
}

.user {
    display: flex;
    align-items: center;
    
}
.user .user-image {
    border-radius: 50%;
    height: 75px;
    width: 75px;
    object-fit: cover;
    margin-right: 20px;
}
.user .uer-details {
    margin-left: 10px;
}
.user .username {
    margin: 0;
}
.user .role {
    font-weight: normal;
    margin: 10px 0;
}
.progress-bar {
    background-color: #fff;
    height: 4px;
    width: 100%;
    animation: grow 10s linear infinite;
    transform-origin: left;
}

@keyframes grow {
    0% {
        transform: scaleX(0);
    }
}

@media (max-width: 768px) {
    .testimonial-container {
        padding: 20px 30px;
    }
    .fa-quote {
        display: none;
    }
}


4. JavaScript

下面编写 JavaScript 函数:

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
const testimonialsContainer = document.querySelector('.testimonials-container');
const testimonial = document.querySelector('.testimonial');
const userImage = document.querySelector('.user-image');
const username = document.querySelector('.username');
const role = document.querySelector('.role');

const testimonials = [
{
    name: 'Miyah Myles',
    position: 'Marketing',
    photo:
    'https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=200&fit=max&s=707b9c33066bf8808c934c8ab394dff6',
    text:
    "I've worked with literally hundreds of HTML/CSS developers and I have to say the top spot goes to this guy. This guy is an amazing developer. He stresses on good, clean code and pays heed to the details. I love developers who respect each and every aspect of a throughly thought out design and do their best to put it in code. He goes over and beyond and transforms ART into PIXELS - without a glitch, every time.",
},
{
    name: 'June Cha',
    position: 'Software Engineer',
    photo: 'https://randomuser.me/api/portraits/women/44.jpg',
    text:
    'This guy is an amazing frontend developer that delivered the task exactly how we need it, do your self a favor and hire him, you will not be disappointed by the work delivered. He will go the extra mile to make sure that you are happy with your project. I will surely work again with him!',
},
{
    name: 'Iida Niskanen',
    position: 'Data Entry',
    photo: 'https://randomuser.me/api/portraits/women/68.jpg',
    text:
    "This guy is a hard worker. Communication was also very good with him and he was very responsive all the time, something not easy to find in many freelancers. We'll definitely repeat with him.",
},
{
    name: 'Renee Sims',
    position: 'Receptionist',
    photo: 'https://randomuser.me/api/portraits/women/65.jpg',
    text:
    "This guy does everything he can to get the job done and done right. This is the second time I've hired him, and I'll hire him again in the future.",
},
{
    name: 'Jonathan Nunfiez',
    position: 'Graphic Designer',
    photo: 'https://randomuser.me/api/portraits/men/43.jpg',
    text:
    "I had my concerns that due to a tight deadline this project can't be done. But this guy proved me wrong not only he delivered an outstanding work but he managed to deliver 1 day prior to the deadline. And when I asked for some revisions he made them in MINUTES. I'm looking forward to work with him again and I totally recommend him. Thanks again!",
},
{
    name: 'Sasha Ho',
    position: 'Accountant',
    photo:
    'https://images.pexels.com/photos/415829/pexels-photo-415829.jpeg?h=350&auto=compress&cs=tinysrgb',
    text:
    'This guy is a top notch designer and front end developer. He communicates well, works fast and produces quality work. We have been lucky to work with him!',
},
{
    name: 'Veeti Seppanen',
    position: 'Director',
    photo: 'https://randomuser.me/api/portraits/men/97.jpg',
    text:
    'This guy is a young and talented IT professional, proactive and responsible, with a strong work ethic. He is very strong in PSD2HTML conversions and HTML/CSS technology. He is a quick learner, eager to learn new technologies. He is focused and has the good dynamics to achieve due dates and outstanding results.',
},
];

let idx = 1;

function updateTestimonial() {
    const {name, position, photo, text} = testimonials[idx];

    testimonial.innerHTML = text;
    userImage.src = photo;
    username.innerHTML = name;
    role.innerHTML = position;

    idx++;

    if (idx > testimonials.length-1) {
        idx = 0;
    }
}
setInterval(updateTestimonial, 10000);

最后, 完整的网页演示可见 此处