with current Script language, is it possible to create a transaction
that becomes invalid if not included in a block before a certain time
(or before a certain block height)?
well, maybe not directly with the standard way of scripting transactions. Bitcoin has two functions for adding delay to a tx. Locktime/Sequence would not be working, cause it allows to define, by when a tx can go into the blockchain. If delay is not reached, it will not be mined, and stay in mempool. So it is the opposite of your requirement. But:
CSV (BIP112) or CLTV (BIP68): both allow to define a delay, before the next steps can be executed. One of the step could also be "OP_RETURN" or whatever leaves a "false" on the stack. This would terminate the script execution immediately, and mark the tx invalid.
If so, how many bytes it would take up?
This is maybe an additional 10-20 bytes for the IF/ELSE/ENDIF and the CSV or CLTV codes. But you would probably need a another tx. One as a "funding transaction", and this logic with the spending tx. So it would end up with a "bloat" of the blockchain.
Such a transaction would be broadcast by common nodes, or they expect
a certain specific signature format?
This gets a bit tricky: these tx would need to be crafted annually, and they are defined as non-standard (which doesn't mean invalid though. But you have to find ways to bring it to a miner/into the network).