1

I'm making a date picker component that includes a calendar which I'm styling using CSS grid. It works great in all browsers except IE11 which shows all the elements in the same position in the top left corner. Am I missing an IE11 specific css property that will prevent this or is it not feasible for this to work in IE11?

How it looks in Chrome:

output in chrome

How it looks in IE11

output in ie11

Here's the code snippet:

.date-picker .dates .days {
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: (1fr)[7];
    grid-template-columns: repeat(7, 1fr);
    justify-items: center;
}

.date-picker .dates .days-of-week {
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: (1fr)[7];
    grid-template-columns: repeat(7, 1fr);
    justify-items: center;
}

.date-picker .dates .days .day {    
    margin-top: .5em;
    margin-bottom: .5em;
    height: 36px;
    width: 36px;
    
}

.date-picker .dates .days-of-week .day {    
    height: 36px;
    width: 36px;
}
<div
      id="date-picker"
      class="date-picker relative cursor-pointer input select text-1_25 active"
      min="2021-04-28"
      max="2021-05-28"
    >
      <div
        class="
          dates
          hidden
          absolute
          left-0
          right-0
          px-24
          py-16
          bg-white
          rounded-16
          shadow-xl
          active
        "
      >
        <div
          class="
            days-of-week
            border-b-solid border-gray-a9acc4 border-b
            text-gray-65657b
            py-8
          "
        >
          <div class="day">S</div>
          <div class="day">M</div>
          <div class="day">T</div>
          <div class="day">W</div>
          <div class="day">T</div>
          <div class="day">F</div>
          <div class="day">S</div>
        </div>

        <div class="days">
          <div></div>
          <div></div>
          <div></div>
          <div></div>
          <div></div>
          <div></div>
          <div class="day">1</div>
          <div class="day">2</div>
          <div class="day">3</div>
          <div class="day">4</div>
          <div class="day">5</div>
          <div class="day">6</div>
          <div class="day">7</div>
          <div class="day">8</div>
          <div class="day">9</div>
          <div class="day">10</div>
          <div class="day">11</div>
          <div class="day">12</div>
          <div class="day">13</div>
          <div class="day">14</div>
          <div class="day selected">15</div>
          <div class="day">16</div>
          <div class="day">17</div>
          <div class="day">18</div>
          <div class="day">19</div>
          <div class="day">20</div>
          <div class="day">21</div>
          <div class="day">22</div>
          <div class="day">23</div>
          <div class="day">24</div>
          <div class="day">25</div>
          <div class="day">26</div>
          <div class="day">27</div>
          <div class="day">28</div>
          <div class="day inactive">29</div>
          <div class="day inactive">30</div>
          <div class="day inactive">31</div>
        </div>
      </div>
    </div>

1
  • IE11 didn't implement grid the same way - see [link]caniuse.com/?search=grid That may be what is causing your problem.
    – A Haworth
    Commented May 15, 2021 at 20:33

1 Answer 1

0

After doing some more research it seems that I have to specify each cell's position in the grid in order for it to display correctly in IE11

So the css would look like this:

.date-picker .dates .days {
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: (1fr)[7];
    grid-template-columns: repeat(7, 1fr);
    justify-items: center;
}

.date-picker .dates .days-of-week {
    display: -ms-grid;
    display: grid;
    -ms-grid-columns: (1fr)[7];
    grid-template-columns: repeat(7, 1fr);
    justify-items: center;
}

.date-picker .dates .days .day {    
    margin-top: .5em;
    margin-bottom: .5em;
    height: 36px;
    width: 36px;
    
}

.date-picker .dates .days-of-week .day {    
    height: 36px;
    width: 36px;
}

/* Because of IE11 we have to specify every cells place in the grid */

/* Days of the week cell placement */
.days-of-week div:nth-child(1){
    -ms-grid-column: 1;
    grid-column: 1;
    -ms-grid-row: 1;
    grid-row: 1;
}

