react-datepicker输入宽度不会调整为100%

时间:2018-08-06 15:08:47

标签: css reactjs react-datepicker

我正在尝试调整react-datepicker输入框的宽度,令人惊讶的是,那里的信息很少,并且无法影响其宽度。我只想使输入宽度为其包含div的100%。

预期行为

宽度应扩展为其父容器的宽度。

我的react-datepicker

<div className="myContainer">
  <DatePicker
    className="myDatePicker"
    fixedHeight
    readOnly={true}
    isClearable={false}
    placeholderText="End date"
    selected={this.props.defaultValue}
    onChange={(date) => this.props.handleDateChange(date)}
  />
</div>

预期行为

以下内容应导致myDatePicker与父myContainer的宽度相同,但是宽度保持不变。

.myContainer {
  display: flex;
  flex-wrap: nowrap;
  flex-direction: row;
  flex: 1 1 0px;
}

.myDatePicker {   
  width: 100%;  // note: if I change this value to a fixed value (such as 500px) then the width is effected
}

最近的替代尝试

最接近的尝试是此操作,但它也会影响弹出窗口的宽度,导致其延伸超过整个屏幕的长度,因此这也不能作为解决方案:

.myContainer div {
  width: 100%;
}

实际行为

日期选择器的长度保持不变,除非为宽度设置了特定的px值。

有人知道如何将react-datepicker的输入宽度设置为100%吗?


编辑 我认为它之所以无法像典型的input字段那样工作,是因为react-datepickerinput,它嵌入了其他具有自己样式(或缺乏样式)的div中 enter image description here

编辑#2:这是一个显示问题的代码笔-https://codepen.io/anon/pen/bjxENG

9 个答案:

答案 0 :(得分:4)

由于Rbar的回答,我遇到了同样的问题并得以解决。

用自定义容器包装DatePicker组件。然后将宽度分配给该容器及其子容器,如下所示:

import "./customDatePickerWidth.css";

<div className="customDatePickerWidth">
   <DatePicker dateFormat="dd/MM/yyyy" />
</div>

在customDatePickerWidth.css内部:

.customDatePickerWidth, 
.customDatePickerWidth > div.react-datepicker-wrapper, 
.customDatePickerWidth > div > div.react-datepicker__input-container
.customDatePickerWidth > div > div.react-datepicker__input-container input {
   width: 100%;
}

答案 1 :(得分:3)

我也偶然发现了这个问题。为了解决这个问题,有一个属性可以直接添加到 DatePicker 组件,它是“wrapperClassName”,这个属性允许我们直接将类应用到“react-datepicker-wrapper”。

示例:

<DatePicker wrapperClassName="datepicker" />

然后

.datepicker {
    width: 100%;
}

或者如果你使用的是tailwindcss,直接应用

<DatePicker wrapperClassName="w-full" />

注意:这只会使包装器成为全宽,因此如果您希望输入字段也占据全宽,您还需要在日期选择器组件上应用“宽度:100%”。

答案 2 :(得分:0)

要防止弹性项目收缩,请将弹性收缩因子设置为0:

.myContainer .myItem {   flex-shrink:0; }

.myContainer {
  display: flex;
  flex-wrap: nowrap;
  flex-direction: row;
  flex: 1 1 0px;
}

.myDatePicker {   
  width: 100%; 
}
<div class="myContainer">
  <input class="myDatePicker">
</div>

上面的代码段才起作用,因此必须有其他代码干扰CSS或脚手架。

答案 3 :(得分:0)

这是我的html

<div class="container">
    <div>
        <div class="react-datepicker-wrapper">
            <div class="react-datepicker__input-container">
                <input class="form-control" type="text" value="">
            </div>
        </div>
    </div>
</div>

我在React Date Picker周围使用了包装器div,并使用特定的CSS选择器来使包装div React Date Picker在输入周围应用,并且我添加的div的宽度为100%

这是应用于div的css选择器,它包装了上面的代码段

.container > div, 
.container > div > div.react-datepicker-wrapper, 
.container > div > div > div.react-datepicker__input-container {
  width: 100%;
}

结果是输入框的宽度扩展到100%,但弹出日期选择器框的宽度保持不变

答案 4 :(得分:0)

  

简单的解决方案:将其添加到您的css文件中。

.react-datepicker__input-container {
  width: inherit;
}

.react-datepicker-wrapper {
  width: 100%;
}

答案 5 :(得分:0)

//html file
  <div className="customDatePickerWidth">
              <DatePicker
                placeholderText="Select Schedule Date"
             />
  </div>

//css file    
.customDatePickerWidth, 
    .customDatePickerWidth > div.react-datepicker-wrapper, 
    .customDatePickerWidth > div > div.react-datepicker__input-container
    .customDatePickerWidth > div > div.react-datepicker__input-container input {
       width: 100%;
       height: 100%;
    }
    .react-datepicker__input-container  {
        width: inherit;
        height: inherit;
      }
      .react-datepicker__input-container input {
        width: inherit;
        height: 100%;
      }

      .react-datepicker-wrapper {
        width: 100%;
      }

答案 6 :(得分:0)

使用样式化组件

import styled from 'styled-components';
const DatePickerStyled = styled.div`
  /* STYLE FOR WITH */
  .react-datepicker-wrapper {
    width: 100%;
  }
`;

封闭组件

<DatePickerStyled>
  <DatePicker dateFormat="dd/MM/yyyy" />
</DatePickerStyled>

答案 7 :(得分:0)

我刚刚将className传递给组件:

for (int i = 0; i < this.rowHeights.length; k++)
    {
        this.rowHeightsTwo[i] = this.rowHeights[i]
    }

这是我设置宽度的方法:

<DatePicker className='date-input-field' />

答案 8 :(得分:-2)

这对我有用。默认情况下,var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet1 = ss.getSheetByName("Sheet 1"); var sheet2 = ss.getSheetByName("Sheet 2"); var cell1 = sheet1.getRange('A1'); var x= cell1.getValue(); Logger.log("AAAAAAAAAA",x); if(cell1.getValue()== false) { Logger.log("box not checked"); sheet2.hideSheet(); } else if (cell1.getValue() == true) { sheet2.showSheet(); } 类是Manager ..给它一个类名,然后可以对其应用null

转到 css> node_modules> react-datepicker> es>第2456行:

更改:

index.js

收件人:

return React.createElement(
  Manager,
  null,         // NOTE: change this line
  React.createElement(
    Target,
    { className: "react-datepicker-wrapper" },
    targetComponent
  ),
  popper
);

然后您可以像这样应用 css 将宽度设置为100%

return React.createElement(
  Manager,
  { className:"react-datepicker-manager" },  // NOTE: changed this line to contain a className
  React.createElement(
    Target,
    { className: "react-datepicker-wrapper" },
    targetComponent
  ),
  popper
);