Удалить синий контур из поля выбора. - PullRequest
1 голос
/ 21 апреля 2020

Я использую компонент React Material UI Select в своем проекте. Мне удалось получить большинство желаемых пользовательских стилей, но все еще есть синий контур вокруг поля «Выбор», когда выпадающий лист виден, или когда выбран вариант, и вы перемещаете мышь из поля (но это все еще в фокусе). Какой элемент нужно выбрать, чтобы удалить синий контур из поля «Выбрать»? Я пробовал нацеливаться на разные части и использовать outline: none, но, похоже, не могу найти решение. Я также прочитал документы по React Material и искал Stackoverflow, но не могу найти ответ. Любая помощь приветствуется. Вот демонстрация окна выбора:

https://codesandbox.io/s/select-dropdown-hr7yx-hr7yx?file= / src / App. js

import { makeStyles } from "@material-ui/core/styles";
import React from "react";
import "./styles.css";
import FormControl from "@material-ui/core/FormControl";
import Select from "@material-ui/core/Select";
import MenuItem from "@material-ui/core/MenuItem";

const useStyles = makeStyles(theme => ({
  quantityRoot: {
    color: "#FFFFFF",
    backgroundColor: "#303039",
    opacity: 0.6,
    borderRadius: "5px",
    "&:hover": {
      backgroundColor: "#1E1E24",
      borderRadius: "5px",
      opacity: 1
    },
    "&:focus-within": {
      backgroundColor: "#1E1E24",
      borderRadius: "5px",
      opacity: 1
    },
    "& .MuiOutlinedInput-notchedOutline": {
      border: "1px solid #484850"
    },
    "&:hover .MuiOutlinedInput-notchedOutline": {
      border: "1px solid #484850"
    },
    "&.Mui-focused .MuiOutlinedInput-notchedOutline": {
      border: "1px solid #484850",
      borderRadius: "5px 5px 0 0"
    },
    "& .Mui-disabled": {
      color: "#FFFFFF",
      opacity: 0.6
    },
    "& .Mui-disabled .MuiOutlinedInput-notchedOutline": {
      border: "1px solid #484850"
    }
  },
  selectRoot: {
    color: "#FFFFFF"
  },
  icon: {
    color: "#FFFFFF"
  },
  selectPaper: {
    backgroundColor: "#1E1E24",
    border: "1px solid #484850",
    borderRadius: "5px",
    color: "#FFFFFF",
    "& li:hover": {
      backgroundColor: "#303039"
    }
  }
}));

export default function App() {
  const classes = useStyles();

  return (
    <div className="App">
      <FormControl
        variant="outlined"
        classes={{
          root: classes.quantityRoot
        }}
      >
        <Select
          classes={{
            root: classes.selectRoot,
            icon: classes.icon
          }}
          MenuProps={{ classes: { paper: classes.selectPaper } }}
          inputProps={{
            name: "gpuChildQuantity",
            id: "gpuChildQuantity"
          }}
        >
          {[...Array(8)].map((e, i) => {
            return (
              <MenuItem key={i} value={i + 1}>
                {i + 1}
              </MenuItem>
            );
          })}
        </Select>
      </FormControl>
    </div>
  );
}

1 Ответ

1 голос
/ 21 апреля 2020

У вас просто небольшая проблема с переопределением «сфокусированных» стилей.

У вас было:

    "&.Mui-focused .MuiOutlinedInput-notchedOutline": {
      border: "1px solid #484850",
      borderRadius: "5px 5px 0 0"
    },

Но Mui-focused добавляется к потомку FormControl, а не FormControl (где применяется этот класс), поэтому &.Mui-focused никогда ничего не соответствует. Вместо этого вам нужно, чтобы это было похоже на переопределение «отключенных» стилей. Вам нужен пробел после амперсанда, чтобы .Mui-focused предназначался для потомка FormControl:

    "& .Mui-focused .MuiOutlinedInput-notchedOutline": {
      border: "1px solid #484850",
      borderRadius: "5px 5px 0 0"
    },

Edit select-dropdown-hr7yx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...