.days-of-week div:nth-child(2){
    -ms-grid-column: 2;
    grid-column: 2;
    -ms-grid-row: 1;
    grid-row: 1;
}


.days-of-week div:nth-child(3){
    -ms-grid-column: 3;
    grid-column: 3;
    -ms-grid-row: 1;
    grid-row: 1;
}


.days-of-week div:nth-child(4){
    -ms-grid-column: 4;
    grid-column: 4;
    -ms-grid-row: 1;
    grid-row: 1;
}


.days-of-week div:nth-child(5){
    -ms-grid-column: 5;
    grid-column: 5;
    -ms-grid-row: 1;
    grid-row: 1;
}

.days-of-week div:nth-child(6){
    -ms-grid-column: 6;
    grid-column: 6;
    -ms-grid-row: 1;
    grid-row: 1;
}


.days-of-week div:nth-child(7){
    -ms-grid-column: 7;
    grid-column: 7;
    -ms-grid-row: 1;
    grid-row: 1;
}


/* Day cell placement */
/* Row one */
.days div:nth-child(1){
    -ms-grid-column: 1;
    grid-column: 1;
    -ms-grid-row: 1;
    grid-row: 1;
}

.days div:nth-child(2){
    -ms-grid-column: 2;
    grid-column: 2;
    -ms-grid-row: 1;
    grid-row: 1;
}

.days div:nth-child(3){
    -ms-grid-column: 3;
    grid-column: 3;
    -ms-grid-row: 1;
    grid-row: 1;
}

.days div:nth-child(4){
    -ms-grid-column: 4;
    grid-column: 4;
    -ms-grid-row: 1;
    grid-row: 1;
}

.days div:nth-child(5){
    -ms-grid-column: 5;
    grid-column: 5;
    -ms-grid-row: 1;
    grid-row: 1;
}

.days div:nth-child(6){
    -ms-grid-column: 6;
    grid-column: 6;
    -ms-grid-row: 1;
    grid-row: 1;
}

.days div:nth-child(7){
    -ms-grid-column: 7;
    grid-column: 7;
    -ms-grid-row: 1;
    grid-row: 1;
}

/* Row two */
.days div:nth-child(8){
    -ms-grid-column: 1;
    grid-column: 1;
    -ms-grid-row: 2;
    grid-row: 2;
}

.days div:nth-child(9){
    -ms-grid-column: 2;
    grid-column: 2;
    -ms-grid-row: 2;
    grid-row: 2;
}

.days div:nth-child(10){
    -ms-grid-column: 3;
    grid-column: 3;
    -ms-grid-row: 2;
    grid-row: 2;
}

.days div:nth-child(11){
    -ms-grid-column: 4;
    grid-column: 4;
    -ms-grid-row: 2;
    grid-row: 2;
}

.days div:nth-child(12){
    -ms-grid-column: 5;
    grid-column: 5;
    -ms-grid-row: 2;
    grid-row: 2;
}

.days div:nth-child(13){
    -ms-grid-column: 6;
    grid-column: 6;
    -ms-grid-row: 2;
    grid-row: 2;
}

.days div:nth-child(14){
    -ms-grid-column: 7;
    grid-column: 7;
    -ms-grid-row: 2;
    grid-row: 2;
}

/* Row three */
.days div:nth-child(15){
    -ms-grid-column: 1;
    grid-column: 1;
      -ms-grid-row: 3;
    grid-row: 3;
}

.days div:nth-child(16){
    -ms-grid-column: 2;
    grid-column: 2;
      -ms-grid-row: 3;
    grid-row: 3;
}

.days div:nth-child(17){
    -ms-grid-column: 3;
    grid-column: 3;
      -ms-grid-row: 3;
    grid-row: 3;
}

.days div:nth-child(18){
    -ms-grid-column: 4;
    grid-column: 4;
      -ms-grid-row: 3;
    grid-row: 3;
}

