Ich habe ein Containerelement, das einige andere Elemente enthält, aber je nach Bildschirmgröße sind Teile davon unerklärlicherweise an verschiedenen Stellen abgeschnitten. Sie können das Verhalten auf meinem Code-Sandbox-Link beobachten, wenn die Breite der HTML-Seite angepasst wird (durch Klicken und Ziehen). Wie kann ich sicherstellen, dass nur der Hauptcontainerrand gerendert wird und die untergeordneten Elemente keine Auswirkungen haben?
https://codesandbox.io/s/focused-tree-ms4f2
import React from "react";
import styled from "styled-components";
const StyledTextBox = styled.div`
height: 15vh;
width: 30vw;
display: flex;
flex-direction: column;
margin: 0 auto;
border: 1px solid black;
background-color: #fff;
> * {
box-sizing: border-box;
}
`;
const InputBox = styled.span`
height: 35%;
width: 100%;
display: flex;
border: none;
outline: none;
`;
const UserInput = styled.input`
height: 100%;
width: 90%;
border: none;
outline: none;
`;
const SolutionBox = styled.div`
height: 35%;
width: 100%;
border: none;
outline: none;
`;
const StyledKeyboard = styled.span`
height: 30%;
width: 100%;
position: relative;
background-color: #DCDCDC;
box-sizing: border-box;
display: flex;
`
export default function App() {
return (
<StyledTextBox>
<InputBox>
<UserInput />
</InputBox>
<SolutionBox/>
<StyledKeyboard/>
</StyledTextBox>
);
}
javascript
css
reactjs
Ratlosigkeit
quelle
quelle
Antworten:
Wie die anderen Kommentatoren kann ich den von Ihnen gemeldeten Fehler durchaus erkennen, aber es klang für mich wie ein
box-sizing
Problem. Wenn Sie das gerenderte DOM über https://k7ywy.codesandbox.io/ überprüfen, können Sie feststellen, dassbox-sizing:border-box
es nicht auf das Wrapper-Element oder die internen Elemente angewendet wird, sondern in dem Snippet behoben ist, das Sie in die Frage eingefügt haben.Ich bemerkte ein paar Dinge, die ich in Frage stellen würde.
Warum nicht
box-sizing
auf alles anwenden ? Normalerweise macht es das Leben im Umgang mitwidth:100%;
undpadding
/border
/margin
so viel einfacher!In meinem Beispiel habe ich es aus dem JS entfernt und mithilfe der CSS-Datei angewendet.
Warum verwenden Sie
display:flex
an mehreren Stellen, ohne jedoch andere flexbezogene Eigenschaften zu bewerten?Versuchen Sie, das von
const InputBox = styled.span
und zu entfernenconst StyledKeyboard = styled.span
Behebt das das Problem für Sie? Sandbox-Beispiel . Ausgabe gerendert .
quelle
Wenden Sie einfach keinen Hintergrund oder transparent auf das Eingabefeld an, um das Randproblem zu beheben
quelle
Es ist ein Problem der Boxgröße. Sie können mehr lesen hier . Ich empfehle auch, dass Sie nicht verwenden
display: flex
. Versuchen Sie vielleicht, die Hintergrundfarbe in transparent zu ändern? Hoffe das hilft!quelle
Eine schöne einfache Möglichkeit besteht darin,
box-sizing: border-box
dem übergeordneten Element etwas zu geben . Um sicher zu gehen, können Sie dies auf der Ebene der Stammkomponenten tun:quelle