Xin chào các bạn, ở các bài viết trước tôi đã giới thiệu cho bạn 2 form chứa code có nút copy to clipboard + tooltip. Tuy nhiên nhược điểm của nó là mẫu code html khi viết bài rất dài dẫn đến việc bạn gặp khó khăn. Và để khắc phục điều đó ở bài viết này sẽ là 1 form cực gọn nhẹ.
Trước tiên xem demo cho phấn khởi
Trong bài viết này tôi sử dụng jquery 3.3.1, clipboardjs 2.0.1 và font awesome 5.0.13. Các phiên bản có thể thay đổi bạn truy cập https://cdnjs.com để cập nhật bản mới.
Lần lượt kiểm tra các thư viện và bổ sung nếu blog bạn chưa có, chèn trước thẻ </head>
<link href='https://use.fontawesome.com/releases/v5.0.13/css/all.css' rel='stylesheet' type='text/css'/> <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js' type='text/javascript'/> <script src='https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.1/clipboard.min.js' type='text/javascript'/>
Viết CSS
#clpmsg, #clpmsg::before, .clpbrd { position: absolute } pre { position: relative; border-color: #f5f5f5; border-style: solid; border-width: 1px 1px 1px 0; padding: 10px; border-left: solid 5px #4CAF50; font-size: 15px; max-height: 500px; overflow-y: scroll; white-space: pre-wrap } .clpbrd { background: #fff; border: 1px solid #d5d5d5; padding: 2px; border-radius: 3px; width: 25px; height: 25px; cursor: pointer; top: 3px; right: 3px; -webkit-transition: opacity .3s ease-in-out; -o-transition: opacity .3s ease-in-out; transition: opacity .3s ease-in-out; opacity: 0 } pre .clpbrd:hover #clpmsg, pre:hover .clpbrd { opacity: 1 } pre .clpbrd:active, pre .clpbrd:hover { background-color: #ddd; background-image: none; border-color: #b5b5b5; transition: .3s; box-shadow: inset 0 2px 4px rgba(0, 0, 0, .15) } pre .clpbrd:focus { text-decoration: none; border-color: #51a7e8; outline: 0; box-shadow: 0 0 5px rgba(81, 167, 232, .5) } #clpmsg { background-color: #000; color: #fff; padding: 3px 5px; border-radius: 3px; word-break: initial; height: 17px; top: -1px; right: 31px; opacity: 0; -webkit-transition: opacity 1s ease-in-out; -o-transition: opacity 1s ease-in-out; transition: opacity 1s ease-in-out } #clpmsg::before { content: ""; border: 10px solid; top: 2px; border-color: transparent transparent transparent #000; right: 0; margin-right: -15px; width: 0; height: 0 }
Lưu ý có thể css của thẻ pre sẽ xung đột với css cũ trong template của bạn, có thể thêm hoặc bỏ bớt nhưng không được xóa position: relative; vả overflow-y: scroll;
Cuối cùng dán code sau trước thẻ đóng </body>
<script type='text/javascript'>//<![CDATA[ function showTooltip(elem){$("<span id='clpmsg'>Copied</span>").prependTo(elem),$(elem).children().first().delay(1e3).fadeOut(1e3,function(){$(this).remove()})}$("<button class='clpbrd' data-clipboard-action='copy' data-clipboard-target='pre code'><i class='far fa-clone'></i></button>").insertBefore("pre code");var clipboard=new ClipboardJS(".clpbrd",{target:function(trigger){return trigger.nextElementSibling}});clipboard.on("success",function(e){e.clearSelection(),showTooltip(e.trigger)});var TopOffset=parseInt($(".clpbrd").css("top"));$("pre").scroll(function(){$(".clpbrd").css({top:$(this).scrollTop()+TopOffset})}); //]]></script>
Nếu bạn dùng font awesome 4, có thể thay phần màu đỏ thành <i class='fa fa-copy'></i> hoặc bất kì icon nào bạn thích
Nếu bạn dùng clipboardjs version dưới 2.0.0 bạn cần thay ClipboardJS thành Clipboard
Lưu template lại
Khi viết bài cần chèn code vào khung bạn chuyển chế độ HTML và trình bày theo form
<pre><code> <!-- Đặt code đã mã hóa ở đây --> </code></pre>
Có thể tham khảo công cụ convert code HTML.
Như vậy ưu điểm lớn nhất của form này đó là đoạn code gọi khung soạn thảo, chỉ bằng cặp thẻ code lồng trong pre bạn đã có thể gọi được form, hơn nữa cũng không cần phải chỉnh từng id như form trước tôi đã giới thiệu
Cuối cùng xin chúc bạn thành công !
1. Không vi phạm luật pháp nước CHXHCN Việt Nam
2. Không vi phạm thuần phong mỹ tục Việt Nam
3. Không bàn luận vấn đề liên quan đến tôn giáo, chính trị
4. Không đả kích, chửi bới hay đưa ra những lời nói không phù hợp với mục tiêu của website
5. Không bình luận với mục đích quảng cáo, trao đổi, mua bán
6. Khuyến khích sử dụng Tiếng Việt có dấu, hạn chế sử dụng tiếng lóng, viết tắt
7. Khi cần sự trợ giúp, vui lòng miêu tả chi tiết lỗi và để lại link đính kèm, tránh nói chung chung gây mất thời gian cho đôi bên