Bắt chước thẻ nhấp nháy với hình động CSS3


149

Tôi thực sự muốn làm cho một đoạn văn bản nhấp nháy kiểu cũ mà không cần sử dụng javascript hoặc trang trí văn bản.

Không có chuyển tiếp, chỉ * nháy *, * nháy *, * nháy *!


EDIT : Điều này khác với câu hỏi đó bởi vì tôi yêu cầu chớp mắt mà không chuyển tiếp liên tục, trong khi OP của các câu hỏi khác hỏi làm thế nào để thay thế nhấp nháy bằng chuyển tiếp liên tục


1
Câu trả lời hay nhất mà tôi tìm thấy cho điều này không may bị xóa bởi poster gốc, @ m93a, vì vậy nó chưa thể được nâng cấp. Tôi nghĩ rằng câu trả lời nên được xóa và nâng cấp, vì đó là giải pháp đơn giản nhất tạo ra hiệu ứng nhấp nháy tốt nhất và nó hoạt động trong tất cả các phiên bản hiện tại của các trình duyệt chính . Bạn cũng có thể đọc một bài đăng blog ngắn trên cùng một giải pháp tại Thi đua <blink> bằng hoạt hình WebKit CSS3 .

Những gì tôi không hiểu là tại sao mỗi câu trả lời duy nhất có vẻ đây để có @-webkit-keyframesquy tắc sau sự không tiền tố @keyframesquy định, và một số thậm chí có -webkit-animationlời tuyên bố sau khi một không tiền tố.
BoltClock

@BoltClock: Đó là vì hoạt ảnh CSS3 tương đối mới và chưa ổn định trong trình duyệt Webkit. Cái gọi là "tiền tố" ở đây dành cho các nhà phát triển muốn sử dụng hình ảnh động ngay cả khi chúng không ổn định và chưa kết thúc.
m93a

@ m93a: Tôi biết điều đó, nhưng tôi đang hỏi tại sao chúng được đặt sau quy tắc không được chuẩn bị và không phải trước nó (rõ ràng tôi không bao gồm cụm từ đó trong nhận xét ban đầu, lỗi của tôi).
BoltClock

Câu trả lời:


242

Netscape ban đầu <blink>có chu kỳ thuế 80%. Điều này đến khá gần, mặc dù thực tế <blink>chỉ ảnh hưởng đến văn bản:

.blink {
  animation: blink-animation 1s steps(5, start) infinite;
  -webkit-animation: blink-animation 1s steps(5, start) infinite;
}
@keyframes blink-animation {
  to {
    visibility: hidden;
  }
}
@-webkit-keyframes blink-animation {
  to {
    visibility: hidden;
  }
}
This is <span class="blink">blinking</span> text.

Bạn có thể tìm thêm thông tin về Keyframe Animations tại đây .


2
Vâng, nó đơn giản hơn nhiều. Bạn có thể thêm tiền tố webkit để nó hoạt động trong Chrome và Safari.
m93a

2
Điều này có thể không hoạt động trên Chrome / safari nếu không có tiền tố webkit.
David Pelaez

2
Những gì tôi thích làm là, thay vì làm nháy một lớp, làm cho nháy một thẻ (với blink { animation: blink 1s steps(5, start) infinite; -webkit-animation: blink 1s steps(5, start) infinite; }). Bằng cách đó, bạn chỉ có thể sử dụng <blink>thẻ, thay vì <span class="blink">=)
416E64726577

Lưu ý: Đây chỉ là yêu cầu "<nháy> bắt chước" của OP. Không thể sử dụng với thuộc tính tức là colordưới dạng hoạt hình "bật tắt".
Martin Schneider

97

Hãy để tôi chỉ cho bạn một mẹo nhỏ.

Như Arkanciscan đã nói , bạn có thể sử dụng các chuyển tiếp CSS3. Nhưng giải pháp của anh ấy trông khác với thẻ ban đầu.

Những gì bạn thực sự cần làm là đây:

@keyframes blink {
  50% {
    opacity: 0.0;
  }
}
@-webkit-keyframes blink {
  50% {
    opacity: 0.0;
  }
}
.blink {
  animation: blink 1s step-start 0s infinite;
  -webkit-animation: blink 1s step-start 0s infinite;
}
<span class="blink">Blink</span>

Trình diễn thử


@ Bốn mươi hai Xin lỗi, tôi đã quên tiền tố -webkit- . Tôi nghĩ nó đã hoạt động với tất cả các trình duyệt thực tế trừ Chrome và Safari. Bây giờ, sau khi cập nhật, nó sẽ hoạt động cho Firefox, Chrome, Opera, Safari và MSIE10.
m93a

Như đã viết, câu trả lời này thực sự sẽ hoạt động trong các phiên bản hiện tại của Firefox, Chrome, Safari và IE .

2
Không hoạt động vì một lỗi đánh máy: trên phần webkit, tên hoạt hình blink, bị thiếu. Đã sửa.
Andrea Ligios

1
Hoạt động tốt, cảm ơn, đây là triển khai của tôi dựa trên giải pháp của bạn: jsfiddle.net/gnx4mqc4
Hamid Behnam

1
@ m93a: Các 0% 100% { opacity: 1.0; }phần dường như là thừa, vì chúng là mặc định, phải không?
jamadagni

