Giao diện người dùng vật liệu và hệ thống lưới


118

Tôi đang chơi một chút với Material-UI . Có bất kỳ tùy chọn nào để tạo bố cục lưới (như trong Bootstrap ) không?

Nếu không, cách để thêm chức năng này là gì?

Có một thành phần GridList nhưng tôi đoán nó có một số mục đích khác nhau.


Đừng nghĩ rằng nó có bất kỳ thành phần nào để tạo lưới đáp ứng.
Lucky Chingi vào

Câu trả lời:


126

Material UI đã triển khai bố cục Flexbox của riêng họ thông qua thành phần Grid .

Có vẻ như ban đầu họ muốn giữ cho mình hoàn toàn là một thư viện 'thành phần'. Nhưng một trong những nhà phát triển cốt lõi đã quyết định rằng việc không có cái riêng là quá quan trọng . Nó hiện đã được hợp nhất vào mã lõi và được phát hành với v1.0.0 .

Bạn có thể cài đặt nó qua:

npm install @material-ui/core

Nó hiện đã có trong tài liệu chính thức với các ví dụ về mã .


Tôi thấy bạn đã đăng câu trả lời mà tôi chỉ định thêm vào! cười lớn. vừa trả lời bình luận của bạn về câu trả lời hàng đầu hiện tại.
Cleanshooter

Chỉ cần cài đặt và sử dụng nhánh alpha của Material UI ngay bây giờ. Có thể xác nhận rằng hệ thống Bố cục hoạt động tốt.
dùng2875289

3
Hệ thống lưới điện hoạt động tốt nhưng vẫn còn một số thành phần chưa được thực hiện, như Select Field. Tôi bị mắc kẹt về cách sử dụng các trường như vậy. Bạn có thể giúp tôi vượt qua điều này?
Suresh Mainali

1
Tôi đồng ý với @SureshMainali vì tôi cũng đang phải đối mặt với những vấn đề tương tự. Hầu hết các thành phần đều thiếu đạo cụ và thậm chí liên quan đến việc triển khai chủ đề tùy chỉnh
Sai Ram

@SaiRam Tôi sẽ không nói hầu hết, nhưng thực sự Selectlà thiếu, tôi vừa mới thay thế nó bằng các nút radio, nhưng tôi chắc rằng sẽ không lâu nữa trước khi lựa chọn được chuyển từ thân cây.
icc97

35

Từ mô tả về thông số kỹ thuật material design :

Danh sách lưới là một thay thế cho chế độ xem danh sách tiêu chuẩn. Danh sách lưới khác biệt với các lưới được sử dụng cho bố cục và các bản trình bày trực quan khác.

Nếu bạn đang tìm kiếm một thư viện thành phần Grid nhẹ, tôi đang sử dụng React-Flexbox-Grid , việc triển khai flexboxgrid.csstrong React.

Trên hết, React-Flexbox-Grid chơi tuyệt vời với cả material-uireact -toolbox (triển khai thiết kế material design thay thế).


32
React-Flexbox-Grid được triển khai kém tại thời điểm bài viết này và đòi hỏi nhiều phụ thuộc bên ngoài để hoạt động bình thường. Thêm vào đó, @Roylee là nhà phát triển của nó ... nên ý kiến của mình là một chút thiên vị nào;) ...
Cleanshooter

1
Ngoài ra, react-flexbox-grid phụ thuộc vào flexboxgrid, không sử dụng cùng các điểm ngắt đáp ứng được đề xuất trong Material Design. Xem: material.io/guidelines/layout/…
Ken Gregory

@Cleanshooter đây có phải là phiên bản cạnh tranh của bạn không? Có lẽ bạn cũng hơi thiên vị :)
icc97

@ icc97 có và không. Không thực sự có ý định "cạnh tranh", đó là khoảng cách nhiều hơn cho ứng dụng tôi đang xây dựng. Tôi đã làm điều đó sau khi thất vọng với cả hai ... nó thực sự không còn quan trọng nữa vì những người ở CallEmAll đã bao gồm một hệ thống lưới trong bản phát hành mới nhất của Material-UI. Tôi vẫn chưa thử nó một cách cá nhân. github.com/callemall/material-ui/pull/5808
Cleanshooter

1
@Cleanshooter của bạn trông khá tốt. Tôi đã thử nghiệm lưới Material-UI mới và nó hoạt động tốt cho đến nay.
icc97 28/02/17

20

Tôi đã xem xét xung quanh để tìm câu trả lời cho điều này và cách tốt nhất tôi tìm thấy là sử dụng Flex và tạo kiểu nội tuyến trên các thành phần khác nhau.

Ví dụ: để làm cho hai thành phần giấy chia toàn màn hình của tôi thành 2 thành phần dọc (theo tỷ lệ 1: 4), mã sau hoạt động tốt.

const styles = {
  div:{
    display: 'flex',
    flexDirection: 'row wrap',
    padding: 20,
    width: '100%'
  },
  paperLeft:{
    flex: 1,
    height: '100%',
    margin: 10,
    textAlign: 'center',
    padding: 10
  },
  paperRight:{
    height: 600,
    flex: 4,
    margin: 10,
    textAlign: 'center',
  }
};

class ExampleComponent extends React.Component {
  render() {
    return (
      <div>
        <div style={styles.div}>
          <Paper zDepth={3} style={styles.paperLeft}>
            <h4>First Vertical component</h4>
          </Paper>
          <Paper zDepth={3} style={styles.paperRight}>
              <h4>Second Vertical component</h4>
          </Paper>
        </div>
      </div>
    )
  }
}

