Máy tính chỉ sử dụng HTML và CSS

Gần đây, tôi đã mở rộng kiến ​​thức về CSS của mình và không thể nghĩ ra cách nào thiết thực hơn để sử dụng những gì tôi đã học hơn là tạo ra thứ gì đó mà bất kỳ người nào có lẽ cũng sẽ sử dụng JavaScript để làm. Tôi đã tạo ứng dụng pixel art này và máy tính này. Đây là cách tôi làm máy tính

Các quy tắc

Bất cứ khi nào bạn đặt ra cho mình một thử thách, bạn nên xác định đúng mục tiêu của mình. Trong trường hợp này, không có JavaScript nào đơn giản, không có tệp JS, không có thẻ script và không sử dụng trình xử lý sự kiện trong HTML. Rất phổ biến đối với các dự án 'CSS thuần túy' sử dụng các ngôn ngữ như HAML và SCSS, những ngôn ngữ này sẽ biên dịch thành HTML và CSS tĩnh thông thường tương ứng, vì vậy kết quả cuối cùng vẫn là HTML và CSS thuần túy. Có rất nhiều dự án điên rồ sử dụng chúng ngoài tự nhiên. Tôi đã chọn không sử dụng chúng cho dự án này, chỉ để bắt đầu đơn giản. Bạn có thể xem codebase đầy đủ của tôi tại đây

Tại sao làm điều này?

Tại sao không?

Tôi đã làm điều đó như thế nào?

nút radio

Đầu tiên là tương tác người dùng. Làm cách nào để bạn phát hiện ra rằng người dùng đã nhấp vào nút mà không có JS? . Với

 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }

chúng tôi nhận được

Trình diễn các nhãn dưới dạng các nút

Hãy giải thích. Các nhãn được kết nối với các nút

input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
0, sao cho việc nhấp vào chúng cũng giống như nhấp vào đầu vào tương ứng của chúng. Nhãn thích hợp hơn là sử dụng đầu vào trực tiếp vì chúng giúp tạo kiểu dễ dàng hơn.
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
2 là bộ chọn anh chị em nói chung, chẳng hạn như
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
3 sẽ chọn tất cả các phần tử khớp với
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
4 và có một phần tử anh chị em đứng trước khớp với
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
5. Điều này cho phép chúng tôi ẩn các
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
6 theo mặc định và chỉ hiển thị chúng khi đầu vào được kết nối của chúng được chọn

Biến và bộ đếm CSS

Bây giờ để tạo ra một số. Chúng ta cần sử dụng các biến CSS. Để khai báo một thuộc tính, hãy tạo tên thuộc tính bắt đầu bằng dấu gạch ngang kép (

input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
7) và giá trị có thể là bất kỳ giá trị CSS nào. Ví dụ
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
8 hoặc
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
9. Để sử dụng các biến, chỉ cần sử dụng hàm
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

20 như bên dưới. Chúng tôi cũng sẽ sử dụng bộ đếm CSS, có thể lưu trữ và hiển thị số. Thông thường bộ đếm CSS được sử dụng cho những việc như tự động đánh số phần. Vì vậy

 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

2

 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

4

chúng tôi nhận được

Trình diễn các biến và bộ đếm CSS

Việc lựa chọn các nút radio đặt biến

 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

21 bên trong
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

22. Giá trị cũng sẽ được thừa hưởng bởi tất cả trẻ em. Sau đó, vì chúng tôi không thể trực tiếp xuất giá trị của biến, chúng tôi tăng bộ đếm
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

23 và hiển thị giá trị này bằng cách sử dụng
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

24 được tạo. Lý do chúng ta cần sử dụng các biến CSS là các giá trị bộ đếm không thể được sử dụng trong
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

25, điều mà chúng ta sẽ thảo luận trong phần tiếp theo. Để có được nhiều chữ số hơn, chúng ta chỉ cần nhân đôi những gì chúng ta có. Bằng cách lồng HTML cẩn thận và sử dụng các biến trung gian, chúng tôi có thể giảm thiểu trùng lặp CSS. Chúng ta có thể thấy điều này dưới đây

