From 49470102e884275fd3eefb3d8ee227a1c595d92d Mon Sep 17 00:00:00 2001 From: Kevin Bond Date: Fri, 9 Apr 2021 11:46:53 -0400 Subject: [PATCH] [Form] add tailwindcss form theme docs --- _images/form/tailwindcss-form.png | Bin 0 -> 38574 bytes form/tailwindcss.rst | 95 ++++++++++++++++++++++++++++++ forms.rst | 1 + 3 files changed, 96 insertions(+) create mode 100644 _images/form/tailwindcss-form.png create mode 100644 form/tailwindcss.rst diff --git a/_images/form/tailwindcss-form.png b/_images/form/tailwindcss-form.png new file mode 100644 index 0000000000000000000000000000000000000000..8a290749149b5f0c5c5c2f897cbadc1a6be081da GIT binary patch literal 38574 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 literal 0 HcmV?d00001 diff --git a/form/tailwindcss.rst b/form/tailwindcss.rst new file mode 100644 index 00000000000..52f4eb857d9 --- /dev/null +++ b/form/tailwindcss.rst @@ -0,0 +1,95 @@ +Tailwind CSS Form Theme +======================= + +Symfony provides a minimal form theme for `Tailwind CSS`_. Tailwind is a *utility first* +CSS framework and provides *unlimited ways* to customize your forms. Tailwind has +an official `form plugin`_ that provides a basic form reset that standardizes their look +on all browsers. This form theme requires this plugin and adds a few basic tailwind +classes so out of the box, your forms will look decent. Customization is almost always +going to be required so this theme makes that easy. + +.. image:: /_images/form/tailwindcss-form.png + :align: center + +To use, first be sure you have installed and integrated `Tailwind CSS`_ and the +`form plugin`_. Follow their respective documentation to install both packages. + +If you prefer to use the Tailwind theme on a form by form basis, include the +``form_theme`` tag in the templates where those forms are used: + +.. code-block:: html+twig + + {# ... #} + {# this tag only applies to the forms defined in this template #} + {% form_theme form 'tailwind_2_layout.html.twig' %} + + {% block body %} +

User Sign Up:

+ {{ form(form) }} + {% endblock %} + +Customization +------------- + +Customizing CSS classes is especially important for this theme. + +Twig Form Functions +~~~~~~~~~~~~~~~~~~~ + +You can customize classes of individual fields by setting some class options. + +.. code-block:: twig + + {{ form_row(form.title, { + row_class: 'my row classes', + label_class: 'my label classes', + error_item_class: 'my error item classes', + widget_class: 'my widget classes', + widget_disabled_class: 'my disabled widget classes', + widget_errors_class: 'my widget with error classes', + }) }} + +When customizing the classes this way the defaults provided by the theme +are *overridden* opposed to merged as is the case with other themes. This +enables you to take full control of the classes without worrying about +*undoing* the generic defaults the theme provides. + +Project Specific Form Layout +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you have a generic Tailwind style for all your forms, you can create +a custom form theme using the Tailwind CSS theme as a base. + +.. code-block:: twig + + {% use 'tailwind_2_layout.html.twig' %} + + {%- block form_row -%} + {%- set row_class = row_class|default('my row classes') -%} + {{- parent() -}} + {%- endblock form_row -%} + + {%- block widget_attributes -%} + {%- set widget_class = widget_class|default('my widget classes') -%} + {%- set widget_disabled_class = widget_disabled_class|default('my disabled widget classes') -%} + {%- set widget_errors_class = widget_errors_class|default('my widget with error classes') -%} + {{- parent() -}} + {%- endblock widget_attributes -%} + + {%- block form_label -%} + {%- set label_class = label_class|default('my label classes') -%} + {{- parent() -}} + {%- endblock form_label -%} + + {%- block form_help -%} + {%- set help_class = help_class|default('my label classes') -%} + {{- parent() -}} + {%- endblock form_help -%} + + {%- block form_errors -%} + {%- set error_item_class = error_item_class|default('my error item classes') -%} + {{- parent() -}} + {%- endblock form_errors -%} + +.. _`Tailwind CSS`: https://tailwindcss.com +.. _`form plugin`: https://github.com/tailwindlabs/tailwindcss-forms diff --git a/forms.rst b/forms.rst index b3dd9e207a0..80e98ecb768 100644 --- a/forms.rst +++ b/forms.rst @@ -1029,6 +1029,7 @@ Form Themes and Customization: /form/bootstrap4 /form/bootstrap5 + /form/tailwindcss /form/form_customization /form/form_themes