Mercurial > qr-html
comparison index.html @ 14:1fbe0b098f0f
Adjust styling
- max 256px
- 8px padding
- plain line instead of hr (more precise margin)
author | nanaya <me@nanaya.net> |
---|---|
date | Wed, 11 Sep 2024 21:27:58 +0900 |
parents | a8e0607093f3 |
children | d6a6c128cd5a |
comparison
equal
deleted
inserted
replaced
13:a56d5a527f6c | 14:1fbe0b098f0f |
---|---|
17 font-size: 12px; | 17 font-size: 12px; |
18 } | 18 } |
19 | 19 |
20 body { | 20 body { |
21 margin: 0; | 21 margin: 0; |
22 padding: 10px; | 22 padding: 8px; |
23 height: 100%; | 23 height: 100%; |
24 } | 24 } |
25 | 25 |
26 .inputbox { | 26 .inputbox { |
27 width: 100%; | 27 width: 100%; |
28 margin-bottom: 10px; | 28 margin-bottom: 8px; |
29 resize: vertical; | 29 resize: vertical; |
30 font-family: Courier New, monospace; | 30 font-family: Courier New, monospace; |
31 /* prevent ios zoom */ | 31 /* prevent ios zoom */ |
32 font-size: 16px; | 32 font-size: 16px; |
33 } | 33 } |
35 .page { | 35 .page { |
36 width: 100%; | 36 width: 100%; |
37 min-height: 100%; | 37 min-height: 100%; |
38 max-width: 600px; | 38 max-width: 600px; |
39 margin: 0 auto; | 39 margin: 0 auto; |
40 display: flex; | 40 display: grid; |
41 flex-direction: column; | 41 grid-template-rows: 1fr auto; |
42 padding: 10px; | 42 gap: 8px; |
43 } | 43 } |
44 | 44 |
45 .page__main { | 45 .page__footer { |
46 flex: 1; | 46 border-top: 1px solid #333; |
47 padding-top: 8px; | |
47 } | 48 } |
48 | 49 |
49 .outputbox { | 50 .outputbox { |
50 will-change: opacity; | 51 max-width: 256px; |
51 } | |
52 | |
53 .outputbox.js-hidden { | |
54 opacity: 0; | |
55 } | 52 } |
56 | 53 |
57 .outputbox > canvas { | 54 .outputbox > canvas { |
58 display: none; | 55 display: none; |
59 } | 56 } |
60 | 57 |
61 .outputbox > img { | 58 .outputbox > img { |
62 max-width: 100%; | 59 max-width: 100%; |
63 max-height: calc(100vh - 250px); | |
64 } | 60 } |
65 | 61 |
66 .title { | 62 .title { |
67 font-size: 16px; | 63 font-size: 16px; |
68 } | 64 } |
80 <textarea class="inputbox js-qr-input" rows="4" autofocus></textarea> | 76 <textarea class="inputbox js-qr-input" rows="4" autofocus></textarea> |
81 | 77 |
82 <div class="outputbox js-qr-output"></div> | 78 <div class="outputbox js-qr-output"></div> |
83 </div> | 79 </div> |
84 | 80 |
85 <div> | 81 <div class="page__footer"> |
86 <hr> | |
87 | |
88 <a href="https://hg.sr.ht/~nanaya/qr-html">Source</a> | 82 <a href="https://hg.sr.ht/~nanaya/qr-html">Source</a> |
89 </div> | 83 </div> |
90 </div> | 84 </div> |
91 | 85 |
92 <script src="qrcode.min.js"></script> | 86 <script src="qrcode.min.js"></script> |
93 | 87 |
94 <script> | 88 <script> |
95 var inputDom = document.querySelector(".js-qr-input") | 89 var inputDom = document.querySelector(".js-qr-input") |
96 var outputDom = document.querySelector(".js-qr-output") | 90 var outputDom = document.querySelector(".js-qr-output") |
97 var qr = new QRCode(outputDom, { correctLevel: QRCode.CorrectLevel.L, width: 1024, height: 1024 }) | 91 var qr = new QRCode(outputDom, { correctLevel: QRCode.CorrectLevel.L, width: 256, height: 256 }) |
98 | 92 |
99 var runTimeout = null | 93 var runTimeout = null |
100 var debouncedRefreshCode = function() { | |
101 clearTimeout(runTimeout) | |
102 runTimeout = setTimeout(refreshCode, 100) | |
103 } | |
104 | 94 |
105 var refreshCode = function() { | 95 var refreshCode = function() { |
106 var text = inputDom.value | 96 var text = inputDom.value |
107 | 97 |
108 if (text !== "") { | 98 if (text === "") { |
99 outputDom.style.display = 'none'; | |
100 } else { | |
101 outputDom.style.display = 'block'; | |
109 qr.makeCode(text) | 102 qr.makeCode(text) |
110 outputDom.classList.remove('js-hidden') | |
111 } else { | |
112 outputDom.classList.add('js-hidden') | |
113 } | 103 } |
114 } | 104 } |
115 | 105 |
116 inputDom.addEventListener('input', debouncedRefreshCode) | 106 inputDom.addEventListener('input', refreshCode) |
117 refreshCode() | 107 refreshCode() |
118 </script> | 108 </script> |
119 </body> | 109 </body> |