While overriding templates for question views and writing custom CSS for questions enables you to make extensive customisations, you can also add entirely new question types.
Make use of that feature when you want to:
Build custom behaviour on user interactions and system events
Leverage data from custom question properties
Control visual output and user interactions entirely
Files involved in creating a custom question type:
Every type has a name - for this article we use ‘customtype’.
A JS question type object in [customization_assets_folder]/javascript/custom_questions.js
A view class and template in [customization_folder]/views/question_customtype/view.html.php and [customization_folder]/views/question_customtype/tmpl/default.php
CSS styling in [customization_assets_folder]/css/custom.css
See separate articles for each - 1) JS question type object, 2) View class and template, 3) CSS Styling