diff --git a/assets/sass/components/markup.sass b/assets/sass/components/markup.sass index 81d1fb0e..7ed2dae0 100644 --- a/assets/sass/components/markup.sass +++ b/assets/sass/components/markup.sass @@ -24,7 +24,7 @@ p, li code - @apply inline-block px-2 py-px border border-grey-light font-bold mx-px + @apply inline-block border border-grey-light font-bold mx-px p-1 leading-none pre code, .hljs diff --git a/source/_posts/2019-03-08-restructuring-my-tailwindjs-config-files.md b/source/_posts/2019-03-08-restructuring-my-tailwindjs-config-files.md new file mode 100644 index 00000000..a97cc0c8 --- /dev/null +++ b/source/_posts/2019-03-08-restructuring-my-tailwindjs-config-files.md @@ -0,0 +1,191 @@ +--- +title: Restructuring my tailwind.js configuration files +excerpt: How I’ve started structuring my tailwind.js configuration files in preparation for Tailwind 1.0. +tags: + - laravel-mix + - tailwind-css +--- +After watching Adam Wathan’s recent ["Working on Tailwind 1.0" YouTube video](https://www.youtube.com/watch?v=SkTKN38wSEM) and seeing some of the proposed changes to the `tailwind.js` configuration file, I’ve started to structure my current config files a little differently in preparation for 1.0. + +## The current tailwind.js file format + +Currently when you run `tailwind init` to create a new config file, it includes all of Tailwind’s default values, and then you can add, edit and remove values as needed. + +Some values like colours, font families, plugins and modules you are likely to change for each project, whilst others like shadows, leading, z-index and opacity, you’re less likely to need to change. + +It’s 952 lines including comments, which is quite long and could potentially be daunting for new Tailwind users. + +The contents of the full file can be found in the [Tailwind CSS documentation](https://tailwindcss.com/docs/configuration#default-configuration), or it can be found in [various GitHub repositories](https://github.com/tailwindcss/plugin-examples/blob/master/tailwind.js). + +## A preview of the new tailwind.js file format + +In Adam’s [Laracon Online](https://laracon.net) talk, Tailwind CSS by Example, he showed the new configuration file format. Here is a snippet: + +```js +module.exports { + theme: { + extend: { + spacing: { + 7: '1.75rem', + }, + }, + colors: { + white: { + default: '#fff', + 20: 'rgba(255,255,255,.2)', + 40: 'rgba(255,255,255,.4)', + 60: 'rgba(255,255,255,.6)', + 80: 'rgba(255,255,255,.8)', + }, + ... + } + ... + } +} +``` + +You’ll notice that the structure of the file is quite different, and that all of the default values have been removed and are now maintained by Tailwind itself. + +This means that the configuration file contains only your custom changes, where you've either overridden a default value (e.g. colours) or added your own using `extend` (e.g. adding another spacing value, as in this example). + +I think that's a great improvement and makes the file so much cleaner, and easier to read and understand. + +## An interim approach + +If you don’t want to wait until 1.0, or potentially 0.8, you can get some of this functionality now by restructuring your Tailwind configuration file. + +Here is the complete `tailwind.js` file for the [DrupalCamp Bristol 2019 static landing page](https://dcb-2019-static.netlify.com), which uses Tailwind in addition to the existing traditional CSS: + +```js +let defaultConfig = require('tailwindcss/defaultConfig')() + +var colors = { + ...defaultConfig.colors, + black: '#000', +} + +module.exports = { + ...defaultConfig, + colors: colors, + textColors: colors, + backgroundColors: colors, + borderColors: Object.assign({ default: colors['grey-light'] }, colors), + plugins: [ + require('tailwindcss-interaction-variants')(), + require('tailwindcss-spaced-items'), + ], + modules: { + ...defaultConfig.modules, + textStyle: [...defaultConfig.modules.textStyle, 'hocus'], + }, + options: { + ...defaultConfig.options, + prefix: 'tw-', + important: true, + }, +} +``` + +Here are the steps that I took to create this file: + +
**Get the default configuration**. This is done using `require('tailwindcss/defaultConfig')()`. Essentially this has the same contents as the current `tailwind.js` file, though now it’s owned and maintained within Tailwind itself, and not by the user.
+Also any new or updated values within the default configuration will be automatically available.
+This line is present but commented out in the current generated `tailwind.js` file.
+**Create the colors object.** This will by default override Tailwind’s default colours, however you can add `...defaultConfig.colors` to include them and then add or edit values as needed.
+In this example, I’m overridding the value used for the `black` colour classes to match the existing colour in the other CSS.
+**Return the main configuration object.** For sites with no overrides, this could just be `module.exports = defaultConfig` for a minimal configuration.
+To extend the defaults, add `...defaultConfig` at the beginning.
+**Assign our colours.** Use them for `colors`, `textColors`, `backgroundColors` and `borderColours`.
+**Add any plugins**. I use plugins on most projects, in this case I’m using [tailwindcss-interaction-variants](https://www.npmjs.com/package/tailwindcss-interaction-variants) and [tailwindcss-spaced-items](https://www.npmjs.com/package/tailwindcss-spaced-items). Usually the default `container` plugin would be here too.
+**Add or override modules.** Here I’m adding the `hocus` (hover and focus) variant provided by the interaction variants plugin to the text style classes.
+**Add or override options.** As this markup was originally from a Drupal website, I needed to override some of the options values. I’ve added the `tw-` prefix to avoid Tailwind classes from clashing with Drupal’s default markup, and set all Tailwind classes to use `!important` so that they override any existing styles.
+