input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
0

input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
1

Ở đây, các đầu vào sẽ đặt

 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

21 như chúng đã làm ở trên và mỗi div riêng lẻ lấy giá trị đó và xác nhận nó thành
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

27 ect. Điều này có nghĩa là chúng tôi không cần lặp lại CSS
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

28 cho mọi chữ số

tính toán CSS

CSS có chức năng

 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

25. Điều này cho phép bạn thực hiện các phép tính (tôi cũng bị sốc như bạn). Nó có nhiều công dụng, ví dụ, bạn có thể đặt
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

40 của thứ gì đó thành
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

41. Đối với trường hợp của chúng tôi, chúng tôi có thể sử dụng nó để xác định các số đầu vào và cả kết quả cuối cùng. Hãy xem xét việc lấy số đầu vào

input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
8

Bộ chọn CSS

 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

42 khớp với tất cả các phần tử, vì vậy, CSS ở trên sẽ tìm thấy một
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

43 là phần tử con của bất kỳ phần tử nào xuất hiện sau một đầu vào được chọn với một tên nhất định. Bộ chọn thứ hai sẽ ghi đè bộ chọn đầu tiên đơn giản bằng cách xuất hiện sau trong tài liệu

Nếu chúng ta thêm một bộ đầu vào để chọn hoạt động, chúng ta có thể sử dụng một phương pháp tương tự như trên để có câu trả lời cuối cùng. Sau đó, chỉ cần nắm bắt các giá trị trong bộ đếm và hiển thị nó. Thuộc tính

 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

24 cũng có thể lấy một chuỗi, cho phép chúng tôi hiển thị cho người dùng thao tác đang được sử dụng

@property và @counter-style

Với những gì chúng tôi có cho đến nay, chúng tôi có thể tạo ra một máy tính chức năng. Tuy nhiên, có một lỗ hổng và đó là thiếu số thập phân. Vấn đề là bộ đếm chỉ có thể chứa số nguyên. Vì vậy, chúng ta cần chia số thành các phần nguyên và phân số. Điều đầu tiên chúng ta cần cho việc này là một cách để làm tròn số (chúng ta không thể sử dụng bộ đếm vì chúng không thể được đưa vào

 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

25). Chúng tôi sẽ sử dụng tính năng thử nghiệm
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

46. @property cho phép bạn xác định một biến với các tính năng như kiểm tra kiểu và kiểm soát xem các giá trị có được kế thừa bởi con hay không. Nếu chúng ta định nghĩa một
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

46 như vậy

input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
5

thì mọi giá trị được gán cho

 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

48 sẽ được làm tròn thành số nguyên gần nhất. Để hiển thị một số đến 7 chữ số thập phân, trước tiên chúng ta sẽ thực hiện các phép tính sau. Ở đây
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

49 được định nghĩa bên ngoài

input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
8

Sử dụng

 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

48 và
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
01, chúng ta có thể tăng bộ đếm có tên tương tự. Nhưng chúng ta không thể chỉ hiển thị chúng trực tiếp. Lý do là nếu chúng ta làm điều này cho một số như 1. 005, giá trị của
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

48 sẽ là 1 và giá trị của
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
01 sẽ là 5. Chúng ta cần đệm số thập phân bằng cách sử dụng một
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
04 tùy chỉnh. Chúng ta cũng cần sử dụng
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
04 để hiển thị dấu âm, bởi vì với thứ gì đó như
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
06, chúng ta không thể nói với hệ thống rằng chúng ta có 'số 0 âm'. Để hiển thị đúng số chúng ta cần

input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
6

Đối số thứ 2 trong hàm

input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
07 là kiểu. Kiểu
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
08, xác định một hệ thống số bình thường, ngoại trừ bất kỳ giá trị nào có ít hơn 7 chữ số sẽ được đệm bằng số không. Kiểu
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
09 cũng sử dụng một hệ thống số, nhưng vì chúng tôi đã xác định các ký hiệu để trống nên nó sẽ chỉ hiển thị dấu âm (khi cần)

