J'ai créé un composant de niveau supérieur de bas de page collant qui enveloppe d'autres composants en lui-même:
Footer.js
//this is a higher-order component that wraps other components placing them in footer
var style = {
backgroundColor: "#F8F8F8",
borderTop: "1px solid #E7E7E7",
textAlign: "center",
padding: "20px",
position: "fixed",
left: "0",
bottom: "0",
height: "60px",
width: "100%",
};
const Footer = React.createClass({
render: function() {
return (
<div style={style}>
{this.props.children}
</div>
);
}
});
export default Footer;
Utilisation:
<Footer><Button>test</Button></Footer>
Mais il cache le contenu de la page:
Cela ressemble à un problème commun, j'ai donc cherché un peu et trouvé ce problème , où est FlexBox est recommandé pour le pied de page collant. Mais à ce demo le pied de page est tout en bas de la page, alors que j'ai besoin que le pied de page soit toujours affiché sur la page et que le contenu défile dans la zone ci-dessus (comme dans SO chat) . En plus de cela, il est conseillé de modifier tous les autres composants avec des règles de feuille de style personnalisées. Est-il possible d'obtenir ce dont j'ai besoin en utilisant uniquement le composant de pied de page pour que le code reste modulaire?
Voici une idée (lien d'exemple de bac à sable).
Incluez une div fantôme dans votre composant de pied de page qui représente la position du pied de page que les autres éléments dom respecteront (c'est-à-dire affectant le flux de page en n'étant pas position: 'fixed';
).
var style = {
backgroundColor: "#F8F8F8",
borderTop: "1px solid #E7E7E7",
textAlign: "center",
padding: "20px",
position: "fixed",
left: "0",
bottom: "0",
height: "60px",
width: "100%",
}
var phantom = {
display: 'block',
padding: '20px',
height: '60px',
width: '100%',
}
function Footer({ children }) {
return (
<div>
<div style={phantom} />
<div style={style}>
{ children }
</div>
</div>
)
}
export default Footer
Il existe un moyen beaucoup plus simple. Je crée un site de portfolio avec React, et certaines de mes pages ne sont pas très longues, donc dans certains appareils, comme Kindle fire hd par exemple, le pied de page ne collerait pas au fond. Et bien sûr, mettre cela en place de façon traditionnelle avec ne fonctionnerait pas, car le serait enveloppé là-dedans. Et nous n'en voulons pas. Voici donc ce que j'ai fait:
Dans App.js:
import React, { Component } from 'react';
import {Header} from './components/Header';
import {Main} from './components/Main';
import {Footer} from './components/Footer';
class App extends Component {
render() {
return (
<div className="App Site">
<div className="Site-content">
<div className="App-header">
<Header />
</div>
<div className="main">
<Main />
</div>
</div>
<Footer />
</div>
);
}
}
export default App;
Et puis dans _sticky-footer.css (j'utilise POSTCSS):
:root {
--space: 1.5em 0;
--space: 2em 0;
}
.Site {
display: flex;
flex-direction: column;
min-height: 100vh;
}
.Site-content {
flex: 1 0 auto;
padding: var(--space) var(--space) 0;
width: 100%;
}
.Site-content:after {
content: '\00a0';
display: block;
margin-top: var(--space);
height: 0;
visibility: hidden;
}
La solution originale pour cela a été créée par Philip Walton: https://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/
Idée beaucoup plus facile (suivant la tendance), j'ai importé à la fois bootstrap et reactstrap, utilisé la classe bootstrap fixed bottom) et une solution de contournement avec cela comme ça.
class AppFooter extends Component{
render() {
return(
<div className="fixed-bottom">
<Navbar color="dark" dark>
<Container>
<NavbarBrand>Footer</NavbarBrand>
</Container>
</Navbar>
</div>
)
}
Vous pouvez résoudre ce problème en ajoutant margin-bottom: 60px;
au body
de votre site Web. Avec le 60px
étant la hauteur de votre pied de page.
.App sera le composant principal que vous chargez sur votre racine.
Supposons que le pied de page est le dernier enfant de .App dans le flux de documents
.App {
height: 100vh;
display: flex;
flex-direction: column;
}
footer {
margin-top: auto;
}
Je voulais partager cette solution qui a fonctionné. J'ai cribté ceci depuis https://react.semantic-ui.com/modules/sticky . Faites défiler vers le bas de cette page et inspectez le texte "Ceci est le bas" pour voir où je l'ai volé. C'est un site construit sur réagir, donc cela devrait fonctionner pour votre situation.
C'est ici:
{
padding-top: 50vh;
}
Conceptuellement, cette solution crée un espace négatif comme le div fantôme de jacoballenwood pour pousser le pied de page vers le bas et le coller là-bas. Ajoutez-le simplement à votre classe de style CSS pour le pied de page et ajustez la valeur au goût.