<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="373239" data-post-id="373239">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Eiji" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Eiji/120/36743_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Eiji
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="garrison" data-post="9" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>I think you have misunderstood my comment. The “utility class” approach is the approach taken by Tailwind. I am calling <em>Tailwind</em> <a href="https://en.wikipedia.org/wiki/Degeneracy_(mathematics)" rel="noopener nofollow ugc">degenerate</a> because it will never be as expressive as the CSS it generates.</p>
</blockquote>
</aside>
<p>Yeah, agree - I have edited my post - sorry.</p>
<aside class="quote no-group" data-username="garrison" data-post="9" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>dark:sm:hover:bg-gray-100</p>
</blockquote>
</aside>
<p>That’s <code>25</code> characters and all of them for just a single background style. What’s the worst is the fact that’s not even the longest one possible. Besides that you need <code>color</code>, many layout classes and other - all of those in various versions and so on …</p>
<p>You either split <code>class</code> attribute into multiple lines making it longer than the whole element without it which is just insane - or you keep it in a single line and scrolling every element just to find the right class. There is no way that it would be any close to clean solution. We don’t need any other arguments besides this one.</p>
<p><code>Tailwind</code> may seem nice at start, but the more complex your template is the worse it looks like.</p>
<aside class="quote no-group" data-username="garrison" data-post="9" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>By recognizing the factors behind Tailwind’s success we can construct a better alternative.</p>
</blockquote>
</aside>
<p>What’s success? It was forced and many posts were created to ask how to get rid of it completely, how to install some CSS framework and so on … The way it was forced is terrible to maintain and customise if you don’t want to use <code>Tailwind</code>. I can’t call it a success at least in <code>Elixir</code> ecosystem.</p>
<aside class="quote no-group" data-username="garrison" data-post="9" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>Because I have noticed in general (and this is not aimed specifically at you) that there is a whole lot of Chesterton’s Fence thinking going on in Tailwind conversations, where people complain about the downsides (which are considerable) while ignoring the reasons people <em>do</em> use Tailwind.</p>
</blockquote>
</aside>
<p>Unfortunately I found such way of thinking giving terrible results in practice. You can’t just ignore downsides, because we didn’t talk about reasons … When introducing something new we shouldn’t add more problems than we already had.</p>
<p>For mentioning what was forced in past regardless of downsides for some idea your post may be flagged, so I can’t provide an example, but I guess millions of people know at least few “mainstream” things, right? For me the not readable code is not a fence, but a wall that should never be reached at first.</p>
<p><code>Elixir</code> allows developers to focus on business code and by introducing <code>Tailwind</code> we unfortunately went in the opposite way as we either focus on removing it or designing everything from start. If you write all <code>CSS</code> or <code>SASS</code> code by your own then you don’t have to worry about stripping unused classes. This only applies to <code>frameworks</code> that introduces additional classes, but it does not apply to <code>frameworks</code> that only introduce custom <code>mixins</code> and use related <code>SCSS</code> features.</p>
<p>It does not matter what <code>Tailwind</code> provides - if using it makes my code less readable then I can’t even consider it. <code>SASS</code> extends vanilla <code>CSS</code> and I believe that all libraries should be based on it. There should not be any <code>CSS</code> library since as you said there is no sense to adding unused classes. There are just much better tools that does similar thing just a little bit different and I really can’t wait to see a support for it in <code>Phoenix</code>.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="373239" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/do-you-prefer-to-use-tailwind-in-your-phoenix-projects-poll/72408/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-373239" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="373239"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="373242" data-post-id="373242">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="Eiji" data-post="12" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>Unfortunately I found such way of thinking giving terrible results in practice. You can’t just ignore downsides, because we didn’t talk about reasons</p>
</blockquote>
</aside>
<p>But I am not ignoring downsides. I listed the downsides in my post! I agree they are very bad.</p>
<p>But <em>you</em> cannot just ignore upsides, either!</p>
<aside class="quote no-group" data-username="Eiji" data-post="12" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>What’s success? It was forced and many posts were created to ask how to get rid of it completely</p>
</blockquote>
</aside>
<p>I think you are seriously underestimating how popular Tailwind is. It’s been “the new Bootstrap” for like half a decade now. It’s the default for a huge number of frontend devs.</p>
<p>This community is a bubble with a strong bias against mainstream frontend frameworks. Which is understandable (that’s literally why I’m here too lol) but you have to recognize the good and incorporate that.</p>
<aside class="quote no-group" data-username="Eiji" data-post="12" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>The way it was forced is terrible to maintain and customise if you don’t want to use <code>Tailwind</code>. I can’t call it a success at least in <code>Elixir</code> ecosystem.</p>
</blockquote>
</aside>
<p>I have called the introduction of Tailwind a mistake in the past and I stand by that. If it was up to me it would be removed from Phoenix tomorrow and replaced with scoped CSS.</p>
<p>But <em>it is not up to me</em> and I would rather spend my time on the positives (advocating for alternative solutions) rather than the negatives.</p>
<p>I agreed with much of your original post. Especially this:</p>
<aside class="quote no-group" data-username="Eiji" data-post="3" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>Please pay attention how <code>SCSS</code> extends <code>CSS</code> and how <code>Tailwind</code> limits <code>CSS</code>.</p>
</blockquote>
</aside>
<p>You have perfectly described the problem, but failed to provide an adequate solution. The positives of Tailwind, for most people, outweighed the negatives of The Old Ways (like Sass). That’s why it’s so successful.</p>
<p>The path forward is to design a solution that incorporates the learnings of Tailwind. Particularly: the component-first workflow and the friendly design system (and colors!).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="373242" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/do-you-prefer-to-use-tailwind-in-your-phoenix-projects-poll/72408/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-373242" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="373242"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="373244" data-post-id="373244">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="garrison" data-post="11" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>Oh I was 100% trolling, rewriting it in Rust was probably perfectly legitimate. Shipping a full NodeJS binary is more insane tbh.</p>
</blockquote>
</aside>
<p>True, but I was not trolling at all. And your trolling had a solidly big grain of truth to it.</p>
<aside class="quote no-group" data-username="garrison" data-post="11" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>Actually all that is needed is to write normal CSS and then scope it. The components come out <a href="https://git.sr.ht/~garrisonc/corp_design/tree/master/item/lib/corp_design_web/components/core_components.ex" rel="noopener nofollow ugc">looking like this</a>. I’m biased but I think it looks just fine!</p>
</blockquote>
</aside>
<p>I am not denying it but you should not underestimate the huge lengths people like me go to to <em>avoid</em> learning CSS proper. Of course, as I am writing this, I finally started realizing that I would probably expend much less energy and time by actually learning it proper and doing away with most of the middlemen by using stuff like PostCSS / SCSS / SASS et. al.</p>
<p>That is only the smaller side of the coin though, you inevitably go to work somewhere and you have to learn their own opinionated way of doing things.</p>
<p>With time I burned out. I hate the frontend in general, I just never in my life and career (and I do computers for ~33 years now, since a pre-teen) found solving the problems in the frontend interesting or even mildly engaging; they were always met with impatience, rolling my eyes and the very unproductive “let’s just get this over with and move on to the more interesting things” which of course <em>never</em> ended well.</p>
<p>/rant.</p>
<p>My comment comes from that place. I am a backender at heart and will die a backender at heart. I am just wondering, can it be that, just at least once in this super deficient IT area we have, somebody else figures stuff out and makes it good and universally easy to use?</p>
<p>Of course not. <img src="https://forum.elixirforum.com/images/emoji/apple/enraged_face.png?v=15" title=":enraged_face:" class="emoji" alt=":enraged_face:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group" data-username="Eiji" data-post="12" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>It was forced and many posts were created to ask how to get rid of it completely, how to install some CSS framework and so on</p>
</blockquote>
</aside>
<p>You’re getting a touch extremist here. The Phoenix team’s core competences by definition cannot include the best ways of doing CSS in a web app['s framework] because nobody can agree on that one best thing out there.</p>
<p>They also want a nice out-of-the-box experience. A lot of people would bail out of Phoenix’s tutorial if it does not come with nice default styles. A lot of people would appreciate naked CSS and super minimal CSS – I think Phoenix used <code>milligram.css</code> at one point? – but most people will go to the website after a HN / Reddit post with zero context and zero care about Elixir itself.</p>
<p>This is a hugely important context. Marketing matters. First impression matters <em>a lot</em>.</p>
<p>I agree with your broader point though: anything that is supposed to make CSS easy is, you know, supposed to actually make it easy, not completely replace one set of problems with another set of problems. Here you’re actually spot on but as I am unlikely to ever become a truly good frontender, I am left to rely on a bunch of 20-25 year olds working in influential FAANG-like companies and those kids are somehow left unchecked to steer hugely important architectural decisions on the frontend. <img src="https://forum.elixirforum.com/images/emoji/apple/person_facepalming.png?v=15" title=":person_facepalming:" class="emoji" alt=":person_facepalming:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="373244" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/do-you-prefer-to-use-tailwind-in-your-phoenix-projects-poll/72408/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-373244" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="373244"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="373248" data-post-id="373248">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="dimitarvp" data-post="14" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>I am not denying it but you should not underestimate the huge lengths people like me go to to <em>avoid</em> learning CSS proper. Of course, as I am writing this, I finally started realizing that I would probably expend much less energy and time by actually learning it proper</p>
</blockquote>
</aside>
<p>Yes, you would.</p>
<p>Tailwind is essentially a mediocre DSL of CSS. The classes mostly map very closely to CSS, and you will not understand them unless you also understand CSS.</p>
<p>This also goes both ways. I have seen people criticize Tailwind by saying it’s “another thing to learn”, which is patently absurd. If you know CSS the meaning of nearly all of the classes is <em>extremely</em> obvious.</p>
<p>In general Tailwind does a great job with naming actually. It’s just a matter of “didn’t stop to think about whether they <em>should</em>”.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="373248" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/do-you-prefer-to-use-tailwind-in-your-phoenix-projects-poll/72408/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-373248" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="373248"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="373250" data-post-id="373250">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="garrison" data-post="15" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>Yes, you would.</p>
</blockquote>
</aside>
<p>Sure but all of us are instances of a hugely complex struct with different values. Different spawn stats in gaming lingo, if you will. I have tried being a frontender multiples times in my life and came away disgusted every time. It’s just not for me.</p>
<p>Mind you I’ll still force myself through it, if not for anything else but to make my own thing <em>AtOnePoint™</em>. But that will be at my own pace and not forced by work.</p>
<aside class="quote no-group" data-username="garrison" data-post="15" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>Tailwind is essentially a mediocre DSL of CSS. The classes mostly map very closely to CSS, and you will not understand them unless you also understand CSS.</p>
</blockquote>
</aside>
<p>I mostly understand CSS. I don’t understand it deeply though, and this is where the problems started for me and for many other backenders who were dragged kicking and screaming into the <em>“we can’t afford to hire a frontender specifically, you can help us with this, right? it’s not so difficult, right?”</em> thing.</p>
<p>But nowadays, yeah. If you want something done right, you have to do it yourself. It’s not the time yet for me, too much other stuff going on and it’s too chaotic still, but when I get to it I’ll learn it and write it down.</p>
<p>I am likely just dreaming though. I am sure thousands of devs like myself thought they can make a heroic effort once and not work on this again… and failed. But we’ll see. Any recommendations in the meantime are welcome. (I’ve read every reply and made some notes.)</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="373250" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/do-you-prefer-to-use-tailwind-in-your-phoenix-projects-poll/72408/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-373250" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="373250"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="373264" data-post-id="373264">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Eiji" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Eiji/120/36743_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Eiji
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="dimitarvp" data-post="14" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>You’re getting a touch extremist here.</p>
</blockquote>
</aside>
<p>I don’t agree, extreme things or being on one of two edges is exactly what <code>Phoenix</code> is doing. For sure I don’t care what’s used by default, but <code>Tailwind</code> cannot be just removed by using some option. You have to edit all current and newly generated templates and edit them by hand. That’s pretty edgy if you ask me.</p>
<aside class="quote no-group" data-username="dimitarvp" data-post="14" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>They also want a nice out-of-the-box experience. A lot of people would bail out of Phoenix’s tutorial if it does not come with nice default styles.</p>
</blockquote>
</aside>
<p>This has nothing to do with forcing anything. You can make things easily to configure and maintain or hardcode them. I would always call hardcoding a wrong and edgy no matter what awesome stuff it gives.</p>
<aside class="quote no-group" data-username="dimitarvp" data-post="14" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/48/38664_2.png" class="avatar"> dimitarvp:</div>
<blockquote>
<p>This is a hugely important context. Marketing matters. First impression matters <em>a lot</em>.</p>
</blockquote>
</aside>
<p>Unfortunately I can’t agree with it for a few reasons … First of all <code>Tailwind</code> is just a <strong>tool</strong> - it does not give first impression in look and feel. <code>CSS</code> frameworks like <code>Bootstrap</code> do, but not tools … Also one more point … marketing today? Really? See mainstream, see all scam and tell me that you need to have amazing product to do a good marketing result … That’s todays sad reality. Otherwise if <code>Tailwind</code> would give out-of-box styles like <code>Bootstrap</code> then I would <strong>almost</strong> fully agree or like fully agree with my own preferences being still different.</p>
<p>One point here is that I still respect some frameworks that deliver first page as simple as possible and focus rather on how to integrate out-of-box styles in guides rather than come with something fancy that some % of people would remove anyway. Each tool should focus on it’s own thing and I believe that all fancy stuff should be reserved for <code>Phoenix</code> main page rather than the generated pages.</p>
<p>Personally if I would have developed generators I would focus on harder things like a correct <code>HTML5</code> markup with a full <code>ARIA</code> support as it’s much bigger problem for many devs than integrating said <code>Bootstrap</code> or write custom styles. Correct <code>ARIA</code> would be same for many projects while styling is different in each project. Nobody expects from you to pre-style generated pages to your likes, but everyone want things delivered fast, so they can work on features asap.</p>
<p>To summary … fancy things to official page rather than generated one. Documentation over forcing styles. Ease of configuration and maintenance over hardcoded solutions. I have no negative feelings to any tool - only code readability preferences. Whatever would be hardcoded in every template I would be against of it. Whatever would put dozens if not houndreds of characters into a single <code>class</code>, <code>phx-click</code> or any other attribute I would not like it. I don’t believe it’s extremism way of thinking …</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="373264" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/do-you-prefer-to-use-tailwind-in-your-phoenix-projects-poll/72408/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-373264" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="373264"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="373274" data-post-id="373274">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="hauleth" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/hauleth/120/18942_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  hauleth
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I do not see the value of Tailwind at all. It still requires me to learn CSS, but on top of that I also need to learn their own custom nomenclature full of abbreviations and custom units. If I need to do that, then why not just simply learn CSS and skip all the Tailwind magic?</p>
<p>When I do <code>p-7</code> what is that <code>7</code> mean (or maybe that is <code>-7</code>? Who knows)? How does it relate to something like <code>size-48</code>? If I want to have some colour to stuff I need to use <code>grey-700</code>? How does that relate to <code>grey-300</code> or <code>orange-300</code>? If I do <code>grey-700</code> on <code>purple-300</code> will it have enough contrast or what?</p>
<p><img src="https://starecat.com/content/wp-content/uploads/the-numbers-mason-what-do-they-mean.jpg" alt="The numbers, Mason. What do they mean?" width="690" height="387"></p>
<p>Modern CSS also adds a lot of useful stuff that provides a simple way to avoid most of issues that people had previously.</p>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@layer" rel="noopener nofollow ugc">Cascade layers</a> provide simple way to avoid specificity issues in CSS resets or libraries</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_colors/Relative_colors" rel="noopener nofollow ugc">Relative colours</a> provide a way to modify colours in sensible way</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_nesting/Using_CSS_nesting" rel="noopener nofollow ugc">CSS Nesting</a> provides a way to improve readability and to not repeat yourself over and over again</li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_cascading_variables/Using_CSS_custom_properties" rel="noopener nofollow ugc">Custom properties (aka variables)</a> provide a way to name values</li>
</ul>
<p>There are even more upcoming things like typed <code>attr()</code> CSS function, which will allow me to use just HTML attributes for customisation if needed.</p>
<p>In addition to above - with semantic CSS I can style using ARIA attributes, so it will “force” me to implement proper a11y features from day one, and when I come back to the code, I can read what does the values mean instead of deciphering arcane shortcuts.</p>
<pre data-code-wrap="html"><code class="lang-html">&lt;form&gt;
  &lt;input type="text"&gt;
  &lt;button type="submit"&gt;Action&lt;/button&gt;
&lt;/form&gt;
</code></pre>
<p>Vs</p>
<pre data-code-wrap="html"><code class="lang-html">&lt;div class="container display-flex my-md mx-sm"&gt;
  &lt;form class="form shadow-md my-md mx-sm align-center"&gt;
    &lt;div class="input-wrapper border-radius-sm"&gt;
      &lt;input type="text" class="input text-color-gray placeholder-color-light-gray focus-outline-blue"&gt;
    &lt;/div&gt;
    &lt;div class="button-wrapper border-radius-sm"&gt;
      &lt;button type="submit" class="button bg-color-blue text-color-white focus-light-blue hover-light-blue"&gt;
        Action
      &lt;/button&gt;
    &lt;/div&gt;
  &lt;/form&gt;
&lt;/div&gt;
</code></pre>
<p>Honestly - TailwindCSS, with all tooling that is created around it, seems like designed for AI slop and to move complexity around (and IMHO in the wrong direction).</p>
<p>And now, whenever I start new Phoenix project, it is yet another thing that I need to go through codebase and remove. That is becoming so painful, that I probably will need to sit and just write my own generator, because “default one” became so full of pointless cruft.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="373274" data-batch-url="/posts/batch_likers">
                        6
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/do-you-prefer-to-use-tailwind-in-your-phoenix-projects-poll/72408/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-373274" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="373274"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="373304" data-post-id="373304">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="garrison" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  garrison
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="hauleth" data-post="18" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/hauleth/48/18942_2.png" class="avatar"> hauleth:</div>
<blockquote>
<p>I do not see the value of Tailwind at all.</p>
</blockquote>
</aside>
<p>This is exactly the same attitude I was referring to above. I do not understand this insistence on refusing to study the good parts of a popular solution. You are essentially just telling people “I don’t care about the problems you have” and then are surprised when they ignore you and use <em>the thing that solves the problems they have</em>!</p>
<p>Here are the problems, again:</p>
<ol>
<li>Styles should be co-located with components</li>
<li>Styles should be composable (no name conflicts)</li>
<li>There should be a configurable design system that works out of the box</li>
</ol>
<aside class="quote no-group" data-username="hauleth" data-post="18" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/hauleth/48/18942_2.png" class="avatar"> hauleth:</div>
<blockquote>
<p>Modern CSS also adds a lot of useful stuff that provides a simple way to avoid most of issues that people had previously</p>
</blockquote>
</aside>
<p>Let’s now review how modern CSS solves zero of these problems:</p>
<ol>
<li>There is no way to co-locate styles with components (the <code>style</code> attribute is bad)</li>
<li>Nesting does not solve the naming problem and also <em>still</em> does not compose properly (think about what would happen if you used HEEX slots)</li>
<li>Lol, lmao even. The only genuine improvement here is oklch, and that’s a <em>stretch</em>.</li>
</ol>
<aside class="quote no-group" data-username="hauleth" data-post="18" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/hauleth/48/18942_2.png" class="avatar"> hauleth:</div>
<blockquote>
<p>When I do <code>p-7</code> what is that <code>7</code> mean (or maybe that is <code>-7</code>? Who knows)?</p>
</blockquote>
</aside>
<p>It’s literally just a scale. It’s configurable! What does <code>rem</code> mean? How many physical pixels are in a logical pixel?</p>
<aside class="quote no-group" data-username="hauleth" data-post="18" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/hauleth/48/18942_2.png" class="avatar"> hauleth:</div>
<blockquote>
<p>If I want to have some colour to stuff I need to use <code>grey-700</code>? How does that relate to <code>grey-300</code> or <code>orange-300</code>? If I do <code>grey-700</code> on <code>purple-300</code> will it have enough contrast or what?</p>
</blockquote>
</aside>
<p>They are just color scales, chosen by hand to look decent as it turns out that used to be really hard. Maybe we can finally move on from this nightmare with <code>oklch</code>, though. But this has nothing to do with Tailwind, many do the same thing with variables (I do).</p>
<aside class="quote no-group" data-username="hauleth" data-post="18" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/hauleth/48/18942_2.png" class="avatar"> hauleth:</div>
<blockquote>
<p>Honestly - TailwindCSS, with all tooling that is created around it, seems like designed for AI slop and to move complexity around</p>
</blockquote>
</aside>
<p>This is nonsense, Tailwind became mega-popular well before the LLM apocalypse.</p>
<aside class="quote no-group" data-username="hauleth" data-post="18" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/hauleth/48/18942_2.png" class="avatar"> hauleth:</div>
<blockquote>
<p>And now, whenever I start new Phoenix project, it is yet another thing that I need to go through codebase and remove. That is becoming so painful, that I probably will need to sit and just write my own generator, because “default one” became so full of pointless cruft.</p>
</blockquote>
</aside>
<p>Agreed. But does <code>--no-tailwind</code> not work anymore? I haven’t generated a Phoenix project recently.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="373304" data-batch-url="/posts/batch_likers">
                        6
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/do-you-prefer-to-use-tailwind-in-your-phoenix-projects-poll/72408/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-373304" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="373304"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="373308" data-post-id="373308">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="Eiji" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/Eiji/120/36743_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  Eiji
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="garrison" data-post="19" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>Here are the problems, again:</p>
<ol>
<li>Styles should be co-located with components</li>
<li>Styles should be composable (no name conflicts)</li>
<li>There should be a configurable design system that works out of the box</li>
</ol>
</blockquote>
</aside>
<aside class="quote no-group" data-username="garrison" data-post="19" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>Let’s now review how modern CSS solves zero of these problems:</p>
</blockquote>
</aside>
<p>Let’s review how <code>Tailwind</code> solves all of those problems creating new ones:</p>
<ol>
<li>Overuse of a single attribute makes markup terribly long, hard to read and maintain</li>
<li>We are not allowed to name a <code>button</code> like a <code>button</code>, but there is no problem with <code>Tailwind</code> naming - it’s using class names too! None of them are prefixed or protected in any way!</li>
<li>Tailwind does not have one. It only replaces <code>CSS</code> variables with classes and requires from you to design everything - there is even no real solution here …</li>
</ol>
<aside class="quote no-group" data-username="garrison" data-post="19" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>Lol, lmao even.</p>
</blockquote>
</aside>
<p>and that’s the best summary <img src="https://forum.elixirforum.com/images/emoji/apple/+1.png?v=15" title=":+1:" class="emoji" alt=":+1:" loading="lazy" width="20" height="20"></p>
<aside class="quote no-group" data-username="garrison" data-post="19" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>It’s literally just a scale. It’s configurable! What does <code>rem</code> mean? How many physical pixels are in a logical pixel?</p>
</blockquote>
</aside>
<p>Scale X or scale Y? It’s not a scale at all <img src="https://forum.elixirforum.com/images/emoji/apple/joy.png?v=15" title=":joy:" class="emoji" alt=":joy:" loading="lazy" width="20" height="20"><br>
What does it change that’s configurable? It’s like the one-letter variable i.e. something that’s rather seen as bad practice used by beginner developers.</p>
<aside class="quote no-group" data-username="garrison" data-post="19" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>What does <code>rem</code> mean?</p>
</blockquote>
</aside>
<p>Even if you don’t know it then you know that’s a part of syntax. There is no <code>rem</code> in CSS. There is a <code>1rem</code>, <code>1.5rem</code> and <code>-137rem</code>. Because it’s all about syntax and code highlighting we know that’s a size unit. That’s terribly easy to research. No tell me how would you search for <code>p</code>? Algorithms have often a problem with context, so even if you write <code>Tailwind p</code> then you may not found the expected result in your personalised search …</p>
<aside class="quote no-group" data-username="garrison" data-post="19" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>They are just color scales, chosen by hand to look decent as it turns out that used to be really hard. Maybe we can finally move on from this nightmare with <code>oklch</code>, though. But this has nothing to do with Tailwind, many do the same thing with variables (I do).</p>
</blockquote>
</aside>
<p>Why even mentioning <code>oklch</code>?</p>
<pre data-code-wrap="css"><code class="lang-css">color: hsl(from rgb(255, 0, 0) h s 10%);
</code></pre>
<p>That much more clear piece of code.</p>
<aside class="quote no-group" data-username="garrison" data-post="19" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>This is nonsense, Tailwind became mega-popular well before the LLM apocalypse.</p>
</blockquote>
</aside>
<p>Do you know what you are saying? Do you values everything based only on popularity? That’s really a nonsense. Well … good luck with spying <code>Windows</code> as this is the most “popular” solution. <img src="https://forum.elixirforum.com/images/emoji/apple/man_facepalming.png?v=15" title=":man_facepalming:" class="emoji" alt=":man_facepalming:" loading="lazy" width="20" height="20"></p>
<p>As I already said in various places LLMs are nothing new. The <code>AI</code> rebranding is relatively new, but the original works that were foundations for current so-called “AI” started in <strong>early 1990s</strong>. Of course dates don’t prove anything, but just for the context the initial release of <code>Tailwind CSS</code> is <code>1 Nov 2017</code>. It’s not so old solution. It’s even younger than <code>Elixir</code> (2012).</p>
<aside class="quote no-group" data-username="garrison" data-post="19" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>Agreed. But does <code>--no-tailwind</code> not work anymore? I haven’t generated a Phoenix project recently.</p>
</blockquote>
</aside>
<p>It only removes the <code>mix</code> dependency and it’s configuration. All generated and newly generated templates still have “utility classes” that could conflict with existing styles if not removed carefully.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="373308" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/do-you-prefer-to-use-tailwind-in-your-phoenix-projects-poll/72408/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-373308" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="373308"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="373309" data-post-id="373309">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="sodapopcan" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sodapopcan/120/34668_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  sodapopcan
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>This is now the second thread I’ve come back to that has a whole bunch of responses that more or less that what I would have responded.</p>
<aside class="quote no-group" data-username="Eiji" data-post="8" data-topic="72408">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/eiji/48/36743_2.png" class="avatar"> Eiji:</div>
<blockquote>
<p>That’s also very good argument, but you can do it in <code>CSS</code> or <code>SASS</code> too and for <strong>only this</strong> you don’t need <code>Tailwind</code>.</p>
</blockquote>
</aside>
<p>Yes, and this pertains to sentiments others have said, Tailwind is a <em>constraint based design system</em> (I don’t have a link but easy to look up).  It gives me colour and sizes out of the box.  Now, it has far more than a general constraint-based system has, but I’m happy with what it comes with and while it’s hard to describe, it’s very easy to stick to the chosen units.</p>
<p>…and this is what I mean about not wanting to get too into debate, lol.  I think there is a lot of information out there as to why Tailwind is useful.  For context, I’ve been writing CSS since its inception (I’m kinda old), I’ve never hated CSS (I’ve actually always liked it despite its warts) and the first time I saw Tailwind I thought “Yes, that, I want that!”  Though again, I enjoy writing vanilla CSS too.  It’s sort of a project-dependent thing.</p>
<p>Last thing I will say is that I do find the “This is not what CSS was intended for,” argument a bit disingenuous.  People often complaining about updating older tech and older paradigms and yet CSS—one of the most shaky technologies we’re all forced to use—somehow has sacred origins.  A ton of stuff has changed since 1998.  We didn’t even have components back then.</p>
<p><small>Crap, I used some em dashes… no I did not write this with AI.</small></p>
<p>EDIT: Just to expand on <a class="mention" href="/u/garrison" rel="nofollow">@garrison</a> response, having size names with suffixes like <code>-1</code>, <code>-4</code>, <code>-8</code>, etc is a design system convention that far preceeds Tailwind.  They are relative.  I would also encourage people to read the even the two free chapters or <a href="https://www.refactoringui.com/" rel="noopener nofollow ugc">Refactorying UI</a>.  It’s quite insightful.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="373309" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/do-you-prefer-to-use-tailwind-in-your-phoenix-projects-poll/72408/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-373309" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="373309"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/72408/load_more?page=3">Load more posts (30 remaining)</a>
</div></template></turbo-stream>