如何在 Fluent UI React 中使用网格布局
How can I use grid layout with Fluent UI React
在我安装@fluentui/react之后,我尝试像这个文档那样使用网格https://developer.microsoft.com/en-us/fluentui#/styles/web/layout
ReactDOM.render(
<React.StrictMode>
<div className="ms-Grid" dir="ltr">
<div className="ms-Grid-row">
<div className="ms-Grid-col ms-sm4 ms-xl4">A</div>
<div className="ms-Grid-col ms-sm8 ms-xl8">B</div>
</div>
</div>
</React.StrictMode>,
document.getElementById('root')
);
但是它不起作用,其他控制组件工作正常。
我错过了什么吗?
他们的文档只提到了 npm 包。
你可以这样试试
import React, { Component } from 'react';
import 'office-ui-fabric-react/dist/css/fabric.css';
ReactDOM.render(
<React.StrictMode>
<div className="ms-Grid" dir="ltr">
<div className="ms-Grid-row">
<div className="ms-Grid-col ms-sm4 ms-xl4">A</div>
<div className="ms-Grid-col ms-sm8 ms-xl8">B</div>
</div>
</div>
</React.StrictMode>,
document.getElementById('root')
);
documentation 清楚地表明网格是遗留组件,不能与 Fluent UI React 一起使用。
您可以使用 CSS Grid directly. For an example in the context of Microsoft 365, check out this blog post.
[更新] 请注意,Fluent UI Northstar (@fluentui/react-northstar
) 有一个 Grid component。
Stack 提供 react-fluent 的网格布局。
来自文档:
A Stack is a container-type component that abstracts the implementation of a flexbox in order to define the layout of its children components.
示例:
const { DefaultPalette, Slider, Stack, IStackStyles, IStackTokens, ThemeProvider, initializeIcons } = window.FluentUIReact;
// Initialize icons in case this example uses them
initializeIcons();
// Non-mutating styles definition
const itemStyles: React.CSSProperties = {
alignItems: 'center',
background: DefaultPalette.themePrimary,
color: DefaultPalette.white,
display: 'flex',
height: 50,
justifyContent: 'center',
width: 50,
};
// Tokens definition
const sectionStackTokens: IStackTokens = { childrenGap: 10 };
const wrapStackTokens: IStackTokens = { childrenGap: 30 };
const HorizontalStackWrapExample: React.FunctionComponent = () => {
const [stackWidth, setStackWidth] = React.useState<number>(100);
// Mutating styles definition
const stackStyles: IStackStyles = {
root: {
background: DefaultPalette.themeTertiary,
width: `${stackWidth}%`,
},
};
return (
<Stack tokens={sectionStackTokens}>
<Slider
label="Change the stack width to see how child items wrap onto multiple rows:"
min={1}
max={100}
step={1}
defaultValue={100}
showValue={true}
onChange={setStackWidth}
/>
<Stack horizontal wrap styles={stackStyles} tokens={wrapStackTokens}>
<span style={itemStyles}>1</span>
<span style={itemStyles}>2</span>
<span style={itemStyles}>3</span>
<span style={itemStyles}>4</span>
<span style={itemStyles}>5</span>
<span style={itemStyles}>6</span>
<span style={itemStyles}>7</span>
<span style={itemStyles}>8</span>
<span style={itemStyles}>9</span>
<span style={itemStyles}>10</span>
</Stack>
</Stack>
);
};
const HorizontalStackWrapExampleWrapper = () => <ThemeProvider><HorizontalStackWrapExample /></ThemeProvider>;
ReactDOM.render(<HorizontalStackWrapExampleWrapper />, document.getElementById('content'))
在我安装@fluentui/react之后,我尝试像这个文档那样使用网格https://developer.microsoft.com/en-us/fluentui#/styles/web/layout
ReactDOM.render(
<React.StrictMode>
<div className="ms-Grid" dir="ltr">
<div className="ms-Grid-row">
<div className="ms-Grid-col ms-sm4 ms-xl4">A</div>
<div className="ms-Grid-col ms-sm8 ms-xl8">B</div>
</div>
</div>
</React.StrictMode>,
document.getElementById('root')
);
但是它不起作用,其他控制组件工作正常。 我错过了什么吗?
他们的文档只提到了 npm 包。
你可以这样试试
import React, { Component } from 'react';
import 'office-ui-fabric-react/dist/css/fabric.css';
ReactDOM.render(
<React.StrictMode>
<div className="ms-Grid" dir="ltr">
<div className="ms-Grid-row">
<div className="ms-Grid-col ms-sm4 ms-xl4">A</div>
<div className="ms-Grid-col ms-sm8 ms-xl8">B</div>
</div>
</div>
</React.StrictMode>,
document.getElementById('root')
);
documentation 清楚地表明网格是遗留组件,不能与 Fluent UI React 一起使用。
您可以使用 CSS Grid directly. For an example in the context of Microsoft 365, check out this blog post.
[更新] 请注意,Fluent UI Northstar (@fluentui/react-northstar
) 有一个 Grid component。
Stack 提供 react-fluent 的网格布局。
来自文档:
A Stack is a container-type component that abstracts the implementation of a flexbox in order to define the layout of its children components.
示例:
const { DefaultPalette, Slider, Stack, IStackStyles, IStackTokens, ThemeProvider, initializeIcons } = window.FluentUIReact;
// Initialize icons in case this example uses them
initializeIcons();
// Non-mutating styles definition
const itemStyles: React.CSSProperties = {
alignItems: 'center',
background: DefaultPalette.themePrimary,
color: DefaultPalette.white,
display: 'flex',
height: 50,
justifyContent: 'center',
width: 50,
};
// Tokens definition
const sectionStackTokens: IStackTokens = { childrenGap: 10 };
const wrapStackTokens: IStackTokens = { childrenGap: 30 };
const HorizontalStackWrapExample: React.FunctionComponent = () => {
const [stackWidth, setStackWidth] = React.useState<number>(100);
// Mutating styles definition
const stackStyles: IStackStyles = {
root: {
background: DefaultPalette.themeTertiary,
width: `${stackWidth}%`,
},
};
return (
<Stack tokens={sectionStackTokens}>
<Slider
label="Change the stack width to see how child items wrap onto multiple rows:"
min={1}
max={100}
step={1}
defaultValue={100}
showValue={true}
onChange={setStackWidth}
/>
<Stack horizontal wrap styles={stackStyles} tokens={wrapStackTokens}>
<span style={itemStyles}>1</span>
<span style={itemStyles}>2</span>
<span style={itemStyles}>3</span>
<span style={itemStyles}>4</span>
<span style={itemStyles}>5</span>
<span style={itemStyles}>6</span>
<span style={itemStyles}>7</span>
<span style={itemStyles}>8</span>
<span style={itemStyles}>9</span>
<span style={itemStyles}>10</span>
</Stack>
</Stack>
);
};
const HorizontalStackWrapExampleWrapper = () => <ThemeProvider><HorizontalStackWrapExample /></ThemeProvider>;
ReactDOM.render(<HorizontalStackWrapExampleWrapper />, document.getElementById('content'))