Well, a transaction usually contains more information than sender, receiver and amount. If you send a transaction, you have to sign it with your private key, so there is a signature. Also, if this is Bitcoin, you still have to attach a script with your public key so others can verify the transaction. In addition, some other information such as miner fee has to be put into the transaction as well. Furthermore, in Bitcoin, a transaction may include multiple UTXOs other than a single account address, requiring more space to store.
Vite's snapshot block only contains "updated" states, making it lightweight apparently.
For the empty block you mentioned, Bitcoin will have the same situation if there is no transaction to package when a miner builds a block.