#css #reactjs #material-ui #next.js
#css #reactjs #материал-пользовательский интерфейс #next.js
Вопрос:
я работаю над следующим проектом js, где я должен создать форму для регистрации с определенными стилями.
Проблема в том, что я не могу понять, как настроить a textField
с помощью моего собственного css. Я пытался использовать makeStyles
функцию, но проблема в том, что я должен передавать объекты makeStyles
, а некоторые свойства не существуют, например, цвет фона, радиус границы и т. Д…
это css, который я хочу применить:
.Name {
width: 535px;
height: 61px;
flex-grow: 0;
margin: 40px 100px 20px 0;
padding: 19px 329px 20px 20px;
border-radius: 8px;
border: solid 1px var(--select-border);
background-color: #ffffff;
}
я поместил этот css в файл, который я импортирую в свой компонент как styles и вызываю его в className
следующим образом :
<TextField
className={styles.Name}
placeholder='Nom de votre restaurant'
>
и я попробовал использовать makeStyles таким образом :
const useStyles = makeStyles({
nameStyles: {
width:' 535px',
height:' 61px',
flexGrow:'0',
margin:'40px 100px 20px 0',
padding: '19px 329px 20px 20px',
border: '8px',
border: 'solid 1px var(--select-border)',
backgroundColor:' #ffffff',
})
export default function RestaurantRegistration() {
const classes = useStyles()
return (
<React.Fragment>
<TextField
className={classes.nameStyles}
placeholder='Restaurant Name'
>
</TextField>
)
}
Вторым способом мне пришлось изменить свойства, в именах которых есть ‘-‘, потому что я получил синтаксическую ошибку. Например, я изменил flex-grow на flexGrow, background-color на backroundColor. Я даже не знаю, правильно ли это. Кто-нибудь может мне помочь, пожалуйста?
Комментарии:
1. Если вы только что скопировали свой код, это выдаст ошибку, потому что вам не хватает одной закрывающей фигурной скобки для «nameStyles». Насколько я могу судить, ваш синтаксис правильный, и необходим способ присвоения имен этим переменным в формате camelCase, потому что вы пишете в ts, который позже преобразуется в css. Добавление более подробного анализа (журнал консоли и т. Д.) В ваш код, Скорее всего, Даст вам ответ.
2. Кроме того, я только что увидел, что если вы ничего не пишете в своем текстовом поле, это должен быть самозакрывающийся тег со следующим синтаксисом: <TextField className={classes.nameStyles} placeholder=’Название ресторана’ />
3. я перепробовал так много способов, но я не получаю желаемого результата, которого у меня сейчас нет, в чем проблема
Ответ №1:
Чтобы использовать className
successful , вам нужно обернуть свой компонент StylesProvider
с помощью свойства injectFirst
with .
кроме того, если вы проверите API текстового поля, вы можете использовать classes
prop, который является объектом, который может переопределять или расширять его стили. Вы можете использовать имя root
правила для передачи ваших стилей в текстовое поле.
с помощью модулей css и stylesProvider:
<StylesProvider injectFirst>
<TextField
className={styles.Name}
placeholder='Nom de votre restaurant'
>
</StylesProvider>
с помощью makeStyles:
const useStyles = makeStyles({
root: {
width:'535px',
height:'61px',
flexGrow:'0',
margin:'40px 100px 20px 0',
padding: '19px 329px 20px 20px',
border: '8px',
border: 'solid 1px var(--select-border)',
backgroundColor:'#ffffff',
}})
export default function RestaurantRegistration() {
const classes = useStyles()
return (
<TextField
classes={classes}
placeholder='Restaurant Name'
/>
)
}
Комментарии:
1. Ни один из этих двух способов не сработал для меня, плюс со вторым способом у меня нет одного текстового поля, у меня их много, поэтому я должен стилизовать каждое по-разному, чтобы classes={classes} не выполнял эту работу.
2. @Ghost Я создал песочницу с реализацией для обоих случаев
3. на самом деле вы можете использовать
StylesProvider
для ввода сначала своего имени класса, я добавил к ответу4. для makestyle вы можете добавлять имена, отличные от root, чем передавать как
classes={{ root: classes.firstStyle }}
и так далее5. Это намного лучше, но у вас есть идея о том, как удалить строку внутри ввода? это похоже на то, что вы помещаете текстовое поле в поле