Giờ đây, với một số phép tính khác, bạn có thể dễ dàng phân chia các thành phần của mình trên một trang.

Đọc thêm trên flex


2
Tôi đồng ý, sử dụng thuộc tính css flex đã cung cấp định dạng đơn giản mà tôi cần.
James Gentes

11

Tôi hy vọng điều này không quá muộn để đưa ra phản hồi.

Tôi cũng đang tìm kiếm một bootstrap đơn giản, mạnh mẽ, linh hoạt và có thể tùy chỉnh cao như hệ thống lưới phản ứng để sử dụng trong các dự án của mình.

Điều tốt nhất tôi biết là react-pure-grid https://www.npmjs.com/package/react-pure-grid

react-pure-grid cung cấp cho bạn sức mạnh để tùy chỉnh mọi khía cạnh của hệ thống lưới điện của bạn, đồng thời nó được tích hợp sẵn các giá trị mặc định có thể phù hợp với mọi dự án

Sử dụng

npm install react-pure-grid --save

-

import {Container, Row, Col} from 'react-pure-grid';

const App = () => (
      <Container>
        <Row>
          <Col xs={6} md={4} lg={3}>Hello, world!</Col>
        </Row>
        <Row>
            <Col xsOffset={5} xs={7}>Welcome!</Col>
        </Row>
      </Container>
);

8

Cách tôi làm là truy cập http://getbootstrap.com/customize/ và chỉ kiểm tra "hệ thống lưới" để tải xuống. Có bootstrap-theme.cssbootstrap.csstrong các tệp đã tải xuống, và tôi chỉ cần tệp sau.

Bằng cách này, tôi có thể sử dụng hệ thống lưới của Bootstrap, với mọi thứ khác từ Material UI.


5

Tôi chỉ sử dụng https://react-bootstrap.github.io/ cho Bố cục đáp ứng và Material-ui cho tất cả thành phần


3
Tôi đoán nó hơi nặng một chút :) Có cách nào để chỉ bao gồm các kiểu liên quan đến lưới không?
kharandziuk

2
Vì vậy việc sử dụng React-Bootstrap vẫn cần phải bao gồm tệp css có liên quan. Từ getbootstrap.com/customize, bạn có thể tùy chỉnh để chỉ bao gồm hệ thống Grid và sử dụng phiên bản thu nhỏ của nó ~
yuchien 14/12/15

5

Tôi đã gặp khó khăn khi tìm một khung giao diện người dùng sẽ triển khai các tiêu chuẩn của Material Design cho hành vi đáp ứng, vì vậy tôi đã tạo hai gói triển khai hệ thống lưới cho Material Design:

  1. Khung CSS: material-responsive-grid
  2. Một tập hợp các thành phần React triển khai khuôn khổ đó: react-material-responsive-grid .

Các gói này tuân theo các tiêu chuẩn về giao diện người dùng đáp ứng do Google vạch ra. Tất cả các kích thước cửa sổ xem được chỉ định trong tiêu chuẩn của chúng đều được hỗ trợ với việc xem xét máng xối thích hợp, số lượng cột được đề xuất và thậm chí là hoạt động của bố cục vượt quá 1600 dp. Nó phải hoạt động như khuyến nghị cho mọi thiết bị trong hướng dẫn Chỉ số thiết bị .


1

Dưới đây được thực hiện bởi hệ thống MUI Grid hoàn toàn ,

MUI - Bố cục lưới

Với đoạn mã dưới đây,

// MuiGrid.js

import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Grid from "@material-ui/core/Grid";

const useStyles = makeStyles(theme => ({
  root: {
    flexGrow: 1
  },
  paper: {
    padding: theme.spacing(2),
    textAlign: "center",
    color: theme.palette.text.secondary,
    backgroundColor: "#b5b5b5",
    margin: "10px"
  }
}));

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

  return (
    <div className={classes.root}>
      <Grid container spacing={0}>
        <Grid item xs={12}>
          <Paper className={classes.paper}>xs=12</Paper>
        </Grid>
        <Grid item xs={12} sm={6}>
          <Paper className={classes.paper}>xs=12 sm=6</Paper>
        </Grid>
        <Grid item xs={12} sm={6}>
          <Paper className={classes.paper}>xs=12 sm=6</Paper>
        </Grid>
        <Grid item xs={6} sm={3}>
          <Paper className={classes.paper}>xs=6 sm=3</Paper>
        </Grid>
        <Grid item xs={6} sm={3}>
          <Paper className={classes.paper}>xs=6 sm=3</Paper>
        </Grid>
        <Grid item xs={6} sm={3}>
          <Paper className={classes.paper}>xs=6 sm=3</Paper>
        </Grid>
        <Grid item xs={6} sm={3}>
          <Paper className={classes.paper}>xs=6 sm=3</Paper>
        </Grid>
      </Grid>
    </div>
  );
}

↓ CodeSandbox ↓

Chỉnh sửa hệ thống MUI-Grid



0

Đây là ví dụ về hệ thống lưới với material-ui tương tự như bootstrap:

<Grid container>
    <Grid item xs={12} sm={4} md={4} lg={4}>
    </Grid>
    <Grid item xs={12} sm={4} md={4} lg={4}>
    </Grid>
 </Grid>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.