Mam element kontenerowy, który zawiera kilka innych elementów, ale w zależności od rozmiaru ekranu ich części są niewytłumaczalnie odcinane w różnych częściach. Możesz obserwować zachowanie mojego linku do piaskownicy kodu, gdy szerokość strony HTML jest dostosowywana (poprzez kliknięcie i przeciągnięcie). Jak mogę się upewnić, że renderowana jest tylko główna granica kontenera i że elementy potomne nie mają żadnego wpływu?
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
Zakłopotany
źródło
źródło
Odpowiedzi:
Podobnie jak inni komentatorzy, całkiem dobrze rozumiem zgłaszany błąd, ale dla mnie to brzmiało jak
box-sizing
problem. Podczas przeglądania renderowanego modelu DOM za pośrednictwem https://k7ywy.codesandbox.io/ możemy zobaczyć,box-sizing:border-box
że nie jest on stosowany do elementu opakowania ani elementów wewnętrznych, ale jest ustalony we fragmencie wklejonym w pytaniu.Zauważyłem kilka rzeczy, które zadałbym.
Dlaczego nie zastosować
box-sizing
do wszystkiego? Zwykle, gdy masz do czynienia zwidth:100%;
ipadding
/border
/margin
, życie jest o wiele łatwiejsze!W moim przykładzie usunąłem go z JS i zastosowałem przy użyciu pliku CSS.
Dlaczego używasz
display:flex
w wielu miejscach, ale nie zakładasz żadnych innych właściwości związanych z flexem?Spróbuj usunąć to z
const InputBox = styled.span
iconst StyledKeyboard = styled.span
Czy to dla ciebie to rozwiązuje? Przykład piaskownicy . Renderowane dane wyjściowe .
źródło
Po prostu zastosuj brak tła lub transparent do pola wprowadzania, a to rozwiąże problem z ramką
źródło
To kwestia zmiany rozmiaru pudełka. Możesz przeczytać więcej tutaj . Polecam również nie używać
display: flex
. Może spróbuj zmienić kolor tła na przezroczysty? Mam nadzieję że to pomoże!źródło
Łatwym łatwym sposobem jest podanie
box-sizing: border-box
elementu nadrzędnego. Aby być bezpiecznym, możesz to zrobić na poziomie składnika głównego:źródło