Gói (lại

Đây là tất cả các yếu tố chính để tạo ra một máy tính. Có một vài điều còn lại để làm. Có kiểu dáng (vâng, tôi cũng đã sử dụng CSS cho mục đích thực tế của nó). Bạn cũng có thể nhận thấy rằng thiết lập hiện tại cung cấp cho chúng tôi một bộ đầu vào riêng cho từng chữ số của một số, chúng tôi có thể sử dụng

input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
2,
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
11 và thuộc tính
input, p { display: none }

#q-1:checked ~ .quote-1 { display: block; }
#q-2:checked ~ .quote-2 { display: block; }
12 để luôn hiển thị nhãn của chữ số tiếp theo.
 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

24 có thể được chia thành các phần tử riêng biệt, cho phép chúng tôi chỉ hiển thị phần thập phân khi cần thiết

Chúng ta có thể làm điều này bao xa nữa? . Mặc dù bằng cách sử dụng thứ gì đó để tạo HTML, bạn có thể tiến khá xa. Về lý thuyết, có thể đưa điều này đến gần hơn với một máy tính khoa học. Ví dụ, để thực hiện các hàm lượng giác, chúng ta có thể khai thác tính đối xứng và tính tuần hoàn của chúng, sau đó sử dụng các xấp xỉ. Tôi nghĩ phần khó nhất là sử dụng dấu ngoặc, vì tôi không biết cách tự động thêm dấu ngoặc vào

 type="radio" name="x" id="q-1" /> 
 type="radio" name="x" id="q-2" /> 
 for="q-1">Quote 1
 for="q-2">Quote 2

 class="quote-1">...

class="quote-2">...

25 nên chúng tôi sẽ phải có bộ chọn và CSS riêng biệt cho mọi tình huống

Phần kết luận

Tôi đã tạo ra máy tính này, chỉ như một bài tập thú vị và để làm điều gì đó ngớ ngẩn. Sự vô lý là thứ thúc đẩy mong muốn của tôi để làm điều này. Tuy nhiên, tôi đã học được rất nhiều trong khi làm điều này. Mặc dù tôi vẫn sẽ phải sử dụng google mỗi khi muốn căn giữa một số văn bản, nhưng tôi đã có rất nhiều niềm vui. Nếu bạn có ý tưởng cho một dự án vô nghĩa, tôi khuyên bạn nên theo đuổi nó. Rốt cuộc, tại sao không?

Bạn có thể tạo một máy tính bằng HTML và CSS không?

Để thiết kế máy tính cơ bản, chúng tôi sẽ sử dụng HTML, CSS và JavaScript . HTML được sử dụng để thiết kế cấu trúc cơ bản của máy tính. Các kiểu CSS được sử dụng để áp dụng các kiểu trên máy tính và JavaScript được sử dụng để thêm chức năng tính toán.

Làm cách nào để tạo máy tính bằng HTML?

Ví dụ về Máy tính sử dụng HTML.

Tính toán có thể thực hiện được trong HTML không?

Về mặt logic, Có. Có thể thực hiện các phép tính đơn giản mà không cần sử dụng JS. tuy nhiên có rất nhiều cảnh báo về điều này. Cách tốt nhất để giải quyết vấn đề không có js là sử dụng ngôn ngữ phía máy chủ như PHP hoặc tương tự để thực hiện số học như @ACV đã nói đúng

Làm cách nào để tạo máy tính trong HTML bằng JavaScript?

Hướng dẫn tạo một máy tính đơn giản .
Mã HTML ban đầu để bao gồm. js và. tập tin css. .
Input the Digits And Operators. This step creates buttons for digits from 0 to 9 and operators like +,-,*,/, and = .. .
Thêm kiểu dáng trong. tập tin css. Để làm đẹp những gì bạn nhìn thấy trên màn hình, kiểu dáng là rất quan trọng