N
Nuxt2mo ago
Jack

How to make all inputs full width within a specific form (using ui prop)

I have seen this thread https://discord.com/channels/473401852243869706/1359098834554196070, however I want to only do this for a specific form. I have tried adding
:ui="{
formField: {
slots: {
container: 'flex w-full'
}
}
}"
:ui="{
formField: {
slots: {
container: 'flex w-full'
}
}
}"
to my form, however this has not worked
7 Replies
kapa.ai
kapa.ai2mo ago
Hi @Jack. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave: ---------------------- To make all inputs full width within a specific form using the ui prop, you should target the correct slot and apply the class directly to the input or the relevant slot. According to the Nuxt UI documentation, the ui prop can be used to override slot classes for a component instance, and this takes priority over global configuration and variants resolution. For the UFormField component, the slot that wraps the input is called container. To make the input itself full width, you should also ensure the input component receives the appropriate class (e.g., w-full). However, the ui prop on UFormField only affects the field itself, not the child input. Here’s how you can do it for a specific form:
<template>
<UForm>
<UFormField
label="Email"
:ui="{ container: 'w-full' }"
>
<UInput class="w-full" placeholder="Enter your email" />
</UFormField>
<UFormField
label="Password"
:ui="{ container: 'w-full' }"
>
<UInput class="w-full" type="password" placeholder="Enter your password" />
</UFormField>
</UForm>
</template>
<template>
<UForm>
<UFormField
label="Email"
:ui="{ container: 'w-full' }"
>
<UInput class="w-full" placeholder="Enter your email" />
</UFormField>
<UFormField
label="Password"
:ui="{ container: 'w-full' }"
>
<UInput class="w-full" type="password" placeholder="Enter your password" />
</UFormField>
</UForm>
</template>
If you want to avoid repeating the :ui and class props for every field, you can use a wrapper component or a loop, but there is no built-in way to apply the ui prop to all children from the parent form component itself. The ui prop must be set on each UFormField instance, and the class="w-full" must be set on each input component inside the field. Key points: - The ui prop on UFormField should be { container: 'w-full' } to make the container full width. - The input itself also needs class="w-full" to stretch to the container’s width. - There is no documented way to apply the ui prop to all fields from the parent form in a single prop; it must be set per field. References: - FormField usage and ui prop - Theme customization and ui prop priority ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ----------------------
kapa.ai
kapa.ai2mo ago
<@139068524105564161> Kapa.ai is still learning and improving, please let me know how I did by reacting below.
WiFi Plug
WiFi Plug2mo ago
personally in my project i made all inputs w-full as i found myself applying that everywhere
Jack
JackOP2mo ago
the more I think about it, it's of a rule than an exception so this probably makes sense for me too
WiFi Plug
WiFi Plug2mo ago
if that's what you want aswell then in app.config.ts i put
export default defineAppConfig({
ui: {
colors: {
primary: "green",
neutral: "slate",
},
input: {
slots: {
root: "w-full",
},
},
},
});
export default defineAppConfig({
ui: {
colors: {
primary: "green",
neutral: "slate",
},
input: {
slots: {
root: "w-full",
},
},
},
});
Jack
JackOP2mo ago
but I want to figure out this solution anywhere as its probably good to know. so there's no way of applying the style to all child elements i'll probably just go with this for the time being, thanks
WiFi Plug
WiFi Plug2mo ago
yeah it's the simplest way makes sense for me otherwise i put the class on each input in that specific form it's only a few classes

Did you find this page helpful?