.days div:nth-child(19){
    -ms-grid-column: 5;
    grid-column: 5;
      -ms-grid-row: 3;
    grid-row: 3;
}

.days div:nth-child(20){
    -ms-grid-column: 6;
    grid-column: 6;
      -ms-grid-row: 3;
    grid-row: 3;
}

.days div:nth-child(21){
    -ms-grid-column: 7;
    grid-column: 7;
      -ms-grid-row: 3;
    grid-row: 3;
}

/* Row four */
.days div:nth-child(22){
    -ms-grid-column: 1;
    grid-column: 1;
        -ms-grid-row: 4;
    grid-row: 4;
}

.days div:nth-child(23){
    -ms-grid-column: 2;
    grid-column: 2;
        -ms-grid-row: 4;
    grid-row: 4;
}

.days div:nth-child(24){
    -ms-grid-column: 3;
    grid-column: 3;
        -ms-grid-row: 4;
    grid-row: 4;
}

.days div:nth-child(25){
    -ms-grid-column: 4;
    grid-column: 4;
        -ms-grid-row: 4;
    grid-row: 4;
}

.days div:nth-child(26){
    -ms-grid-column: 5;
    grid-column: 5;
        -ms-grid-row: 4;
    grid-row: 4;
}

.days div:nth-child(27){
    -ms-grid-column: 6;
    grid-column: 6;
        -ms-grid-row: 4;
    grid-row: 4;
}

.days div:nth-child(28){
    -ms-grid-column: 7;
    grid-column: 7;
        -ms-grid-row: 4;
    grid-row: 4;
}

/* Row five */
.days div:nth-child(29){
    -ms-grid-column: 1;
    grid-column: 1;
        -ms-grid-row: 5;
    grid-row: 5;
}

.days div:nth-child(30){
    -ms-grid-column: 2;
    grid-column: 2;
        -ms-grid-row: 5;
    grid-row: 5;
}

.days div:nth-child(31){
    -ms-grid-column: 3;
    grid-column: 3;
        -ms-grid-row: 5;
    grid-row: 5;
}

.days div:nth-child(32){
    -ms-grid-column: 4;
    grid-column: 4;
        -ms-grid-row: 5;
    grid-row: 5;
}

.days div:nth-child(33){
    -ms-grid-column: 5;
    grid-column: 5;
        -ms-grid-row: 5;
    grid-row: 5;
}

.days div:nth-child(34){
    -ms-grid-column: 6;
    grid-column: 6;
        -ms-grid-row: 5;
    grid-row: 5;
}

.days div:nth-child(35){
    -ms-grid-column: 7;
    grid-column: 7;
        -ms-grid-row: 5;
    grid-row: 5;
}

/* Row six */
.days div:nth-child(36){
    -ms-grid-column: 1;
    grid-column: 1;
        -ms-grid-row: 6;
    grid-row: 6;
}

.days div:nth-child(37){
    -ms-grid-column: 2;
    grid-column: 2;
        -ms-grid-row: 6;
    grid-row: 6;
}

.days div:nth-child(38){
    -ms-grid-column: 3;
    grid-column: 3;
        -ms-grid-row: 6;
    grid-row: 6;
}

.days div:nth-child(39){
    -ms-grid-column: 4;
    grid-column: 4;
        -ms-grid-row: 6;
    grid-row: 6;
}

.days div:nth-child(40){
    -ms-grid-column: 5;
    grid-column: 5;
        -ms-grid-row: 6;
    grid-row: 6;
}

.days div:nth-child(41){
    -ms-grid-column: 6;
    grid-column: 6;
        -ms-grid-row: 6;
    grid-row: 6;
}

.days div:nth-child(42){
    -ms-grid-column: 7;
    grid-column: 7;
        -ms-grid-row: 6;
    grid-row: 6;
}

0

Not the answer you're looking for? Browse other questions tagged or ask your own question.