Tailwind CSS Ring Color
Ring Colors are used to give colors to the outline rings. Tailwind CSS provides a comprehensive range of utilities to manage ring properties seamlessly. This includes utilities to control ring colors, opacity, states, and even customize values to suit your project requirements. With ring color utilities in Tailwind, you can ensure consistent and aesthetic designs while improving accessibility.
Class | Properties | Example |
---|---|---|
ring-inherit | --tw-ring-color: inherit; | <div className="ring-inherit"></div> |
ring-current | --tw-ring-color: currentColor; | <div className="ring-current"></div> |
ring-transparent | --tw-ring-color: transparent; | <div className="ring-transparent"></div> |
ring-black | --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity, 1)); | <div className="ring-black"></div> |
ring-white | --tw-ring-color: rgb(255 255 255 / var(--tw-ring-opacity, 1)); | <div className="ring-white"></div> |
ring-slate-50 | --tw-ring-color: rgb(248 250 252 / var(--tw-ring-opacity, 1)); | <div className="ring-slate-50"></div> |
ring-slate-100 | --tw-ring-color: rgb(241 245 249 / var(--tw-ring-opacity, 1)); | <div className="ring-slate-100"></div> |
ring-slate-200 | --tw-ring-color: rgb(226 232 240 / var(--tw-ring-opacity, 1)); | <div className="ring-slate-200"></div> |
ring-slate-300 | --tw-ring-color: rgb(203 213 225 / var(--tw-ring-opacity, 1)); | <div className="ring-slate-300"></div> |
ring-slate-400 | --tw-ring-color: rgb(148 163 184 / var(--tw-ring-opacity, 1)); | <div className="ring-slate-400"></div> |
ring-slate-500 | --tw-ring-color: rgb(100 116 139 / var(--tw-ring-opacity, 1)); | <div className="ring-slate-500"></div> |
ring-slate-600 | --tw-ring-color: rgb(71 85 105 / var(--tw-ring-opacity, 1)); | <div className="ring-slate-600"></div> |
ring-slate-700 | --tw-ring-color: rgb(51 65 85 / var(--tw-ring-opacity, 1)); | <div className="ring-slate-700"></div> |
ring-slate-800 | --tw-ring-color: rgb(30 41 59 / var(--tw-ring-opacity, 1)); | <div className="ring-slate-800"></div> |
ring-slate-900 | --tw-ring-color: rgb(15 23 42 / var(--tw-ring-opacity, 1)); | <div className="ring-slate-900"></div> |
ring-slate-950 | --tw-ring-color: rgb(2 6 23 / var(--tw-ring-opacity, 1)); | <div className="ring-slate-950"></div> |
ring-gray-50 | --tw-ring-color: rgb(249 250 251 / var(--tw-ring-opacity, 1)); | <div className="ring-gray-50"></div> |
ring-gray-100 | --tw-ring-color: rgb(243 244 246 / var(--tw-ring-opacity, 1)); | <div className="ring-gray-100"></div> |
ring-gray-200 | --tw-ring-color: rgb(229 231 235 / var(--tw-ring-opacity, 1)); | <div className="ring-gray-200"></div> |
ring-gray-300 | --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity, 1)); | <div className="ring-gray-300"></div> |
ring-gray-400 | --tw-ring-color: rgb(156 163 175 / var(--tw-ring-opacity, 1)); | <div className="ring-gray-400"></div> |
ring-gray-500 | --tw-ring-color: rgb(107 114 128 / var(--tw-ring-opacity, 1)); | <div className="ring-gray-500"></div> |
ring-gray-600 | --tw-ring-color: rgb(75 85 99 / var(--tw-ring-opacity, 1)); | <div className="ring-gray-600"></div> |
ring-gray-700 | --tw-ring-color: rgb(55 65 81 / var(--tw-ring-opacity, 1)); | <div className="ring-gray-700"></div> |
ring-gray-800 | --tw-ring-color: rgb(31 41 55 / var(--tw-ring-opacity, 1)); | <div className="ring-gray-800"></div> |
ring-gray-900 | --tw-ring-color: rgb(17 24 39 / var(--tw-ring-opacity, 1)); | <div className="ring-gray-900"></div> |
ring-gray-950 | --tw-ring-color: rgb(3 7 18 / var(--tw-ring-opacity, 1)); | <div className="ring-gray-950"></div> |
ring-zinc-50 | --tw-ring-color: rgb(250 250 250 / var(--tw-ring-opacity, 1)); | <div className="ring-zinc-50"></div> |
ring-zinc-100 | --tw-ring-color: rgb(244 244 245 / var(--tw-ring-opacity, 1)); | <div className="ring-zinc-100"></div> |
ring-zinc-200 | --tw-ring-color: rgb(228 228 231 / var(--tw-ring-opacity, 1)); | <div className="ring-zinc-200"></div> |
ring-zinc-300 | --tw-ring-color: rgb(212 212 216 / var(--tw-ring-opacity, 1)); | <div className="ring-zinc-300"></div> |
ring-zinc-400 | --tw-ring-color: rgb(161 161 170 / var(--tw-ring-opacity, 1)); | <div className="ring-zinc-400"></div> |
ring-zinc-500 | --tw-ring-color: rgb(113 113 122 / var(--tw-ring-opacity, 1)); | <div className="ring-zinc-500"></div> |
ring-zinc-600 | --tw-ring-color: rgb(82 82 91 / var(--tw-ring-opacity, 1)); | <div className="ring-zinc-600"></div> |
ring-zinc-700 | --tw-ring-color: rgb(63 63 70 / var(--tw-ring-opacity, 1)); | <div className="ring-zinc-700"></div> |
ring-zinc-800 | --tw-ring-color: rgb(39 39 42 / var(--tw-ring-opacity, 1)); | <div className="ring-zinc-800"></div> |
ring-zinc-900 | --tw-ring-color: rgb(24 24 27 / var(--tw-ring-opacity, 1)); | <div className="ring-zinc-900"></div> |
ring-zinc-950 | --tw-ring-color: rgb(9 9 11 / var(--tw-ring-opacity, 1)); | <div className="ring-zinc-950"></div> |
ring-neutral-50 | --tw-ring-color: rgb(250 250 250 / var(--tw-ring-opacity, 1)); | <div className="ring-neutral-50"></div> |
ring-neutral-100 | --tw-ring-color: rgb(245 245 245 / var(--tw-ring-opacity, 1)); | <div className="ring-neutral-100"></div> |
ring-neutral-200 | --tw-ring-color: rgb(229 229 229 / var(--tw-ring-opacity, 1)); | <div className="ring-neutral-200"></div> |
ring-neutral-300 | --tw-ring-color: rgb(212 212 212 / var(--tw-ring-opacity, 1)); | <div className="ring-neutral-300"></div> |
ring-neutral-400 | --tw-ring-color: rgb(163 163 163 / var(--tw-ring-opacity, 1)); | <div className="ring-neutral-400"></div> |
ring-neutral-500 | --tw-ring-color: rgb(115 115 115 / var(--tw-ring-opacity, 1)); | <div className="ring-neutral-500"></div> |
ring-neutral-600 | --tw-ring-color: rgb(82 82 82 / var(--tw-ring-opacity, 1)); | <div className="ring-neutral-600"></div> |
ring-neutral-700 | --tw-ring-color: rgb(64 64 64 / var(--tw-ring-opacity, 1)); | <div className="ring-neutral-700"></div> |
ring-neutral-800 | --tw-ring-color: rgb(38 38 38 / var(--tw-ring-opacity, 1)); | <div className="ring-neutral-800"></div> |
ring-neutral-900 | --tw-ring-color: rgb(23 23 23 / var(--tw-ring-opacity, 1)); | <div className="ring-neutral-900"></div> |
ring-neutral-950 | --tw-ring-color: rgb(10 10 10 / var(--tw-ring-opacity, 1)); | <div className="ring-neutral-950"></div> |
ring-stone-50 | --tw-ring-color: rgb(250 250 249 / var(--tw-ring-opacity, 1)); | <div className="ring-stone-50"></div> |
ring-stone-100 | --tw-ring-color: rgb(245 245 244 / var(--tw-ring-opacity, 1)); | <div className="ring-stone-100"></div> |
ring-stone-200 | --tw-ring-color: rgb(231 229 228 / var(--tw-ring-opacity, 1)); | <div className="ring-stone-200"></div> |
ring-stone-300 | --tw-ring-color: rgb(214 211 209 / var(--tw-ring-opacity, 1)); | <div className="ring-stone-300"></div> |
ring-stone-400 | --tw-ring-color: rgb(168 162 158 / var(--tw-ring-opacity, 1)); | <div className="ring-stone-400"></div> |
ring-stone-500 | --tw-ring-color: rgb(120 113 108 / var(--tw-ring-opacity, 1)); | <div className="ring-stone-500"></div> |
ring-stone-600 | --tw-ring-color: rgb(87 83 78 / var(--tw-ring-opacity, 1)); | <div className="ring-stone-600"></div> |
ring-stone-700 | --tw-ring-color: rgb(68 64 60 / var(--tw-ring-opacity, 1)); | <div className="ring-stone-700"></div> |
ring-stone-800 | --tw-ring-color: rgb(41 37 36 / var(--tw-ring-opacity, 1)); | <div className="ring-stone-800"></div> |
ring-stone-900 | --tw-ring-color: rgb(28 25 23 / var(--tw-ring-opacity, 1)); | <div className="ring-stone-900"></div> |
ring-stone-950 | --tw-ring-color: rgb(12 10 9 / var(--tw-ring-opacity, 1)); | <div className="ring-stone-950"></div> |
ring-red-50 | --tw-ring-color: rgb(254 242 242 / var(--tw-ring-opacity, 1)); | <div className="ring-red-50"></div> |
ring-red-100 | --tw-ring-color: rgb(254 226 226 / var(--tw-ring-opacity, 1)); | <div className="ring-red-100"></div> |
ring-red-200 | --tw-ring-color: rgb(254 202 202 / var(--tw-ring-opacity, 1)); | <div className="ring-red-200"></div> |
ring-red-300 | --tw-ring-color: rgb(252 165 165 / var(--tw-ring-opacity, 1)); | <div className="ring-red-300"></div> |
ring-red-400 | --tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1)); | <div className="ring-red-400"></div> |
ring-red-500 | --tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity, 1)); | <div className="ring-red-500"></div> |
ring-red-600 | --tw-ring-color: rgb(220 38 38 / var(--tw-ring-opacity, 1)); | <div className="ring-red-600"></div> |
ring-red-700 | --tw-ring-color: rgb(185 28 28 / var(--tw-ring-opacity, 1)); | <div className="ring-red-700"></div> |
ring-red-800 | --tw-ring-color: rgb(153 27 27 / var(--tw-ring-opacity, 1)); | <div className="ring-red-800"></div> |
ring-red-900 | --tw-ring-color: rgb(127 29 29 / var(--tw-ring-opacity, 1)); | <div className="ring-red-900"></div> |
ring-red-950 | --tw-ring-color: rgb(69 10 10 / var(--tw-ring-opacity, 1)); | <div className="ring-red-950"></div> |
ring-orange-50 | --tw-ring-color: rgb(255 247 237 / var(--tw-ring-opacity, 1)); | <div className="ring-orange-50"></div> |
ring-orange-100 | --tw-ring-color: rgb(255 237 213 / var(--tw-ring-opacity, 1)); | <div className="ring-orange-100"></div> |
ring-orange-200 | --tw-ring-color: rgb(254 215 170 / var(--tw-ring-opacity, 1)); | <div className="ring-orange-200"></div> |
ring-orange-300 | --tw-ring-color: rgb(253 186 116 / var(--tw-ring-opacity, 1)); | <div className="ring-orange-300"></div> |
ring-orange-400 | --tw-ring-color: rgb(251 146 60 / var(--tw-ring-opacity, 1)); | <div className="ring-orange-400"></div> |
ring-orange-500 | --tw-ring-color: rgb(249 115 22 / var(--tw-ring-opacity, 1)); | <div className="ring-orange-500"></div> |
ring-orange-600 | --tw-ring-color: rgb(234 88 12 / var(--tw-ring-opacity, 1)); | <div className="ring-orange-600"></div> |
ring-orange-700 | --tw-ring-color: rgb(194 65 12 / var(--tw-ring-opacity, 1)); | <div className="ring-orange-700"></div> |
ring-orange-800 | --tw-ring-color: rgb(154 52 18 / var(--tw-ring-opacity, 1)); | <div className="ring-orange-800"></div> |
ring-orange-900 | --tw-ring-color: rgb(124 45 18 / var(--tw-ring-opacity, 1)); | <div className="ring-orange-900"></div> |
ring-orange-950 | --tw-ring-color: rgb(67 20 7 / var(--tw-ring-opacity, 1)); | <div className="ring-orange-950"></div> |
ring-amber-50 | --tw-ring-color: rgb(255 251 235 / var(--tw-ring-opacity, 1)); | <div className="ring-amber-50"></div> |
ring-amber-100 | --tw-ring-color: rgb(254 243 199 / var(--tw-ring-opacity, 1)); | <div className="ring-amber-100"></div> |
ring-amber-200 | --tw-ring-color: rgb(253 230 138 / var(--tw-ring-opacity, 1)); | <div className="ring-amber-200"></div> |
ring-amber-300 | --tw-ring-color: rgb(252 211 77 / var(--tw-ring-opacity, 1)); | <div className="ring-amber-300"></div> |
ring-amber-400 | --tw-ring-color: rgb(251 191 36 / var(--tw-ring-opacity, 1)); | <div className="ring-amber-400"></div> |
ring-amber-500 | --tw-ring-color: rgb(245 158 11 / var(--tw-ring-opacity, 1)); | <div className="ring-amber-500"></div> |
ring-amber-600 | --tw-ring-color: rgb(217 119 6 / var(--tw-ring-opacity, 1)); | <div className="ring-amber-600"></div> |
ring-amber-700 | --tw-ring-color: rgb(180 83 9 / var(--tw-ring-opacity, 1)); | <div className="ring-amber-700"></div> |
ring-amber-800 | --tw-ring-color: rgb(146 64 14 / var(--tw-ring-opacity, 1)); | <div className="ring-amber-800"></div> |
ring-amber-900 | --tw-ring-color: rgb(120 53 15 / var(--tw-ring-opacity, 1)); | <div className="ring-amber-900"></div> |
ring-amber-950 | --tw-ring-color: rgb(69 26 3 / var(--tw-ring-opacity, 1)); | <div className="ring-amber-950"></div> |
ring-yellow-50 | --tw-ring-color: rgb(254 252 232 / var(--tw-ring-opacity, 1)); | <div className="ring-yellow-50"></div> |
ring-yellow-100 | --tw-ring-color: rgb(254 249 195 / var(--tw-ring-opacity, 1)); | <div className="ring-yellow-100"></div> |
ring-yellow-200 | --tw-ring-color: rgb(254 240 138 / var(--tw-ring-opacity, 1)); | <div className="ring-yellow-200"></div> |
ring-yellow-300 | --tw-ring-color: rgb(253 224 71 / var(--tw-ring-opacity, 1)); | <div className="ring-yellow-300"></div> |
ring-yellow-400 | --tw-ring-color: rgb(250 204 21 / var(--tw-ring-opacity, 1)); | <div className="ring-yellow-400"></div> |
ring-yellow-500 | --tw-ring-color: rgb(234 179 8 / var(--tw-ring-opacity, 1)); | <div className="ring-yellow-500"></div> |
ring-yellow-600 | --tw-ring-color: rgb(202 138 4 / var(--tw-ring-opacity, 1)); | <div className="ring-yellow-600"></div> |
ring-yellow-700 | --tw-ring-color: rgb(161 98 7 / var(--tw-ring-opacity, 1)); | <div className="ring-yellow-700"></div> |
ring-yellow-800 | --tw-ring-color: rgb(133 77 14 / var(--tw-ring-opacity, 1)); | <div className="ring-yellow-800"></div> |
ring-yellow-900 | --tw-ring-color: rgb(113 63 18 / var(--tw-ring-opacity, 1)); | <div className="ring-yellow-900"></div> |
ring-yellow-950 | --tw-ring-color: rgb(66 32 6 / var(--tw-ring-opacity, 1)); | <div className="ring-yellow-950"></div> |
ring-lime-50 | --tw-ring-color: rgb(247 254 231 / var(--tw-ring-opacity, 1)); | <div className="ring-lime-50"></div> |
ring-lime-100 | --tw-ring-color: rgb(236 252 203 / var(--tw-ring-opacity, 1)); | <div className="ring-lime-100"></div> |
ring-lime-200 | --tw-ring-color: rgb(217 249 157 / var(--tw-ring-opacity, 1)); | <div className="ring-lime-200"></div> |
ring-lime-300 | --tw-ring-color: rgb(190 242 100 / var(--tw-ring-opacity, 1)); | <div className="ring-lime-300"></div> |
ring-lime-400 | --tw-ring-color: rgb(163 230 53 / var(--tw-ring-opacity, 1)); | <div className="ring-lime-400"></div> |
ring-lime-500 | --tw-ring-color: rgb(132 204 22 / var(--tw-ring-opacity, 1)); | <div className="ring-lime-500"></div> |
ring-lime-600 | --tw-ring-color: rgb(101 163 13 / var(--tw-ring-opacity, 1)); | <div className="ring-lime-600"></div> |
ring-lime-700 | --tw-ring-color: rgb(77 124 15 / var(--tw-ring-opacity, 1)); | <div className="ring-lime-700"></div> |
ring-lime-800 | --tw-ring-color: rgb(63 98 18 / var(--tw-ring-opacity, 1)); | <div className="ring-lime-800"></div> |
ring-lime-900 | --tw-ring-color: rgb(54 83 20 / var(--tw-ring-opacity, 1)); | <div className="ring-lime-900"></div> |
ring-lime-950 | --tw-ring-color: rgb(26 46 5 / var(--tw-ring-opacity, 1)); | <div className="ring-lime-950"></div> |
ring-green-50 | --tw-ring-color: rgb(240 253 244 / var(--tw-ring-opacity, 1)); | <div className="ring-green-50"></div> |
ring-green-100 | --tw-ring-color: rgb(220 252 231 / var(--tw-ring-opacity, 1)); | <div className="ring-green-100"></div> |
ring-green-200 | --tw-ring-color: rgb(187 247 208 / var(--tw-ring-opacity, 1)); | <div className="ring-green-200"></div> |
ring-green-300 | --tw-ring-color: rgb(134 239 172 / var(--tw-ring-opacity, 1)); | <div className="ring-green-300"></div> |
ring-green-400 | --tw-ring-color: rgb(74 222 128 / var(--tw-ring-opacity, 1)); | <div className="ring-green-400"></div> |
ring-green-500 | --tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1)); | <div className="ring-green-500"></div> |
ring-green-600 | --tw-ring-color: rgb(22 163 74 / var(--tw-ring-opacity, 1)); | <div className="ring-green-600"></div> |
ring-green-700 | --tw-ring-color: rgb(21 128 61 / var(--tw-ring-opacity, 1)); | <div className="ring-green-700"></div> |
ring-green-800 | --tw-ring-color: rgb(22 101 52 / var(--tw-ring-opacity, 1)); | <div className="ring-green-800"></div> |
ring-green-900 | --tw-ring-color: rgb(20 83 45 / var(--tw-ring-opacity, 1)); | <div className="ring-green-900"></div> |
ring-green-950 | --tw-ring-color: rgb(5 46 22 / var(--tw-ring-opacity, 1)); | <div className="ring-green-950"></div> |
ring-emerald-50 | --tw-ring-color: rgb(236 253 245 / var(--tw-ring-opacity, 1)); | <div className="ring-emerald-50"></div> |
ring-emerald-100 | --tw-ring-color: rgb(209 250 229 / var(--tw-ring-opacity, 1)); | <div className="ring-emerald-100"></div> |
ring-emerald-200 | --tw-ring-color: rgb(167 243 208 / var(--tw-ring-opacity, 1)); | <div className="ring-emerald-200"></div> |
ring-emerald-300 | --tw-ring-color: rgb(110 231 183 / var(--tw-ring-opacity, 1)); | <div className="ring-emerald-300"></div> |
ring-emerald-400 | --tw-ring-color: rgb(52 211 153 / var(--tw-ring-opacity, 1)); | <div className="ring-emerald-400"></div> |
ring-emerald-500 | --tw-ring-color: rgb(16 185 129 / var(--tw-ring-opacity, 1)); | <div className="ring-emerald-500"></div> |
ring-emerald-600 | --tw-ring-color: rgb(5 150 105 / var(--tw-ring-opacity, 1)); | <div className="ring-emerald-600"></div> |
ring-emerald-700 | --tw-ring-color: rgb(4 120 87 / var(--tw-ring-opacity, 1)); | <div className="ring-emerald-700"></div> |
ring-emerald-800 | --tw-ring-color: rgb(6 95 70 / var(--tw-ring-opacity, 1)); | <div className="ring-emerald-800"></div> |
ring-emerald-900 | --tw-ring-color: rgb(6 78 59 / var(--tw-ring-opacity, 1)); | <div className="ring-emerald-900"></div> |
ring-emerald-950 | --tw-ring-color: rgb(2 44 34 / var(--tw-ring-opacity, 1)); | <div className="ring-emerald-950"></div> |
ring-teal-50 | --tw-ring-color: rgb(240 253 250 / var(--tw-ring-opacity, 1)); | <div className="ring-teal-50"></div> |
ring-teal-100 | --tw-ring-color: rgb(204 251 241 / var(--tw-ring-opacity, 1)); | <div className="ring-teal-100"></div> |
ring-teal-200 | --tw-ring-color: rgb(153 246 228 / var(--tw-ring-opacity, 1)); | <div className="ring-teal-200"></div> |
ring-teal-300 | --tw-ring-color: rgb(94 234 212 / var(--tw-ring-opacity, 1)); | <div className="ring-teal-300"></div> |
ring-teal-400 | --tw-ring-color: rgb(45 212 191 / var(--tw-ring-opacity, 1)); | <div className="ring-teal-400"></div> |
ring-teal-500 | --tw-ring-color: rgb(20 184 166 / var(--tw-ring-opacity, 1)); | <div className="ring-teal-500"></div> |
ring-teal-600 | --tw-ring-color: rgb(13 148 136 / var(--tw-ring-opacity, 1)); | <div className="ring-teal-600"></div> |
ring-teal-700 | --tw-ring-color: rgb(15 118 110 / var(--tw-ring-opacity, 1)); | <div className="ring-teal-700"></div> |
ring-teal-800 | --tw-ring-color: rgb(17 94 89 / var(--tw-ring-opacity, 1)); | <div className="ring-teal-800"></div> |
ring-teal-900 | --tw-ring-color: rgb(19 78 74 / var(--tw-ring-opacity, 1)); | <div className="ring-teal-900"></div> |
ring-teal-950 | --tw-ring-color: rgb(4 47 46 / var(--tw-ring-opacity, 1)); | <div className="ring-teal-950"></div> |
ring-cyan-50 | --tw-ring-color: rgb(236 254 255 / var(--tw-ring-opacity, 1)); | <div className="ring-cyan-50"></div> |
ring-cyan-100 | --tw-ring-color: rgb(207 250 254 / var(--tw-ring-opacity, 1)); | <div className="ring-cyan-100"></div> |
ring-cyan-200 | --tw-ring-color: rgb(165 243 252 / var(--tw-ring-opacity, 1)); | <div className="ring-cyan-200"></div> |
ring-cyan-300 | --tw-ring-color: rgb(103 232 249 / var(--tw-ring-opacity, 1)); | <div className="ring-cyan-300"></div> |
ring-cyan-400 | --tw-ring-color: rgb(34 211 238 / var(--tw-ring-opacity, 1)); | <div className="ring-cyan-400"></div> |
ring-cyan-500 | --tw-ring-color: rgb(6 182 212 / var(--tw-ring-opacity, 1)); | <div className="ring-cyan-500"></div> |
ring-cyan-600 | --tw-ring-color: rgb(8 145 178 / var(--tw-ring-opacity, 1)); | <div className="ring-cyan-600"></div> |
ring-cyan-700 | --tw-ring-color: rgb(14 116 144 / var(--tw-ring-opacity, 1)); | <div className="ring-cyan-700"></div> |
ring-cyan-800 | --tw-ring-color: rgb(21 94 117 / var(--tw-ring-opacity, 1)); | <div className="ring-cyan-800"></div> |
ring-cyan-900 | --tw-ring-color: rgb(22 78 99 / var(--tw-ring-opacity, 1)); | <div className="ring-cyan-900"></div> |
ring-cyan-950 | --tw-ring-color: rgb(8 51 68 / var(--tw-ring-opacity, 1)); | <div className="ring-cyan-950"></div> |
ring-sky-50 | --tw-ring-color: rgb(240 249 255 / var(--tw-ring-opacity, 1)); | <div className="ring-sky-50"></div> |
ring-sky-100 | --tw-ring-color: rgb(224 242 254 / var(--tw-ring-opacity, 1)); | <div className="ring-sky-100"></div> |
ring-sky-200 | --tw-ring-color: rgb(186 230 253 / var(--tw-ring-opacity, 1)); | <div className="ring-sky-200"></div> |
ring-sky-300 | --tw-ring-color: rgb(125 211 252 / var(--tw-ring-opacity, 1)); | <div className="ring-sky-300"></div> |
ring-sky-400 | --tw-ring-color: rgb(56 189 248 / var(--tw-ring-opacity, 1)); | <div className="ring-sky-400"></div> |
ring-sky-500 | --tw-ring-color: rgb(14 165 233 / var(--tw-ring-opacity, 1)); | <div className="ring-sky-500"></div> |
ring-sky-600 | --tw-ring-color: rgb(2 132 199 / var(--tw-ring-opacity, 1)); | <div className="ring-sky-600"></div> |
ring-sky-700 | --tw-ring-color: rgb(3 105 161 / var(--tw-ring-opacity, 1)); | <div className="ring-sky-700"></div> |
ring-sky-800 | --tw-ring-color: rgb(7 89 133 / var(--tw-ring-opacity, 1)); | <div className="ring-sky-800"></div> |
ring-sky-900 | --tw-ring-color: rgb(12 74 110 / var(--tw-ring-opacity, 1)); | <div className="ring-sky-900"></div> |
ring-sky-950 | --tw-ring-color: rgb(8 47 73 / var(--tw-ring-opacity, 1)); | <div className="ring-sky-950"></div> |
ring-blue-50 | --tw-ring-color: rgb(239 246 255 / var(--tw-ring-opacity, 1)); | <div className="ring-blue-50"></div> |
ring-blue-100 | --tw-ring-color: rgb(219 234 254 / var(--tw-ring-opacity, 1)); | <div className="ring-blue-100"></div> |
ring-blue-200 | --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1)); | <div className="ring-blue-200"></div> |
ring-blue-300 | --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1)); | <div className="ring-blue-300"></div> |
ring-blue-400 | --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1)); | <div className="ring-blue-400"></div> |
ring-blue-500 | --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1)); | <div className="ring-blue-500"></div> |
ring-blue-600 | --tw-ring-color: rgb(37 99 235 / var(--tw-ring-opacity, 1)); | <div className="ring-blue-600"></div> |
ring-blue-700 | --tw-ring-color: rgb(29 78 216 / var(--tw-ring-opacity, 1)); | <div className="ring-blue-700"></div> |
ring-blue-800 | --tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity, 1)); | <div className="ring-blue-800"></div> |
ring-blue-900 | --tw-ring-color: rgb(30 58 138 / var(--tw-ring-opacity, 1)); | <div className="ring-blue-900"></div> |
ring-blue-950 | --tw-ring-color: rgb(23 37 84 / var(--tw-ring-opacity, 1)); | <div className="ring-blue-950"></div> |
ring-indigo-50 | --tw-ring-color: rgb(238 242 255 / var(--tw-ring-opacity, 1)); | <div className="ring-indigo-50"></div> |
ring-indigo-100 | --tw-ring-color: rgb(224 231 255 / var(--tw-ring-opacity, 1)); | <div className="ring-indigo-100"></div> |
ring-indigo-200 | --tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity, 1)); | <div className="ring-indigo-200"></div> |
ring-indigo-300 | --tw-ring-color: rgb(165 180 252 / var(--tw-ring-opacity, 1)); | <div className="ring-indigo-300"></div> |
ring-indigo-400 | --tw-ring-color: rgb(129 140 248 / var(--tw-ring-opacity, 1)); | <div className="ring-indigo-400"></div> |
ring-indigo-500 | --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity, 1)); | <div className="ring-indigo-500"></div> |
ring-indigo-600 | --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity, 1)); | <div className="ring-indigo-600"></div> |
ring-indigo-700 | --tw-ring-color: rgb(67 56 202 / var(--tw-ring-opacity, 1)); | <div className="ring-indigo-700"></div> |
ring-indigo-800 | --tw-ring-color: rgb(55 48 163 / var(--tw-ring-opacity, 1)); | <div className="ring-indigo-800"></div> |
ring-indigo-900 | --tw-ring-color: rgb(49 46 129 / var(--tw-ring-opacity, 1)); | <div className="ring-indigo-900"></div> |
ring-indigo-950 | --tw-ring-color: rgb(30 27 75 / var(--tw-ring-opacity, 1)); | <div className="ring-indigo-950"></div> |
ring-violet-50 | --tw-ring-color: rgb(245 243 255 / var(--tw-ring-opacity, 1)); | <div className="ring-violet-50"></div> |
ring-violet-100 | --tw-ring-color: rgb(237 233 254 / var(--tw-ring-opacity, 1)); | <div className="ring-violet-100"></div> |
ring-violet-200 | --tw-ring-color: rgb(221 214 254 / var(--tw-ring-opacity, 1)); | <div className="ring-violet-200"></div> |
ring-violet-300 | --tw-ring-color: rgb(196 181 253 / var(--tw-ring-opacity, 1)); | <div className="ring-violet-300"></div> |
ring-violet-400 | --tw-ring-color: rgb(167 139 250 / var(--tw-ring-opacity, 1)); | <div className="ring-violet-400"></div> |
ring-violet-500 | --tw-ring-color: rgb(139 92 246 / var(--tw-ring-opacity, 1)); | <div className="ring-violet-500"></div> |
ring-violet-600 | --tw-ring-color: rgb(124 58 237 / var(--tw-ring-opacity, 1)); | <div className="ring-violet-600"></div> |
ring-violet-700 | --tw-ring-color: rgb(109 40 217 / var(--tw-ring-opacity, 1)); | <div className="ring-violet-700"></div> |
ring-violet-800 | --tw-ring-color: rgb(91 33 182 / var(--tw-ring-opacity, 1)); | <div className="ring-violet-800"></div> |
ring-violet-900 | --tw-ring-color: rgb(76 29 149 / var(--tw-ring-opacity, 1)); | <div className="ring-violet-900"></div> |
ring-violet-950 | --tw-ring-color: rgb(46 16 101 / var(--tw-ring-opacity, 1)); | <div className="ring-violet-950"></div> |
ring-purple-50 | --tw-ring-color: rgb(250 245 255 / var(--tw-ring-opacity, 1)); | <div className="ring-purple-50"></div> |
ring-purple-100 | --tw-ring-color: rgb(243 232 255 / var(--tw-ring-opacity, 1)); | <div className="ring-purple-100"></div> |
ring-purple-200 | --tw-ring-color: rgb(233 213 255 / var(--tw-ring-opacity, 1)); | <div className="ring-purple-200"></div> |
ring-purple-300 | --tw-ring-color: rgb(216 180 254 / var(--tw-ring-opacity, 1)); | <div className="ring-purple-300"></div> |
ring-purple-400 | --tw-ring-color: rgb(192 132 252 / var(--tw-ring-opacity, 1)); | <div className="ring-purple-400"></div> |
ring-purple-500 | --tw-ring-color: rgb(168 85 247 / var(--tw-ring-opacity, 1)); | <div className="ring-purple-500"></div> |
ring-purple-600 | --tw-ring-color: rgb(147 51 234 / var(--tw-ring-opacity, 1)); | <div className="ring-purple-600"></div> |
ring-purple-700 | --tw-ring-color: rgb(126 34 206 / var(--tw-ring-opacity, 1)); | <div className="ring-purple-700"></div> |
ring-purple-800 | --tw-ring-color: rgb(107 33 168 / var(--tw-ring-opacity, 1)); | <div className="ring-purple-800"></div> |
ring-purple-900 | --tw-ring-color: rgb(88 28 135 / var(--tw-ring-opacity, 1)); | <div className="ring-purple-900"></div> |
ring-purple-950 | --tw-ring-color: rgb(59 7 100 / var(--tw-ring-opacity, 1)); | <div className="ring-purple-950"></div> |
ring-fuchsia-50 | --tw-ring-color: rgb(253 244 255 / var(--tw-ring-opacity, 1)); | <div className="ring-fuchsia-50"></div> |
ring-fuchsia-100 | --tw-ring-color: rgb(250 232 255 / var(--tw-ring-opacity, 1)); | <div className="ring-fuchsia-100"></div> |
ring-fuchsia-200 | --tw-ring-color: rgb(245 208 254 / var(--tw-ring-opacity, 1)); | <div className="ring-fuchsia-200"></div> |
ring-fuchsia-300 | --tw-ring-color: rgb(240 171 252 / var(--tw-ring-opacity, 1)); | <div className="ring-fuchsia-300"></div> |
ring-fuchsia-400 | --tw-ring-color: rgb(232 121 249 / var(--tw-ring-opacity, 1)); | <div className="ring-fuchsia-400"></div> |
ring-fuchsia-500 | --tw-ring-color: rgb(217 70 239 / var(--tw-ring-opacity, 1)); | <div className="ring-fuchsia-500"></div> |
ring-fuchsia-600 | --tw-ring-color: rgb(192 38 211 / var(--tw-ring-opacity, 1)); | <div className="ring-fuchsia-600"></div> |
ring-fuchsia-700 | --tw-ring-color: rgb(162 28 175 / var(--tw-ring-opacity, 1)); | <div className="ring-fuchsia-700"></div> |
ring-fuchsia-800 | --tw-ring-color: rgb(134 25 143 / var(--tw-ring-opacity, 1)); | <div className="ring-fuchsia-800"></div> |
ring-fuchsia-900 | --tw-ring-color: rgb(112 26 117 / var(--tw-ring-opacity, 1)); | <div className="ring-fuchsia-900"></div> |
ring-fuchsia-950 | --tw-ring-color: rgb(74 4 78 / var(--tw-ring-opacity, 1)); | <div className="ring-fuchsia-950"></div> |
ring-pink-50 | --tw-ring-color: rgb(253 242 248 / var(--tw-ring-opacity, 1)); | <div className="ring-pink-50"></div> |
ring-pink-100 | --tw-ring-color: rgb(252 231 243 / var(--tw-ring-opacity, 1)); | <div className="ring-pink-100"></div> |
ring-pink-200 | --tw-ring-color: rgb(251 207 232 / var(--tw-ring-opacity, 1)); | <div className="ring-pink-200"></div> |
ring-pink-300 | --tw-ring-color: rgb(249 168 212 / var(--tw-ring-opacity, 1)); | <div className="ring-pink-300"></div> |
ring-pink-400 | --tw-ring-color: rgb(244 114 182 / var(--tw-ring-opacity, 1)); | <div className="ring-pink-400"></div> |
ring-pink-500 | --tw-ring-color: rgb(236 72 153 / var(--tw-ring-opacity, 1)); | <div className="ring-pink-500"></div> |
ring-pink-600 | --tw-ring-color: rgb(219 39 119 / var(--tw-ring-opacity, 1)); | <div className="ring-pink-600"></div> |
ring-pink-700 | --tw-ring-color: rgb(190 24 93 / var(--tw-ring-opacity, 1)); | <div className="ring-pink-700"></div> |
ring-pink-800 | --tw-ring-color: rgb(157 23 77 / var(--tw-ring-opacity, 1)); | <div className="ring-pink-800"></div> |
ring-pink-900 | --tw-ring-color: rgb(131 24 67 / var(--tw-ring-opacity, 1)); | <div className="ring-pink-900"></div> |
ring-pink-950 | --tw-ring-color: rgb(80 7 36 / var(--tw-ring-opacity, 1)); | <div className="ring-pink-950"></div> |
ring-rose-50 | --tw-ring-color: rgb(255 241 242 / var(--tw-ring-opacity, 1)); | <div className="ring-rose-50"></div> |
ring-rose-100 | --tw-ring-color: rgb(255 228 230 / var(--tw-ring-opacity, 1)); | <div className="ring-rose-100"></div> |
ring-rose-200 | --tw-ring-color: rgb(254 205 211 / var(--tw-ring-opacity, 1)); | <div className="ring-rose-200"></div> |
ring-rose-300 | --tw-ring-color: rgb(253 164 175 / var(--tw-ring-opacity, 1)); | <div className="ring-rose-300"></div> |
ring-rose-400 | --tw-ring-color: rgb(251 113 133 / var(--tw-ring-opacity, 1)); | <div className="ring-rose-400"></div> |
ring-rose-500 | --tw-ring-color: rgb(244 63 94 / var(--tw-ring-opacity, 1)); | <div className="ring-rose-500"></div> |
ring-rose-600 | --tw-ring-color: rgb(225 29 72 / var(--tw-ring-opacity, 1)); | <div className="ring-rose-600"></div> |
ring-rose-700 | --tw-ring-color: rgb(190 18 60 / var(--tw-ring-opacity, 1)); | <div className="ring-rose-700"></div> |
ring-rose-800 | --tw-ring-color: rgb(159 18 57 / var(--tw-ring-opacity, 1)); | <div className="ring-rose-800"></div> |
ring-rose-900 | --tw-ring-color: rgb(136 19 55 / var(--tw-ring-opacity, 1)); | <div className="ring-rose-900"></div> |
ring-rose-950 | --tw-ring-color: rgb(76 5 25 / var(--tw-ring-opacity, 1)); | <div className="ring-rose-950"></div> |
Overview of Ring Color
Adding the Ring Color
To assign a ring color to your focused element, use the ring-*
utilities classes provided by Tailwind. By default, the ring color inherits from your theme's color palette.
export default function App() { return ( <div className="flex items-center justify-center h-screen w-screen bg-gray-100"> <input type="text" placeholder="Type something here..." className="p-4 border-2 border-gray-300 rounded-lg ring-4 ring-blue-400" // ring-4 => sets ring width // ring-blue-400 => applies a blue ring color /> </div> ); }
The ring-4
sets the width of the ring, and ring-blue-400
applies the blue ring color.
Adjusting the Opacity
Sometimes the rings can appear overly strong. Tailwind allows you to adjust the ring's opacity for a subtler presentation using utilities such as ring-color/value
.
export default function App() { return ( <div className="flex items-center justify-center h-screen w-screen bg-gray-100"> <button className="px-6 py-3 ring ring-green-500/40 bg-white border rounded shadow"> Click Me </button> </div> ); }
focus:ring-green-500
sets the ring color to green.focus:ring-opacity-50
reduces the ring's opacity to 50%, creating a more subdued effect.
States and Responsiveness
Dynamic interaction and responsiveness are the cornerstones of attractive UI designs. Tailwind CSS allows you to apply ring colors conditionally by pairing them with responsive modifiers and state selectors.
Hover and Focus States
You can define different ring colors for states such as hover
and focus
. This method improves user feedback and enhances accessibility.
export default function App() { return ( <div className="flex items-center justify-center h-screen w-screen bg-gray-200"> <img src="https://images.unsplash.com/photo-1511467687858-23d96c32e4ae" alt="Decorative" className="rounded-full hover:ring hover:ring-pink-400 hover:ring-offset-4" /> </div> ); }
hover:ring-pink-400
applies a pink ring when the image is hovered over.hover:ring-offset-4
adds spacing between the image and the ring.
Breakpoint Modifiers
Tailwind provides built-in breakpoints to address different screen sizes. You can define specific ring colors or widths to adapt designs responsively.
export default function App() { return ( <div className="flex items-center justify-center h-screen w-screen bg-gray-50"> <button className="px-8 py-4 text-white bg-blue-600 ring-4 rounded-lg sm:ring-red-400 md:ring-green-400 lg:ring-blue-400"> Responsive Ring Colors </button> </div> ); }
sm:ring-red-400
: Applies red ring color on small devices.md:ring-green-400
: Sets green ring color for medium screens.lg:ring-blue-400
: Activates blue ring color for large layouts.
Custom Ring Color
In most cases, the default color palette in Tailwind is sufficient, but there are times when custom designs require unique shades or unpredictable RGB or HEX values. Tailwind enables customization at multiple levels.
Extending the Theme
You can extend the default theme in Tailwind to add your bespoke ring colors, ensuring complete design control. Add the custom ring colors in your tailwind.config.js
file. Then, use the extended class names in the markup:
import tailwindConfig from "./tailwind.config.js"; tailwind.config = tailwindConfig; export default function App() { return ( <div className="flex items-center justify-center h-screen w-screen bg-gray-900"> <button className="px-6 py-3 text-white bg-gray-800 focus:ring focus:ring-custom-blue focus:ring-opacity-70 rounded"> Custom Blue Ring </button> <button className="ml-4 px-6 py-3 text-white bg-gray-800 focus:ring focus:ring-custom-yellow focus:ring-opacity-70 rounded"> Custom Yellow Ring </button> </div> ); }
Using Arbitrary Values
For occasions where you need unpredictable or context-specific values for ring colors, Tailwind supports arbitrary values. These can include custom HEX codes or RGB values.
export default function App() { return ( <div className="flex items-center justify-center h-screen w-screen bg-gray-100"> <input type="text" placeholder="Type something..." className="p-4 border focus:ring-8 focus:ring-[#bd93f9] focus:ring-opacity-75 rounded-lg" // focus:ring-[#bd93f9] => Uses the arbitrary HEX color for the ring /> </div> ); }
Real World Examples
Product Selection Cards with Ring Color Feedback
This example shows an e-commerce product selection interface where ring colors indicate the selected state of items.
export default function ProductSelector() { const products = [ { id: 1, name: "Wireless Headphones", price: "$199", src: "https://images.unsplash.com/photo-1505740420928-5e560c06d30e", alt: "Premium wireless headphones in black" }, { id: 2, name: "Smart Watch", price: "$299", src: "https://images.unsplash.com/photo-1523275335684-37898b6baf30", alt: "Modern smartwatch with black strap" }, { id: 3, name: "Laptop Stand", price: "$79", src: "https://images.unsplash.com/photo-1527864550417-7fd91fc51a46", alt: "Aluminum laptop stand" }, { id: 4, name: "Mechanical Keyboard", price: "$159", src: "https://images.unsplash.com/photo-1511467687858-23d96c32e4ae", alt: "RGB mechanical keyboard" }, { id: 5, name: "Wireless Mouse", price: "$89", src: "https://images.unsplash.com/photo-1527864550417-7fd91fc51a46", alt: "Ergonomic wireless mouse" }, { id: 6, name: "USB-C Hub", price: "$69", src: "https://images.unsplash.com/photo-1523275335684-37898b6baf30", alt: "Multi-port USB-C hub" } ]; return ( <div className="grid gap-4 p-6"> {products.map((product) => ( <div key={product.id} className="relative p-4 border rounded-lg hover:ring-2 hover:ring-blue-500 focus:ring-4 focus:ring-blue-600 cursor-pointer transition-all" > <img src={product.src} alt={product.alt} className="w-full h-48 object-cover rounded-md" /> <h3 className="mt-2 font-semibold">{product.name}</h3> <p className="text-gray-600">{product.price}</p> </div> ))} </div> ); }
Interactive Team Member Cards
This example demonstrates team member cards with ring color emphasis on hover and focus states.
export default function TeamGrid() { const team = [ { id: 1, name: "Sarah Johnson", role: "CEO", src: "https://images.unsplash.com/photo-1438761681033-6461ffad8d80", alt: "Sarah Johnson profile picture", status: "active" }, { id: 2, name: "Michael Chen", role: "CTO", src: "https://images.unsplash.com/photo-1472099645785-5658abf4ff4e", alt: "Michael Chen profile picture", status: "busy" }, { id: 3, name: "Emma Williams", role: "Design Lead", src: "https://images.unsplash.com/photo-1494790108377-be9c29b29330", alt: "Emma Williams profile picture", status: "away" }, { id: 4, name: "James Wilson", role: "Developer", src: "https://images.unsplash.com/photo-1500648767791-00dcc994a43e", alt: "James Wilson profile picture", status: "active" }, { id: 5, name: "Lisa Anderson", role: "Marketing", src: "https://images.unsplash.com/photo-1534528741775-53994a69daeb", alt: "Lisa Anderson profile picture", status: "busy" }, { id: 6, name: "David Kim", role: "Sales", src: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d", alt: "David Kim profile picture", status: "active" } ]; const statusColors = { active: "ring-green-500", busy: "ring-red-500", away: "ring-yellow-500" }; return ( <div className="grid md:grid-cols-3 gap-6 p-8"> {team.map((member) => ( <div key={member.id} className={`p-6 bg-white rounded-xl shadow-sm hover:shadow-md transition-all group`} > <div className="relative"> <img src={member.src} alt={member.alt} className={`w-32 h-32 rounded-full mx-auto ring-4 ${statusColors[member.status]}`} /> <div className={`absolute bottom-0 right-0 w-4 h-4 rounded-full bg-${member.status === 'active' ? 'green' : member.status === 'busy' ? 'red' : 'yellow'}-500 border-2 border-white`}></div> </div> <div className="text-center mt-4"> <h3 className="font-bold text-lg">{member.name}</h3> <p className="text-gray-600">{member.role}</p> </div> </div> ))} </div> ); }
Feature Toggle Switches
This example shows feature toggles with ring color feedback for accessibility and focus states.
export default function FeatureToggles() { const features = [ { id: 1, name: "Dark Mode", description: "Enable dark theme across the application", enabled: true }, { id: 2, name: "Notifications", description: "Receive important updates and alerts", enabled: false }, { id: 3, name: "Two-Factor Authentication", description: "Add an extra layer of security", enabled: true }, { id: 4, name: "Email Digest", description: "Get weekly summary of activities", enabled: false }, { id: 5, name: "Auto-Save", description: "Automatically save your progress", enabled: true }, { id: 6, name: "Beta Features", description: "Access experimental features", enabled: false } ]; return ( <div className="max-w-2xl mx-auto p-6 space-y-4"> {features.map((feature) => ( <div key={feature.id} className="flex items-center justify-between p-4 bg-white rounded-lg shadow-sm hover:shadow-md transition-all" > <div> <h3 className="font-semibold">{feature.name}</h3> <p className="text-sm text-gray-600">{feature.description}</p> </div> <button className={`w-14 h-8 rounded-full p-1 transition-all focus:outline-none focus:ring-2 focus:ring-offset-2 ${ feature.enabled ? "bg-green-500 focus:ring-green-500" : "bg-gray-300 focus:ring-gray-500" }`} > <div className={`w-6 h-6 rounded-full bg-white shadow-sm transform transition-transform ${ feature.enabled ? "translate-x-6" : "" }`} ></div> </button> </div> ))} </div> ); }
Social Media Profile Links
This example displays social media profile links with ring color interactions.
export default function SocialLinks() { const socialProfiles = [ { id: 1, platform: "Twitter", username: "@yourusername", color: "blue", icon: "https://images.unsplash.com/photo-1611605698335-8b1569810432", alt: "Twitter icon" }, { id: 2, platform: "LinkedIn", username: "yourname", color: "indigo", icon: "https://images.unsplash.com/photo-1611944212129-29977ae1398c", alt: "LinkedIn icon" }, { id: 3, platform: "GitHub", username: "username", color: "gray", icon: "https://images.unsplash.com/photo-1618401471353-b98afee0b2eb", alt: "GitHub icon" }, { id: 4, platform: "Instagram", username: "@username", color: "pink", icon: "https://images.unsplash.com/photo-1611262588024-d12430b98920", alt: "Instagram icon" }, { id: 5, platform: "YouTube", username: "Channel Name", color: "red", icon: "https://images.unsplash.com/photo-1611162616305-c69b3fa7fbe0", alt: "YouTube icon" }, { id: 6, platform: "Discord", username: "username#1234", color: "purple", icon: "https://images.unsplash.com/photo-1614680376593-902f74cf0d41", alt: "Discord icon" } ]; return ( <div className="max-w-md mx-auto p-6 bg-white rounded-xl shadow-lg"> <h2 className="text-2xl font-bold mb-6 text-center">Connect With Me</h2> <div className="space-y-4"> {socialProfiles.map((profile) => ( <a key={profile.id} href="#" className={`block p-4 rounded-lg border border-gray-200 hover:ring-2 hover:ring-${profile.color}-500 focus:ring-4 focus:ring-${profile.color}-500 focus:outline-none transition-all`} > <div className="flex items-center space-x-4"> <img src={profile.icon} alt={profile.alt} className="w-10 h-10 rounded-full" /> <div> <h3 className="font-semibold">{profile.platform}</h3> <p className="text-sm text-gray-600">{profile.username}</p> </div> </div> </a> ))} </div> </div> ); }
File Upload Cards
This example shows file upload cards with ring color feedback for different states.
export default function FileUploader() { const files = [ { id: 1, name: "Project Presentation.pptx", size: "2.4 MB", status: "uploaded", type: "presentation" }, { id: 2, name: "Financial Report Q2.xlsx", size: "1.8 MB", status: "uploading", type: "spreadsheet" }, { id: 3, name: "Team Photo.jpg", size: "3.2 MB", status: "error", type: "image" }, { id: 4, name: "Product Specs.pdf", size: "892 KB", status: "uploaded", type: "document" }, { id: 5, name: "Marketing Video.mp4", size: "18.6 MB", status: "uploading", type: "video" }, { id: 6, name: "Client Contract.docx", size: "456 KB", status: "uploaded", type: "document" } ]; const statusStyles = { uploaded: "ring-green-500 bg-green-50", uploading: "ring-blue-500 bg-blue-50", error: "ring-red-500 bg-red-50" }; return ( <div className="max-w-3xl mx-auto p-6"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4"> {files.map((file) => ( <div key={file.id} className={`p-4 rounded-lg ring-2 ${statusStyles[file.status]} transition-all hover:shadow-md`} > <div className="flex justify-between items-start"> <div> <h3 className="font-semibold truncate">{file.name}</h3> <p className="text-sm text-gray-600">{file.size}</p> </div> <div className="flex items-center space-x-2"> {file.status === "uploading" && ( <div className="w-4 h-4 border-2 border-blue-500 border-t-transparent rounded-full animate-spin"></div> )} {file.status === "uploaded" && ( <svg className="w-5 h-5 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" /> </svg> )} {file.status === "error" && ( <svg className="w-5 h-5 text-red-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"> <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" /> </svg> )} </div> </div> <div className="mt-2"> <div className="w-full bg-gray-200 rounded-full h-2"> <div className={`h-2 rounded-full ${ file.status === "uploaded" ? "bg-green-500 w-full" : file.status === "uploading" ? "bg-blue-500 w-2/3" : "bg-red-500 w-1/3" }`} ></div> </div> </div> </div> ))} </div> </div> ); }
Customization Examples
Gradient Ring Colors for Profile Cards
This example demonstrates how to create a profile card with a customized gradient ring color effect.
// App.js import tailwindConfig from "./tailwind.config.js"; tailwind.config = tailwindConfig; export default function GradientProfileCard() { return ( <div className="flex justify-center items-center min-h-screen bg-gray-100"> <div className="relative p-1 bg-gradient-to-r from-indigo-600 to-cyan-500 rounded-xl"> <div className="bg-white p-6 rounded-lg"> <img src="https://images.unsplash.com/photo-1494790108377-be9c29b29330" alt="Profile" className="w-24 h-24 rounded-full mx-auto ring-4 ring-gradient-primary" /> <h2 className="text-xl font-bold text-center mt-4">Sarah Anderson</h2> <p className="text-gray-600 text-center">Senior Developer</p> </div> </div> </div> ) }
Interactive Button Ring Animation
This example shows how to implement an interactive button with a custom ring color animation.
// App.js import tailwindConfig from "./tailwind.config.js"; tailwind.config = tailwindConfig; export default function AnimatedButton() { return ( <div className="flex justify-center items-center min-h-screen bg-gray-900"> <button className="relative px-8 py-4 bg-gradient-to-r from-blue-600 to-violet-600 text-white rounded-lg transition-all duration-300 ease-in-out hover:ring-4 hover:ring-pulse-blue hover:ring-opacity-50 focus:outline-none focus:ring-4 focus:ring-pulse-violet focus:ring-opacity-75 transform hover:scale-105"> <span className="relative z-10 text-lg font-semibold"> Click to Activate </span> <div className="absolute inset-0 bg-white opacity-0 hover:opacity-20 rounded-lg transition-opacity"></div> </button> </div> ) }
Feature Card with Custom Ring Focus
This example demonstrates a feature card with custom ring colors for different states.
// App.js import tailwindConfig from "./tailwind.config.js"; tailwind.config = tailwindConfig; export default function FeatureCard() { return ( <div className="flex justify-center items-center min-h-screen bg-gray-50"> <div className="max-w-md p-6 bg-white rounded-xl shadow-lg transition-all duration-300 hover:ring-4 hover:ring-feature-hover focus:ring-4 focus:ring-feature-active cursor-pointer"> <div className="flex items-center space-x-4"> <img src="https://images.unsplash.com/photo-1664575602554-2087b04935a5" alt="Feature Icon" className="w-12 h-12 rounded-lg ring-2 ring-feature-default" /> <div> <h3 className="text-xl font-bold text-gray-900">Cloud Storage</h3> <p className="text-gray-500">Secure and scalable storage solution</p> </div> </div> <div className="mt-4 space-y-2"> <div className="flex items-center space-x-2"> <svg className="w-5 h-5 text-sky-500" fill="currentColor" viewBox="0 0 20 20"> <path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd"/> </svg> <span className="text-gray-600">Unlimited storage</span> </div> <div className="flex items-center space-x-2"> <svg className="w-5 h-5 text-sky-500" fill="currentColor" viewBox="0 0 20 20"> <path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd"/> </svg> <span className="text-gray-600">End-to-end encryption</span> </div> </div> </div> </div> ) }
Best Practices
Maintain Design Consistency
When applying ring color utilities across your project, it's crucial to ensure a unified and consistent design. Tailwind CSS provides a meticulously curated color palette that works well for consistent theme integration.
To achieve this, rely on the same range of colors for related components, such as buttons, form fields, and interactive cards. For instance, maintaining the same nuance between focus and active rings keeps the interface aesthetically pleasing.
export default function ConsistentRingDemo() { return ( <div className="min-h-screen bg-gray-100 flex items-center justify-center space-x-4"> <button className="px-6 py-3 bg-indigo-600 text-white rounded-lg focus:ring-4 focus:ring-indigo-400"> Submit </button> <input type="text" placeholder="Your Name" className="px-4 py-2 border rounded-md focus:ring-4 focus:ring-indigo-400" /> </div> ); }
Using the same focus:ring-indigo-400
for the button and input creates harmony. This intentional alignment fosters professionalism and intuitive interaction in navigation systems.
Leverage Utility Combinations
You can combine Tailwind’s utilities to create intricate UI patterns without adding custom styles. Ring colors pair effectively with layout utilities like spacing, positioning, and alignment. Combining ring
, ring-offset
, and transition
classes produces visually engaging components for hover and focus states.
export default function CombinedUtilityDemo() { return ( <div className="min-h-screen bg-white flex items-center justify-center"> <div className="p-4 rounded-lg ring-4 ring-offset-2 ring-yellow-500 bg-gray-100 hover:scale-105 transition-transform"> <img src="https://images.unsplash.com/photo-1488998427799-e3362cec87c3" alt="Example Image" className="rounded-md" /> <p className="text-center mt-2 font-medium">Hover to scale</p> </div> </div> ); }
The harmonious interaction between ring-offset
and scale-105
creates a polished animation effect, improving interactivity with minimal CSS.
Accessibility Considerations
Enhance Readability and Navigability
A well-applied ring color draws attention to key UI components, especially during focus or error states. Utilize bright, contrasting ring colors for interactive elements to provide immediate visual feedback. This improves the overall navigability of the interface for users with reduced vision.
export default function AccessibilityNavigableRingDemo() { return ( <div className="min-h-screen bg-gray-100 flex flex-col items-center justify-center space-y-4"> <a href="#" className="p-4 border rounded-md hover:ring hover:ring-cyan-400 focus:ring-4 focus:ring-cyan-500 focus:outline-none" > Accessible Link </a> <button className="p-4 bg-green-600 text-white rounded-md focus:ring-4 focus:ring-green-300"> Accessible Button </button> </div> ); }
By making each focus state distinguishable, you ensure your application is functional for navigational aids like screen readers and keyboard focus indicators.
Focus on High Contrast
Tailwind’s robust color palette and custom configurations enable you to ensure adequate contrast ratios for accessibility. High contrast between the ring, element, and background enhances visibility for users with low vision or those browsing in brightly lit environments.
export default function HighContrastForm() { return ( <div className="flex justify-center items-center min-h-screen bg-gray-900"> <input type="text" placeholder="Enter your name" className="w-80 px-4 py-2 text-gray-900 border rounded-md ring-4 ring-white ring-opacity-50 focus:ring-indigo-500" /> </div> ); }
The example above demonstrates adequate contrast between the form field, its ring, and the dark background while ensuring compliance with accessibility guidelines. This approach caters to assistive technologies and human users alike, strengthening inclusivity efforts.