48

Hãy thử CSS này

@keyframes blink {  
  0% { color: red; }
  100% { color: black; }
}
@-webkit-keyframes blink {
  0% { color: red; }
  100% { color: black; }
}
.blink {
  -webkit-animation: blink 1s linear infinite;
  -moz-animation: blink 1s linear infinite;
  animation: blink 1s linear infinite;
} 
This is <span class="blink">blink</span>

Bạn cần tiền tố cụ thể của trình duyệt / nhà cung cấp: http://jsfiddle.net/es6e6/1/ .


1
Không có gì giống như -ms-animation hoặc -o-animation và -moz-animation chỉ có trong phiên bản 15, không sử dụng nó ngay bây giờ. Nhìn vào caniuse.com để xem hỗ trợ thực tế. Xin lỗi nhưng tôi sẽ không chấp nhận câu hỏi này :( PS: Bạn có thể sử dụng 'chỉnh sửa' cho câu trả lời của người khác.
m93a

Đó chỉ là thói quen xấu cũ của tôi - thêm hậu tố vào tất cả các thuộc tính CSS3 mới .. Câu trả lời được cập nhật.
Belyash

đây không phải là "nháy mắt" mà là "nháy mắt mờ dần".
Martin Schneider

30

Thực sự không cần visibilityhoặc opacity- bạn chỉ có thể sử dụng color, điều này có mặt trái là chỉ giữ bất kỳ "nhấp nháy" nào cho văn bản:

blink {
    display: inline;
    color: inherit;
    animation: blink 1s steps(1) infinite;
    -webkit-animation: blink 1s steps(1) infinite;
}
@keyframes blink { 50% { color: transparent; } }
@-webkit-keyframes blink { 50% { color: transparent; } }
Here is some text, <blink>this text will blink</blink>, this will not.

Câu đố: http://jsfiddle.net/2r8JL/


4
Tuyệt vời! Đây là giải pháp duy nhất cung cấp nhấp nháy chỉ văn bản. Tất cả các giải pháp khác nhấp nháy nền của phần tử quá. Để kiểm tra, sử dụng chữ <span>màu trắng trên nền màu xanh lam trên <body>nền màu xanh lá cây. Chỉ trong giải pháp này, nền màu xanh sẽ không nhấp nháy.
jamadagni

10

Tôi sẽ xuống địa ngục vì điều này:

=keyframes($name)
  @-webkit-keyframes #{$name}
    @content
  @-moz-keyframes #{$name}
    @content
  @-ms-keyframes #{$name}
    @content
  @keyframes #{$name}
    @content


+keyframes(blink)
  25%
    zoom: 1
    opacity: 1

  65%
    opacity: 1 

  66%
    opacity: 0

  100%
    opacity: 0

body
  font-family: sans-serif
  font-size: 4em
  background: #222
  text-align: center

  .blink
    color: rgba(#fff, 0.9)
    +animation(blink 1s 0s reverse infinite)
    +transform(translateZ(0))

.table
  display: table
  height: 5em
  width: 100%
  vertical-align: middle

  .cell
    display: table-cell
    width: 100%
    height: 100%
    vertical-align: middle

http://codepen.io/anon/pen/kaGxC (sass với bourbon)


1
Codepen của bạn tạo ra một Undefined mixin 'experimental'.lỗi và do đó có vẻ như nó sẽ không biên dịch và hiển thị hình ảnh động nhấp nháy.

6

Một biến thể khác

.blink {
    -webkit-animation: blink 1s step-end infinite;
            animation: blink 1s step-end infinite;
}
@-webkit-keyframes blink { 50% { visibility: hidden; }}
        @keyframes blink { 50% { visibility: hidden; }}
This is <span class="blink">blink</span>


2

Nó hoạt động trong trường hợp của tôi nhấp nháy văn bản trong khoảng thời gian 1 giây.

.blink_me {
  color:#e91e63;
  font-size:140%;
  font-weight:bold;
  padding:0 20px 0  0;
  animation: blinker 1s linear infinite;
}

@keyframes blinker {
  50% { opacity: 0.4; }
}

-3

Nếu bạn muốn một số hiệu ứng phát sáng sử dụng này

@keyframes blink {
  50% {
    opacity: 0.0;
  }
}
@-webkit-keyframes blink {
  50% {
    opacity: 0.0;
  }
}

atom-text-editor::shadow  .bracket-matcher .region {
    border:none;
    background-color: rgba(195,195,255,0.1);
    border-bottom: 1px solid rgb(155,155,255);
    box-shadow: 0px 0px 9px 4px rgba(155,155,255,0.1);
    border-radius: 3px;
    animation: blink 2s steps(115, start) infinite;
    -webkit-animation: blink 2s steps(115, start) infinite;
}

-5

Vui lòng tìm giải pháp dưới đây cho mã của bạn.

@keyframes blink {
  50% {
    color: transparent;
  }
}

.loader__dot {
  animation: 1s blink infinite;
}

.loader__dot:nth-child(2) {
  animation-delay: 250ms;
}

.loader__dot:nth-child(3) {
  animation-delay: 500ms;
}
Loading <span class="loader__dot">.</span><span class="loader__dot">.</span><span class="loader__dot">.</span>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.