这是我第一次使用Yii2 GridView Widget。我在stackoverflow上阅读了一些答案之后尝试设置列的宽度,但它对我不起作用,如果列的宽度不同(特别是第一个),我会很喜欢它。
我尝试使用'contentOptions'直接为第一列设置宽度,并使用外部CSS文件设置产品名称列。
有人可以告诉我是否有替代方案或者我做错了什么?
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
[
'class' => 'yii\grid\SerialColumn',
'contentOptions' => ['style' => 'max-width:20px;'],
],
[
'format' => 'raw',
'label' => 'Image',
'value' => function ($data) {
$url = $data->imgSrc;
return Html::img($url, ['width' => '40px']);
},
],
[
'attribute' => 'name',
'format' => 'raw',
'label' => 'Product name',
'contentOptions' => function ($model, $key, $index, $column) {
return ['class' => 'tbl_name'];
},
],
],
]); ?>
答案 0 :(得分:13)
如果要为单列设置宽度,可以使用headerOptions:
[
'attribute' => 'attribute_name',
'headerOptions' => ['style' => 'width:20%'],
],
答案 1 :(得分:7)
你必须这样设置:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
[
'attribute'=>'title',
'contentOptions' => ['style' => 'width:200px; white-space: normal;'],
],
]
]
);
?>
使用contentOptions,您可以为“title”列设置所有td的选项。 在Site.css中,默认情况下将白色空间设置为nowrap。
.grid-view td {
white-space: nowrap;
}
但是,如果您的内容超过200像素,则col将按内容展开并忽略您的内容。
答案 2 :(得分:5)
这可能是white-space css属性的结果,它会影响表格单元格的宽度,具体取决于其中的内容。在我的Yii2项目中,我有:
st
此处提供的建议中没有人对我没用。但这很有用:
.grid-view td {
white-space: nowrap;
}
答案 3 :(得分:5)
首先添加类似
的选项GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'options' => [ 'style' => 'table-layout:fixed;' ],
之后添加以下行
[
'attribute' => 'news_description',
'contentOptions' => [ 'style' => 'width: 25%;' ],
],
答案 4 :(得分:4)
这取决于你想要达到的目标。但是具有20像素的curl -XPUT 'http://localhost:9200/testindex/_mapping/testmapping' -d '
{
"testmapping" : {
"properties" : {
"birthdate" : { "type" : "date", "format": "dateOptionalTime" },
"name" : { "type" : "string" },
"age" : { "type" : "long" },
"amount" : { "type" : "double" }
}
}
}
'
可能不是您真正想要的。试试max-width
:
width
答案 5 :(得分:0)
只使用Options
:
[
'class' => 'yii\grid\SerialColumn',
'options' => ['style' => 'max-width:20px;'],
],
答案 6 :(得分:0)
完全解决问题的唯一解决方案是https://stackoverflow.com/users/2053862/rostyslav-pylypenko建议的解决方案: 这是诀窍:
td {
white-space:normal !important;
}
答案 7 :(得分:0)
我简单但功能性的解决方案是为列创建CSS设置最大宽度。 !important
标志用于确保此属性不会被覆盖。
td {
max-width: 800px;
white-space: normal !important;
}
然后,您只需在视图中注册即可。
$this->registerCssFile('css/tableColumnMaxWidht.css');
我们在此图片中使用此表的示例here。