Estoy tratando de usar Tailwind CSS para alinear un texto dentro del borde de otro elemento, de modo que el borde alrededor de mi elemento dibuje un perímetro alrededor del elemento y tenga una ruptura con el texto en la parte superior central del borde.
Esto se está haciendo dentro de un componente React.
Soy muy nuevo en Tailwind CSS. Tan nuevo, de hecho, que mi objetivo deseado proviene de la siguiente Pregunta de StackOverflow , pero las soluciones proporcionadas allí no parecen funcionar.
He probado lo siguiente:
mt-5 o pd-5 a la clase para los elementos h2 y span para mi etiqueta, en un esfuerzo por agregar un margen para mover la etiqueta hacia abajo en el borde, pero esto no parece funcionar.h2 que contiene el elemento span en un div y aplicando mt-5 o pd-5 a eso, pero eso tampoco funcionó.Mi código:
export default function Skills() { return ( <section id="skills"> <div className="container px-5 py-10 mx-auto"> <div className="pt-3"> <h2 className="w-full text-center leading-border-text mt-5"> <span className="text-sm font-medium">My desired label</span> </h2> <div className="flex flex-wrap px-5 pb-5 pt-4 border-b border-t border-r border-l border-gray-600 rounded-md"> Some content here. </div> </div> </div> </section> ); } La clase TailwindCSS leading-border-text inicial es una que he definido en mi tailwind.config.js para simplemente agregar una altura de línea personalizada de 0.1.
module.exports = { content: [ "./src/**/*.{js,jsx,ts,tsx}", ], theme: { extend: { lineHeight: { 'border-text': '0.1' } }, }, plugins: [], }Esto es lo que mi código representa actualmente:
Y me gustaría que ese texto, My desired label esté en línea con el borde justo debajo.
¿Qué estoy haciendo mal?
absolute colocaría la etiqueta en un elemento padre relative así:
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/2.2.19/tailwind.min.css" integrity="sha512-wnea99uKIC3TJF7v4eKk4Y+lMz2Mklv18+r4na2Gn1abDRPPOeef95xTzdwGD9e6zXJBteMIhZ1+68QC5byJZw==" crossorigin="anonymous" referrerpolicy="no-referrer" /> <div class="bg-gray-700 min-h-screen text-gray-400"> <!-- Skills() --> <div class="container mx-auto px-5 py-10"> <div class="relative rounded-md border border-gray-600"> <p class="p-3">Some content here.</p> <h2 class="absolute flex top-0 left-1/2 transform -translate-x-1/2 -translate-y-1/2"> <span class="bg-gray-700 px-2 text-sm font-medium">My desired label</span> </h2> </div> </div> <!-- Skills() --> </div>De esta forma, la etiqueta siempre estará centrada en la línea superior del elemento principal relativo, incluso si cambia su tamaño.
Después de pensar un poco más, se me ocurrió una solución a mi propia pregunta.
Por alguna razón que no me queda clara de inmediato, agregar mt-5 no movió la etiqueta hacia abajo, pero agregar una clase de margen inferior negativo, en mi caso -mb-2 , sí lo hizo. Me encantaría si alguien pudiera explicar por qué esto es así.
Mi código de solución:
export default function Skills() { return ( <section id="skills"> <div className="container px-5 py-10 mx-auto"> <div className="pt-3"> <h2 className="w-full text-center leading-border-text -mb-2 pr-2 pl-2"> <span className="bg-gray-900 text-sm font-medium">My desired label</span> </h2> <div className="flex flex-wrap px-5 pb-5 pt-4 border-b border-t border-r border-l border-gray-600 rounded-md"> Some content here. </div> </div> </div> </section> ); }Lo que representa mi código de solución: