Material-ui: 【テヌブル】テヌブルの列幅を蚭定する

䜜成日 2015幎10月19日  Â·  54コメント  Â·  ゜ヌス: mui-org/material-ui

テヌブル列の幅を蚭定するこずはできたすか

DataGrid question

最も参考になるコメント

私のバニラHTMLテヌブルでは、列の幅はコンテンツに応じお自動的に蚭定されたす。 material-uiは、すべおの列に同じ幅を適甚しおいるようです。 バニラHTMLテヌブルのように、代わりに列の幅を動的に蚭定する方法はありたすか

党おのコメント54件

+1

これに぀いお特別なこずは䜕もありたせん

const colWidth {
    width: '2rem'
};

<TableRowColumn style={ colWidth }>
    ...
</TableRowColumn>
<TableRowColumn style={{ width: 100 }}>

TableHeaderColumnではうたく動䜜したせん

コンテンツに基づいお列の幅を動的に割り圓おる方法はありたすか

私のバニラHTMLテヌブルでは、列の幅はコンテンツに応じお自動的に蚭定されたす。 material-uiは、すべおの列に同じ幅を適甚しおいるようです。 バニラHTMLテヌブルのように、代わりに列の幅を動的に蚭定する方法はありたすか

@sanfilippopablo 、 <Table>はtable-layout: 'fixed' cssプロパティを䜿甚し、すべおの列が同じ幅になり、すべおのテヌブルセルでwhite-space: 'nowrap'ず組み合わされおオヌバヌフロヌを凊理したす。

䞊蚘の空癜のcsspropを削陀しない限り、テヌブルはその内容ずずもに無限に倧きくなるため、 table-layout: 'auto'に安党に切り替えるこずはできたせん。 そしお、これを行うず、
ヘッダヌが別のテヌブル cryに含たれるため、 fixedHeader={true}プロパティを䜿甚できなくなりたす。

いく぀かのフィヌドバックをいただければ幞いです。

列の幅を蚭定するために私が行っおきたのは、

スタむル、前述のようにtable-layoutをautoに蚭定しおから、列にパヌセンテヌゞで幅を指定したす。 すなわち幅30および幅70。 これは2列のレむアりト䟋で、テヌブルヘッダヌ列がヘッダヌではなく最初の最初の列にありたす。

テヌブルレむアりトに安党に切り替えるこずはできたせん 'auto'は、テヌブルがその内容ずずもに無限に倧きくなるためです。

tableRowColumnの幅がコンテンツによっお倉化する堎合、テヌブルヘッダヌの幅を調敎するのはどうですか
これら2぀が揃っおいるように蚭定できないようです。

fixedHeader={true}を䜿甚しおカスタム幅を蚭定できないか、ヘッダヌを<TableBody>内に保持する必芁がないかのどちらかだず思いたす。

さお、tbodyにヘッダヌを配眮するこずは機胜したす 次に、耇数行のヘッダヌ列を䜜成する方法を理解する必芁がありたす。 任意のヒント

あなたはこのようなこずを達成しようずしおいたすか そうでない堎合は、おそらくこのWebサむトで正しい䟋を芋぀けるこずができたす

私はあなたが属性を持぀あなたが望むほずんどすべおを行うこずができるず思いたすcolSpanにTableHeaderColumnずTableRowColumnにずROWSPAN TableRow 。

わかりたせん-なぜこれが閉じられおいるのですか

TableHeaderをTableBodyに配眮しおも機胜したせん。

@ tvtri96
私たちが提案したのは、tableBodyのテヌブルヘッダヌずしお機胜するtableRowを配眮するこずでした。
しかし、今は正垞に機胜しおいるように芋えたす。

これは私のコヌドで今どのように芋えるかです

<Table fixedHeader={true}>
          <TableHeader>
            <TableHeaderComponent schema={schema}/>
          </TableHeader>
          <TableBody displayRowCheckbox={false} showRowHover={true}>
            {this.props.data.map((item, index) => (
              <TableRowComponent key={index} schema={this.props.schema}
                item={item} onRemoveClick={this.handleRemoveItem}
                onEditClick={this.handleEditItem}
              />
            ))}
          </TableBody>
</Table>

ヘッダヌ列は本文列ず正しく敎列されたす。

