使用相同的选择器之一但默认内容反应覆盖正确生成的 css class
React overriding correctly generated css class with one of the same selector but default content
我应该提一下,我对反应还很陌生,而且还在摸索着去做。我在这里尝试做的事情可能超出了我的理解范围。
我正在尝试将 react-select 与来自 react-bootstrap 的浮动标签集成。因为 react-select 给了你很多对他们 CSS 的控制权,所以 应该 可以正常工作,而且大部分代码都可以工作。
但是,如果我将鼠标悬停在 select 上,我会看到一个无法摆脱的蓝色边框:
Snip of the select being hovered
FF 开发人员控制台显示实际上有两个 css 语句完全相同 selector:
.css-knmecq-control:hover {
border-color:#2684FF;
}
.css-knmecq-control:hover {
border:none!important;
border-color:red;
}
尽我所能,我无法摆脱(大概是默认的)第一个。具有讽刺意味的是,即使 FF 显示 开发人员控制台中的第二个属性,它真正呈现 的是第一个
developer console screenshot
问题源于另一个项目。我能够通过使用 npx create-react-app
创建一个新项目、安装 react-select、react-bootstrap@2.0.0beta.6 和 bootstrap 并粘贴相关的来重现它段代码放入App.js。此处未明确提及的所有内容均保留生成的默认值。
我的 package.json 中的依赖项部分如下所示:
"dependencies": {
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^11.2.7",
"@testing-library/user-event": "^12.8.3",
"bootstrap": "^5.1.1",
"react": "^17.0.2",
"react-bootstrap": "^2.0.0-beta.6",
"react-dom": "^17.0.2",
"react-scripts": "4.0.3",
"react-select": "^4.3.1",
"web-vitals": "^1.1.2"
},
组件如下所示:
import Select from 'react-select';
import {FloatingLabel} from 'react-bootstrap';
const customStyles = {
control: (styles, state) => {
return {
...styles,
border: state.menuIsOpen? 'none' : state.isDisabled ? 'none': state.isSelected ? 'none' : state.isFocused ? 'none' : 'none',
top: '-10px',
':hover': { border: 'none !important',borderColor: 'red'}
}
}
}
const FloatingLabelSelect = (props) => {
return (
<FloatingLabel label={props.label} className={`${props.className} pb-3 `}>
<Select options={props.options} className={'form-control mb-3'} styles={customStyles}/>
</FloatingLabel>
);
};
export default FloatingLabelSelect;
最后,是我完全不讨人喜欢的 App.js:
import {Container, FloatingLabel, Form} from 'react-bootstrap';
import 'bootstrap/dist/css/bootstrap.css';
import FloatingLabelSelect from './components/FloatingLabelSelect';
function App() {
return (
<Container>
<Form>
<FloatingLabel label={'Other stuff'}>
<Form.Select as={'select'}>
<option disabled selected value>Not selected</option>
<option value="1" data-value="M">Male</option>
<option value="2" data-value="F">Female</option>
<option value="3" data-value="">None</option>
</Form.Select>
</FloatingLabel>
<FloatingLabelSelect label={'Stuff'} options={[{value: 'red', label: 'Red'}, {value: 'blue', label: 'bleu'}]}/>
</Form>
</Container>
);
}
export default App;
注意: 是的,代码片段显示了我日益增长的愤怒并带有大锤的伤痕。请原谅我。我希望您看到它完全处于我所有不成功的修复尝试所留下的状态。
(我会在评论中写这个而不是回复但我没有“声誉”)
是否可以在页面中包含 link?
根据我在所附屏幕截图 (SS) 中看到的内容,可能“蓝色边框”可能不是“css border" 属性 但它是其他一些 CSS 属性的结果,例如 "outline" 或 "box-shadow",这通常是 ":focus" 期间的标准 UX 行为select 框上的事件。
无论哪种方式,根据您的开发工具屏幕截图,select 上的边框看起来 而不是 select 的问题,但我们可以通过查看 select 框的“计算属性”进行三重检查,以确认边框已正确设置为 none.
我应该提一下,我对反应还很陌生,而且还在摸索着去做。我在这里尝试做的事情可能超出了我的理解范围。
我正在尝试将 react-select 与来自 react-bootstrap 的浮动标签集成。因为 react-select 给了你很多对他们 CSS 的控制权,所以 应该 可以正常工作,而且大部分代码都可以工作。
但是,如果我将鼠标悬停在 select 上,我会看到一个无法摆脱的蓝色边框: Snip of the select being hovered
FF 开发人员控制台显示实际上有两个 css 语句完全相同 selector:
.css-knmecq-control:hover {
border-color:#2684FF;
}
.css-knmecq-control:hover {
border:none!important;
border-color:red;
}
尽我所能,我无法摆脱(大概是默认的)第一个。具有讽刺意味的是,即使 FF 显示 开发人员控制台中的第二个属性,它真正呈现 的是第一个
developer console screenshot
问题源于另一个项目。我能够通过使用 npx create-react-app
创建一个新项目、安装 react-select、react-bootstrap@2.0.0beta.6 和 bootstrap 并粘贴相关的来重现它段代码放入App.js。此处未明确提及的所有内容均保留生成的默认值。
我的 package.json 中的依赖项部分如下所示:
"dependencies": {
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^11.2.7",
"@testing-library/user-event": "^12.8.3",
"bootstrap": "^5.1.1",
"react": "^17.0.2",
"react-bootstrap": "^2.0.0-beta.6",
"react-dom": "^17.0.2",
"react-scripts": "4.0.3",
"react-select": "^4.3.1",
"web-vitals": "^1.1.2"
},
组件如下所示:
import Select from 'react-select';
import {FloatingLabel} from 'react-bootstrap';
const customStyles = {
control: (styles, state) => {
return {
...styles,
border: state.menuIsOpen? 'none' : state.isDisabled ? 'none': state.isSelected ? 'none' : state.isFocused ? 'none' : 'none',
top: '-10px',
':hover': { border: 'none !important',borderColor: 'red'}
}
}
}
const FloatingLabelSelect = (props) => {
return (
<FloatingLabel label={props.label} className={`${props.className} pb-3 `}>
<Select options={props.options} className={'form-control mb-3'} styles={customStyles}/>
</FloatingLabel>
);
};
export default FloatingLabelSelect;
最后,是我完全不讨人喜欢的 App.js:
import {Container, FloatingLabel, Form} from 'react-bootstrap';
import 'bootstrap/dist/css/bootstrap.css';
import FloatingLabelSelect from './components/FloatingLabelSelect';
function App() {
return (
<Container>
<Form>
<FloatingLabel label={'Other stuff'}>
<Form.Select as={'select'}>
<option disabled selected value>Not selected</option>
<option value="1" data-value="M">Male</option>
<option value="2" data-value="F">Female</option>
<option value="3" data-value="">None</option>
</Form.Select>
</FloatingLabel>
<FloatingLabelSelect label={'Stuff'} options={[{value: 'red', label: 'Red'}, {value: 'blue', label: 'bleu'}]}/>
</Form>
</Container>
);
}
export default App;
注意: 是的,代码片段显示了我日益增长的愤怒并带有大锤的伤痕。请原谅我。我希望您看到它完全处于我所有不成功的修复尝试所留下的状态。
(我会在评论中写这个而不是回复但我没有“声誉”)
是否可以在页面中包含 link?
根据我在所附屏幕截图 (SS) 中看到的内容,可能“蓝色边框”可能不是“css border" 属性 但它是其他一些 CSS 属性的结果,例如 "outline" 或 "box-shadow",这通常是 ":focus" 期间的标准 UX 行为select 框上的事件。
无论哪种方式,根据您的开发工具屏幕截图,select 上的边框看起来 而不是 select 的问题,但我们可以通过查看 select 框的“计算属性”进行三重检查,以确认边框已正确设置为 none.