Example of how to accessibly associate inputs, without labels, to table headers. All inside an accessible, responsive table.
Example
Budget calculator
Monthly outgoing
Amount you pay
How often
Monthly cost
Food, drink and clothing
e.g. groceries, eating out, drinks and clothes
0.00
Household goods and services
Including property maintenance and repairs, furnishing, flooring, household appliances etc.
0.00
Utility bills, council tax and buildings and contents insurance
e.g. gas, electricity, oil and water; council tax; phone and TV packages; TV licence and buildings and contents insurance
0.00
Transport
e.g. petrol, car tax and insurance, maintenance, public transport, season tickets and taxis
0.00
Total Monthly Outgoings
0.00
Screen-reader announces:
Upon a change in the table, the totals are politely read aloud by screen-readers, though it's not a requirement for it to be visible.
I also suggest using localStorage to retain entered values visit to visit on a single device. Possibly by a "Preserve values" checkbox.
The code
The table HTML layout
The most important part is associating the input/select with the column header and a limited part of the description or row header.
Original table
Layout comprising of unrelated divs, and unlabelled inputs, which only works for visual users. Descriptions are hiding behind a popup modal. Number inputs are left aligned, and the monthly cost is centred.
Weekly calculation incorrect too. Should be: value * 52 / 12
Design Notes
Associate the input/select with the column header and a limited part of the description or row header.
Align numbers with decimal places on the period.
Align numbers without decimal places to the right.
Consider using a monospace font for real numbers to keep alignments from drifting.
Use a comma as a separator for thousands and millions.
Size input widths to the expected width of the content.
The select dropdown arrow was created in CSS for cross-browser styling compatability.