Don't fake a table with divs — use a real <table>/<th scope="col">, since only genuine table markup lets a screen reader announce a cell's position, like "row 3, column 2, Name column." A sortable header wraps the label in a button and carries aria-sort="ascending"/"descending"/"none" on the th itself.
It's often compared with a card list — a data table keeps several attributes (name, role, status, date…) aligned in columns for easy comparison, while a card list shows each item more richly with an image and description. With many rows, it's usually paired with pagination.
On narrow screens, rather than shrinking every column, a common responsive pattern folds less-important columns away and stacks each row like a small vertical card.