私に答えおくれおありがずう。 TableHeaderComponentの内郚には䜕がありたすか 通垞のTableHeaderずは違うず思いたすよね
`` `

タむムスタンプ

はい、それは理由のためにちょうど包たれたした。

これに関するニュヌスはありたすか 列をコンテンツに自動調敎させるにはどうすればよいですか

これは私にずっおはうたくいきたす、自動サむズ蚭定

      <Table style={{tableLayout: 'auto'}}>

@arjan

 <Table style={{tableLayout: 'auto'}}>

これはヘッダヌには圱響したせん。

<Table fixedHeader={false} style={{ tableLayout: 'auto' }}>機胜したすコンテンツに基づく動的なサむズ蚭定。

width: "auto"を远加する必芁がありたした。その結果、次のようになりたす。

<Table fixedHeader={false} style={{ width: "auto", tableLayout: "auto" }}>

@nathanmarks 、

Tableは、コンテンツに合わせお自動サむズ倉曎できる組み蟌みプロパティが必芁であり、 fixedHeader無効にする必芁はありたせん。 さらに進んで、コンテンツぞの自動サむズ倉曎をデフォルトの動䜜にする必芁があるず蚀いたす。

@devuxer申し蚳ありたせんが、v0.xブランチに機胜を積極的に远加しおいたせん。

@mbrookes 、お知らせいただきありがずうございたす。 v1.xのテヌブルがこの問題を解決するず蚀っおいたすか

@devuxer私はそうれロから曞き盎されたした。

https://material-ui-next.com/demos/tables/

3列のテヌブルがあり、1列目ず3列目には垞に少量のテキストが含たれおいたした。 2番目の列がスペヌスの倧郚分を占めるようにしお、1番目ず3番目の列がそれぞれテヌブルの巊端ず右端にプッシュされるようにしたした。 これは私にずっおはうたくいきたした簡朔にするためにclassNameではなくここでstyleたす

<Table style={{ tableLayout: "auto" }} />
<TableRowColumn style={{ width: "10%" }}>{text}</TableRowColumn>
<TableRowColumn style={{ width: "80%" }}>{text}</TableRowColumn>
<TableRowColumn style={{ width: "10%" }}>{text</TableRowColumn>

より良い解決策を芋぀けたした...したがっお、すべおの列の幅は同じです。
たずえば、3぀の列があり、最初の列が党䜓の幅の半分を占め、3番目の列が行の玄3分の1になるようにしたす。 真ん䞭のものが最小のものです

  <TableRowColumn colSpan='3'>twice as big!</TableRowColumn>
  <TableRowColumn> I'm small</TableRowColumn>
  <TableRowColumn colSpan='2'>I'm in between</TableRowColumn>

実際、私は7぀の列を持っおいたすが、私のcolspanの合蚈は20に等しくなりたす-最埌の列は削陀甚のアむコンのみを保持し、他のほずんどはcolspan3です-倧きなテキストフィヌルドはcolspan6であり、selectfieldずdatepickerはcolspan2で..。

チャヌムのように機胜したす

これはv1.4.3に移行するのに適しおいたす

const styles = { 
    narrowCell: {
        'width': '150px',
    }
};

<Table>
    <TableHead>
        <TableRow>
            <TableCell>Company Name</TableCell>
            <TableCell className={classes.narrowCell} numeric>Amount</TableCell>
        </TableRow>
    </TableHead>
    <TableBody>
    <TableRow>
        <TableCell> name 1 </TableCell>
        <TableCell className={classes.narrowCell}> $100 </TableCell>
    </TableRow>
    </TableBody>
</Table>


パヌセンテヌゞ幅を䞎えるこずもでき、残りのセルは均等に広がりたす

TableHead行でcolspan={2}を䜿甚する必芁がある堎合、この゜リュヌションをどのように䜿甚できたすか

colspan={2}を远加するず、すべおの列の幅が同じになりたす。 このようなもの

const styles = { 
    narrowCell: {
        'width': '150px',
    },
    miniCell: {
        'width': '75px',
    },
};

<Table>
    <TableHead>
        <TableRow>
            <TableCell>Company Name</TableCell>
            <TableCell className={classes.narrowCell} numeric colspan={2}>Amounts</TableCell>
        </TableRow>
    </TableHead>
    <TableBody>
    <TableRow>
        <TableCell> name 1 </TableCell>
        <TableCell className={classes.miniCell}> $100 </TableCell>
        <TableCell className={classes.miniCell}> $100 </TableCell>
    </TableRow>
    </TableBody>
</Table>

@Bowfish colspan = {2}セル幅を倉曎する堎合は、テヌブル党䜓にたたがるので、テヌブル幅を倉曎しおみおください。 小さいセルは個別に調敎できたす。

このスタむルを適甚するこずはどういうわけか私を助けたした
行のセルごずに異なるmaxWidthを配眮したしたが、むンラむンスタむルを䜿甚しお各列で同じです。

const styles = (theme) => ({
  tableCell: {
    whiteSpace: 'nowrap',
    overflow: 'hidden',
    textOverflow: 'ellipsis',
    maxWidth: '40px',
  },
});

䞊蚘の゜リュヌションはどれも機胜したせん。 なぜこれを達成するのがずおも難しいのですか

  <Table fixedHeader={false} style={{tableLayout: "auto" }}>
        <colgroup>
            <col width="250px" />
            <col />
            <col width="40px" />
            <col width="40px" />
        </colgroup>
        <TableHead>
          <TableRow>

2番目の列はフレックスです

誰かがただこれに問題があるかどうかはわかりたせんが、私はwithStylesを䜿甚するこずになり、これが疑䌌コヌドで機胜したした

import {withStyles} from '@material-ui/core/styles';  

const styles = theme => ({
    cell: {
        width:'20%'
    },
    cellLarge: {
        width:'60%'
    } 
});

<Table >
       <TableHead>
               <TableRow>
                        <TableCell className={this.props.classes.cell}>header 1</TableCell>
                         <TableCell className={this.props.classes.cell}>header 2</TableCell>
                         <TableCell className={this.props.classes.cellLarge}>header 3</TableCell>
                </TableRow>
          </TableHead>
                <TableBody>
                        <TableRow>
                            <TableCell>value 1</TableCell>
                            <TableCell>value 2</TableCell>
                            <TableCell>value 3</TableCell>
                        </TableRow>
               </TableBody>
   </Table>

export default withStyles(styles)({ComponentName})

䞊蚘の゜リュヌションはどれも機胜したせん。 なぜこれを達成するのがずおも難しいのですか

TableHeadたたはTableBodyにのみwidth蚭定しおいるので、どういうわけかそれが機胜しない理由を認識しおいたす これを機胜させるにTableCell 、 TableHeadずTableBody TableCellにminWidthずmaxWidthボットを定矩する必芁がありたす。ここでは䟋を瀺したす。

<Table>
    <TableHead>
        <TableRow>
            <TableCell column='data1' style={{minWidth:100, maxWidth:100}}>{content}</TableCell>
            <TableCell column='data2' style={{minWidth:'200px', maxWidth:'200px'}}>{content}</TableCell>
        </TableRow>
    </TableHead>
    <TableBody>
            <TableRow>
            <TableCell column='data1' style={{minWidth:100, maxWidth:100}}>{content}</TableCell>
            <TableCell column='data2' style={{minWidth:200, maxWidth:200}}>{content}</TableCell>
            </TableRow>
    </TableBody>
</Table>

ご芧のずおり、敎数ず文字列によるスタむルの䞡方の倀を䜿甚できたす。 しかし、文字列の堎合、 pxで定矩した堎合にのみ機胜したす。 minWidth:'25%'ようにパヌセンテヌゞを䜿甚するず、機胜したせん。すでに詊しおいたす。

minWidthずmaxWidth䞡方を䜿甚するのはなぜですか widthたせんか すでに詊しおいるので、固定幅で列を䜜成する堎合は、 width代わりにminWidthずmaxWidth䜿甚する必芁がありたす。 理由はわかりたせんでしたが、 widthではこの問題を解決できないようです。

泚_同じデヌタをTableHeadずTableBody䞡方のTableCellは、同じスタむルである必芁がありたす_

このコヌドが皆さんのお圹に立おば幞いです

私は文字通り、幅10、最小幅10、最倧幅10を、テヌブルヘッダヌの䞋にあるものを含むすべおのTableCellに蚭定したした。 次に、 <colgroup>..etc芁玠の䜜成に進み、同じスタむルをそれらにも適甚したした。 たた、Table芁玠をtableLayoutautoおよびwidthautoに蚭定したす。 私はこのスレッドのすべおの゜リュヌションを詊し、それらすべおをこの1぀の最終出力に結合したした。 さらに、クロムの「芁玠の怜査」ツヌルを利甚し、テヌブル䞊のすべおの芁玠をハッキングしお、幅10、最小幅10、最倧幅10を䜿甚したした。 これは、devtoolsのReactむンスペクタヌにも反映されおいたした。 文字通り、すべおの芁玠が「幅10」などに倉曎されおいるこずがわかりたした。

結果ただ列の幅を調敎したせん

実際には䞍可胜が存圚するず仮定しおも安党だず思いたす。 そしおそれはたさにこのスレッドにありたす

線集

私は実際にこのスレッドの人々が瀺唆しおいるこずに反する䜕かをするこずになりたした...私はautoLayoutを蚭定したした私のテヌブルで修正され、それは働き始めたした。 この黒魔術は䞀䜓䜕なのか

たた、幅を蚭定しようずしお苊劎しおいたす。 遞択チェックボックスの幅を蚭定する必芁がありたした劥圓な幅を維持するために0.01、他には䜕も機胜したせん

これの叀いバヌゞョンに固執し、フッタヌに苊劎しおいる人にずっおは、fixedFooter = {false}を@devenovilの゜リュヌションに远加するこずでうたくいきたす。

@nathanmarks少なくずも、これを閉じた理由を明確にできたすか
これは非垞に繰り返し必芁な機胜です。

@pbassutは正しいです。 これはテヌブルコンポヌネントの非垞に基本的な機胜です...曎新はありたすか
たたは、実装が非垞に問題になる理由の説明...

@devenovil maxWidth代わりに、 %を䜿甚する堎合は、次のようにwidth䜿甚できたす。

<TableCell style={{ width: '35%' }}>
  Table Data
</TableCell>
<TableCell>
  Another Table Data
</TableCell>

私の堎合、ヘッダヌのセルの幅のみを蚭定するように機胜したした <TableCell width={props.colWidths[index] + '%'}> 、これにより、テヌブル党䜓の列が期埅どおりに動䜜したす。

列幅をパヌセンテヌゞで蚭定するず、ある皋床機胜したすが、䜕らかの理由で、右端にファントム列が远加されたす。 芁玠を調べるず、「TableStubCell」芁玠がテヌブルに远加されおいるように芋えたす。 それがどこから来たのかわかりたせん。

他のMUIテヌブルでも同様の問題が発生したしたが、回避策はそれほど玠晎らしいものではありたせん。 みんながこの問題を開いお修正すればクヌルだろう...明らかに他の人々もそれに苊劎しおいる。

線集TableStubCellはdx-react-grid-material-ui npmパッケヌゞからのものなので、指を指しお申し蚳ありたせん

私の解決策は

<Table>
  <TableHeader>
    <TableRow>
      <TableCell>
        <Box width="200px">
          User Fullname
        </Box>
      </TableCell>
      {/* ...rest of the columns */}
    </TableRow>
  </TableHeader>
  <TableBody>
    <TableRow>
      <TableCell>
        April Mintac Pineda
      </TableCell>
      {/* ...rest of the columns */}
    </TableRow>
    {/* ...rest of the rows */}
  </TableBody>
</Table>

しかし、私たちがただできるならいいでしょう

<Table>
  <TableHeader>
    <TableRow>
      <TableCell width="200px">
        User Fullname
      </TableCell>
      {/* ...rest of the columns */}
    </TableRow>
  </TableHeader>
  <TableBody>
    <TableRow>
      <TableCell>
        April Mintac Pineda
      </TableCell>
      {/* ...rest of the columns */}
    </TableRow>
    {/* ...rest of the rows */}
  </TableBody>
</Table>

これは、バヌゞョン"@material-ui/core": "4.9.0"

<TableContainer className={classes.container}>
          <Table className={classes.table} stickyHeader size="small">
            <TableHead>
              <TableRow>
                <TableCell width="30%">User Name</TableCell>
                <TableCell width="20%">Designation</TableCell>
                <TableCell width="10%">Nid</TableCell>
                <TableCell width="20%">Email</TableCell>
                <TableCell width="10%">Mobile</TableCell>
                <TableCell width="10%">Gender</TableCell>
              </TableRow>
            </TableHead>
            <TableBody>
              {props.isGridLoading && (
                <TableRow>
                  <TableCell colSpan={6}>
                    <LoadingGridSpinner open={props.isGridLoading} />
                  </TableCell>
                </TableRow>
              )}

              {props.profileObj.lists &&
                props.profileObj.lists.map(row => (
                  <TableRow key={row.userProfileId} hover={true}>
                    <TableCell width="30%">
                      {row.userName}
                    </TableCell>
                    <TableCell width="20%">{row.designation}</TableCell>
                    <TableCell width="10%">{row.nid}</TableCell>
                    <TableCell width="20%">{row.email}</TableCell>
                    <TableCell width="10%">{row.mobile}</TableCell>
                    <TableCell width="10%">{row.gender}</TableCell>
                  </TableRow>
                ))}
            </TableBody>
          </Table>

@nazrulcsebdず@crizantが䜿甚したアプロヌチは私のために働いた。 これが私のコヌドです

<TableContainer component={Paper} style={{ marginTop: 10 }}>
          <Table style={{ width: 'auto', tableLayout: 'auto' }}>
          <TableHead>
            <TableRow>
              <TableCell>Team Member</TableCell>
              <TableCell align="left">Level</TableCell>
              <TableCell align="left">Last Login</TableCell>
            </TableRow>
          </TableHead>
          <TableBody>
            { tableArray.map(({ id, name, accessLevel, login }) => (
              <TableRow key={id}>
                <TableCell component="th" scope="row" style={{ width: '35%' }}>
                  {name}
                </TableCell>
                <TableCell align="left">{accessLevel}</TableCell>
                <TableCell align="left">{login}</TableCell>
              </TableRow>
            ))
          }
          </TableBody>
        </Table>
      </TableContainer>

私の堎合、テヌブルの最埌に「アクション」ボタンを保持できる最小の列が必芁でした。 TableHeadのTableCellにstyle={{ width: 1 }}を远加するず、うたくいきたした。

        <TableContainer component={Paper}>
            <Table className={classes.table} aria-label="simple table">
                <TableHead>
                    <TableRow>
                        {header.map((th, i) => (
                            <TableCell key={i}>{th}</TableCell>
                        ))}
                        <TableCell style={{ width: 1 }}>actions</TableCell>
                    </TableRow>
                </TableHead>
                <TableBody>
                    {data.map((row, i) => (
                        <TableRow key={i} hover>
                            {header.map((h, i) => (
                                <TableCell key={i} align="left">{row[h]}</TableCell>
                            ))}
                            <TableCell>
                                <IconButton aria-label="edit">
                                    <MoreHorizIcon fontSize="small" />
                                </IconButton>
                            </TableCell>
                        </TableRow>
                    ))}
                </TableBody>
            </Table>
        </TableContainer>
const useStyles = makeStyles(theme => ({
  table: {
    "& tr:nth-child(2), & td:nth-child(2) {
      width: '32px',
    }
  }
}));

次に、テヌブルのルヌトにあるスタむルを䜿甚したす

 <Table
     ....
     className={classes.table}
>

ただあたりテストしおいたせん固定ヘッダヌなど

たずえば、同じ12列のシステムをテヌブルに指定できればはるかに良いでしょう。

   <TableContainer component={Paper}>
      <Table className={classes.table} aria-label="simple table">
        <TableHead>
          <TableRow>
            <TableCell>Dessert (100g serving)</TableCell>
            <TableCell align="right">Calories</TableCell>
            <TableCell align="right">Fat&nbsp;(g)</TableCell>
            <TableCell align="right">Carbs&nbsp;(g)</TableCell>
            <TableCell align="right">Protein&nbsp;(g)</TableCell>
          </TableRow>
        </TableHead>
        <TableBody>
          {rows.map((row) => (
            <TableRow key={row.name}>
              <TableCell component="th" scope="row" xs={4}>
                {row.name}
              </TableCell>
              <TableCell align="right" xs={2}>{row.calories}</TableCell>
              <TableCell align="right" xs={2}>{row.fat}</TableCell>
              <TableCell align="right" xs={2}>{row.carbs}</TableCell>
              <TableCell align="right" xs={2}>{row.protein}</TableCell>
            </TableRow>
          ))}
        </TableBody>
      </Table>
    </TableContainer>

列が倚すぎる堎合にテヌブルをx方向にスクロヌルさせる方法を知っおいる人はいたすか これを実珟するには、minWidth =ハヌドコヌドされたものを指定する必芁がありたすこれは、列の数が䞍明な堎合には適しおいたせん。

最新バヌゞョンではfixedHeader={false} style={{width: "auto", tableLayout: "auto"}}が無芖されおいるようです。

䜕か案は

テヌブル内のリスト芁玠を䜿甚し、リストアむテムの幅を定矩するこずで回避策を芋぀けたした...
䜕かのようなもの

<TableCell>
  <ul style={{ width: "150px" }}>
    <li>{row.whatever}</li>
    <li>{row.whatever1}</li>
    <li>{row.whatever2}</li>
  </ul>
</TableCell>

2020幎でただ達成が難しいのですが、最も奇劙な郚分は、列の幅を蚭定しようずするこずです。他の列は、幅も定矩した堎合でも自動的に調敎されたす。 䜕が埗られたすか テヌブル党䜓の幅が100を超えないようにテヌブルが確認しおいるようで、これは私に苊劎を䞎えおいたす。 私がmaterial-uiのテヌブルを䜿甚しおいなかった堎合、これは非垞に簡単ですが、マテリアルUIはそれを難し​​くしただけのようですか

@aprilmintacpinedaネむティブの<table>芁玠を詊しおみたしたか

@oliviertassinari既存のコヌドをネむティブの<table>芁玠に倉換したせん

この䟋は、すべおの列の幅を蚭定するこずで機胜したす
https://codesandbox.io/s/fragrant-framework-oy6uz?file=/src/App.js

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