Hoạt ảnh mờ dần Trong CSS

Một phương pháp khác là sử dụng API Web Animations của JS kết hợp với CSS

Show

    Ví dụ

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    body,
    html {
      height: 100vh;
    }
    
    header {
      height: 20%;
    }
    
    .text-center {
      text-align: center;
    }
    
    .leading-none {
      line-height: 1;
    }
    
    .leading-3 {
      line-height: .75rem;
    }
    
    .leading-2 {
      line-height: .25rem;
    }
    
    .bg-black {
      background-color: rgba(0, 0, 0, 1);
    }
    
    .bg-gray-50 {
      background-color: rgba(249, 250, 251, 1);
    }
    
    .pt-12 {
      padding-top: 3rem;
    }
    
    .pt-2 {
      padding-top: 0.5rem;
    }
    
    .text-lightGray {
      color: lightGray;
    }
    
    .container {
      display: flex;
      /* or inline-flex */
      justify-content: space-between;
    }
    
    .container section {
      padding: 0.5rem;
    }
    
    .opacity-0 {
      opacity: 0;
    }
    
    
    
    
      
      
      
      
      
    
    
    
      
        

    Hello

    Ipsum lipmsum emus tiris mism

    ipsum 1

    Cras purus ante, dictum non ultricies eu, dapibus non tellus. Nam et ipsum nec nunc vestibulum efficitur nec nec magna. Proin sodales ex et finibus congue

    ipsum 2

    Cras purus ante, dictum non ultricies eu, dapibus non tellus. Nam et ipsum nec nunc vestibulum efficitur nec nec magna. Proin sodales ex et finibus congue

    ipsum 3

    Cras purus ante, dictum non ultricies eu, dapibus non tellus. Nam et ipsum nec nunc vestibulum efficitur nec nec magna. Proin sodales ex et finibus congue

    dictum non ultricies eu, dapibus non tellus

    Ipsum lipmsum emus tiris mism

    Phương pháp 1. Sử dụng thuộc tính hoạt hình CSS. Hoạt ảnh CSS được xác định bằng 2 khung hình chính. Một cái có độ mờ được đặt thành 0, cái còn lại có độ mờ được đặt thành 1. Khi loại hoạt ảnh được đặt thành dễ dàng, hoạt ảnh sẽ mờ dần trong trang. Thuộc tính này được áp dụng cho thẻ body. Bất cứ khi nào trang tải, hoạt ảnh này sẽ phát và trang sẽ xuất hiện mờ dần trong. Thời gian mờ dần có thể được đặt trong thuộc tính hoạt ảnh

    cú pháp




    body {

        animation: fadeInAnimation ease 3s

        animation-iteration-count: 1;

        

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    0

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    1

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    2

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    3

            1

        2____53

        

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    1

            7

        2____59

    animation: fadeInAnimation ease 3s0

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    1

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    1

    Ví dụ




    animation: fadeInAnimation ease 3s3

    _______64____65____66

    animation: fadeInAnimation ease 3s7

    animation: fadeInAnimation ease 3s4animation: fadeInAnimation ease 3s9animation: fadeInAnimation ease 3s6

        animation: fadeInAnimation ease 3s4    3animation: fadeInAnimation ease 3s6

        2____56

        2____58

        ____80____53____66

    animation: fadeInAnimation ease 3s7

        animation: fadeInAnimation ease 3s4animation-iteration-count: 1;6animation: fadeInAnimation ease 3s6

        2____4

        0    1

        0animation-iteration-count: 1;

        0

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    0

        2____11

        2____13

        0    1

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    02    3

        0

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    1

        0    7

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    02    9

        0

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    1

        2____11

        ____80____86animation: fadeInAnimation ease 3s6

    animation-iteration-count: 1;0animation: fadeInAnimation ease 3s9animation: fadeInAnimation ease 3s6

    animation: fadeInAnimation ease 3s7

    animation: fadeInAnimation ease 3s4

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    23____66

        animation: fadeInAnimation ease 3s4

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    27 animation-iteration-count: 1;6
    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    29
    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    30animation: fadeInAnimation ease 3s6

        2____133

        animation-iteration-count: 1;0

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    27animation: fadeInAnimation ease 3s6

    animation: fadeInAnimation ease 3s0

        animation: fadeInAnimation ease 3s4    01animation: fadeInAnimation ease 3s6

        2____56

        2____58

        animation-iteration-count: 1;0____501animation: fadeInAnimation ease 3s6

    animation: fadeInAnimation ease 3s0

        animation: fadeInAnimation ease 3s4    14animation: fadeInAnimation ease 3s6

        2____517

        2____519

        animation-iteration-count: 1;0    14animation: fadeInAnimation ease 3s6

    animation-iteration-count: 1;0

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    23____66

    animation: fadeInAnimation ease 3s7

    animation-iteration-count: 1;0animation: fadeInAnimation ease 3s5animation: fadeInAnimation ease 3s6

    đầu ra

    Hoạt ảnh mờ dần Trong CSS

    Phương pháp 2. Sử dụng thuộc tính chuyển đổi và đặt độ mờ thành 1 khi phần thân được tải. Trong phương pháp này, phần thân có thể được đặt thành độ mờ 0 ban đầu và thuộc tính chuyển đổi được sử dụng để tạo hiệu ứng động cho thuộc tính này bất cứ khi nào nó được thay đổi. Khi trang được tải, độ mờ được đặt thành 1 bằng cách sử dụng sự kiện tải. Do thuộc tính chuyển đổi, việc thay đổi độ mờ bây giờ sẽ xuất hiện mờ dần trong trang. Thời gian mờ dần có thể được đặt trong thuộc tính chuyển tiếp

    cú pháp




    body {

            3

    _______535

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    1

    Ví dụ




    animation: fadeInAnimation ease 3s3

    _______64____65____66

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    2

    animation: fadeInAnimation ease 3s4animation: fadeInAnimation ease 3s9animation: fadeInAnimation ease 3s6

        animation: fadeInAnimation ease 3s4    3animation: fadeInAnimation ease 3s6

        2____56

        2____58

        ____80____53____66

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    2

        animation: fadeInAnimation ease 3s4animation-iteration-count: 1;6animation: fadeInAnimation ease 3s6

        2____4

        0    3

        0    67

        2____11

        ____80____86animation: fadeInAnimation ease 3s6

    animation-iteration-count: 1;0animation: fadeInAnimation ease 3s9animation: fadeInAnimation ease 3s6

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    2

    animation: fadeInAnimation ease 3s4

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    23     80
    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    29    82animation: fadeInAnimation ease 3s6

    animation: fadeInAnimation ease 3s0

        animation: fadeInAnimation ease 3s4

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    27 animation-iteration-count: 1;6
    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    29
    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    30animation: fadeInAnimation ease 3s6

        2____133

        animation-iteration-count: 1;0

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    27animation: fadeInAnimation ease 3s6

    animation: fadeInAnimation ease 3s0

        animation: fadeInAnimation ease 3s4    01animation: fadeInAnimation ease 3s6

        2____56

        2____58

        animation-iteration-count: 1;0____501animation: fadeInAnimation ease 3s6

    animation: fadeInAnimation ease 3s0

        animation: fadeInAnimation ease 3s4    14animation: fadeInAnimation ease 3s6

        2____517

        2____519

        animation-iteration-count: 1;0    14animation: fadeInAnimation ease 3s6

    animation-iteration-count: 1;0

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    23____66

    async function moveToPosition(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            transform: `translateY(${el.getBoundingClientRect().top}px)`
          },
        ], {
          duration: durationInMs,
          easing: 'ease-in',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeIn(el, durationInMs) {
      return new Promise((resolve) => {
        const animation = el.animate([{
            opacity: '0'
          },
          {
            opacity: '0.5',
            offset: 0.5
          },
          {
            opacity: '1',
            offset: 1
          }
        ], {
          duration: durationInMs,
          easing: 'linear',
          iterations: 1,
          direction: 'normal',
          fill: 'forwards',
          delay: 0,
          endDelay: 0
        });
        animation.onfinish = () => resolve();
      });
    }
    
    async function fadeInSections() {
      for (const section of document.getElementsByTagName('section')) {
        await fadeIn(section, 200);
      }
    }
    
    window.addEventListener('load', async() => {
      await moveToPosition(document.getElementById('headerContent'), 500);
      await fadeInSections();
      await fadeIn(document.getElementsByTagName('footer')[0], 200);
    });
    2

    animation-iteration-count: 1;0animation: fadeInAnimation ease 3s5animation: fadeInAnimation ease 3s30

    đầu ra

    Hoạt ảnh mờ dần Trong CSS

    CSS là nền tảng của các trang web, được sử dụng để phát triển trang web bằng cách tạo kiểu trang web và ứng dụng web. Bạn có thể học CSS từ đầu bằng cách làm theo Hướng dẫn CSS và Ví dụ về CSS này