@bibliotheca-dao/postcss-100vh-fix
Version:
PostCSS plugin to fix height/min-height: 100vh on iOS
93 lines (67 loc) • 2.47 kB
Markdown
<img align="right" width="135" height="95"
title="Philosopher’s stone, logo of PostCSS"
src="https://postcss.org/logo-leftp.svg">
[] plugin to fix [iOS’s bug] with `100vh`.
It works in Chrome (just `-webkit-fill-available` causes problems in Chrome
in some cases), iOS/iPad/MacOS Safari and [all other browsers].
Pure CSS solution, no JS required.
```css
body {
/* Footer will be hidden on iOS Safari because of bottom panel */
height: 100vh;
}
```
```css
body {
height: 100vh;
}
/* Avoid Chrome to see Safari hack */
@supports (-webkit-touch-callout: none) {
body {
/* The hack for Safari */
height: -webkit-fill-available;
}
}
```
<img src="https://maximilianschmitt.me/posts/css-100vh-mobile-browsers/lld-minimal-vs-normal-ui@2x.png"
alt="100vh bug illusration Max Schmitt"
title="By Max Schmitt">
It works with `min-height` and `max-height` too.
[]: https://caniuse.com/#feat=viewport-units
[]: https://allthingssmitty.com/2020/05/11/css-fix-for-100vh-in-mobile-webkit/
[]: https://github.com/postcss/postcss
<a href="https://evilmartians.com/?utm_source=postcss-dark-theme-class">
<img src="https://evilmartians.com/badges/sponsored-by-evil-martians.svg"
alt="Sponsored by Evil Martians" width="236" height="54">
</a>
Pure CSS solution is limited. For many cases you need to use JS-based hack like
[`postcss-viewport-height-correction`]:
Our hack do not work with partial height like `height: 90vh`
or `height: calc(100vh - 60px)`.
Also, we do not fix Chrome for Android bug:
<img src="https://chanind.github.io/assets/100vh_problem.png"
alt="100vh Chrome bug illusration David Chanin"
title="By David Chanin">
[`postcss-viewport-height-correction`]: https://github.com/Faisal-Manzer/postcss-viewport-height-correction
**Step 1:** Install plugin:
```sh
npm install --save-dev postcss postcss-100vh-fix
```
**Step 2:** Check you project for existed PostCSS config: `postcss.config.js`
in the project root, `"postcss"` section in `package.json`
or `postcss` in bundle config.
If you do not use PostCSS, add it according to [official docs]
and set this plugin in settings.
**Step 3:** Add the plugin to plugins list:
```diff
module.exports = {
plugins: [
+ require('postcss-100vh-fix'),
require('autoprefixer')
]
}
```
**Step 4:** Use `height: 100vh` or `min-height: 100vh` in your CSS.