Renderowany jest następujący fragment kodu CSS i HTML.
textarea
{
border:1px solid #999999;
width:100%;
margin:5px 0;
padding:3px;
}
<div style="display: block;" id="rulesformitem" class="formitem">
<label for="rules" id="ruleslabel">Rules:</label>
<textarea cols="2" rows="10" id="rules"/>
</div>
Problem polega na tym, że obszar tekstowy jest o 8px szerszy (2px dla ramki + 6px dla wypełnienia) niż element nadrzędny. Czy istnieje sposób, aby nadal używać ramki i wypełnienia, ale ograniczyć całkowity rozmiar textarea
do szerokości elementu nadrzędnego?
html
css
stylesheet
Eric Schoonover
źródło
źródło
Odpowiedzi:
Dlaczego nie zapomnieć o włamaniach i po prostu zrobić to za pomocą CSS?
Z którego często korzystam:
Zobacz obsługę przeglądarki tutaj .
źródło
Odpowiedzią na wiele problemów z formatowaniem CSS wydaje się być „dodaj kolejny <div>!”
Czy w tym duchu próbowałeś dodać div otoki, do którego zastosowano obramowanie / wypełnienie, a następnie umieścić w nim obszar tekstowy o szerokości 100%? Coś w stylu (niesprawdzone):
źródło
rozważmy ostateczny wynik uzyskany dla użytkownika tego, co chcemy osiągnąć: wypełniony obszar tekstowy zarówno z ramką, jak i wypełnienie, których cechami jest to, że po kliknięciu przenoszą one fokus na nasz obszar tekstowy, a zaletą jest automatyczna 100% szerokość typowe dla elementów blokowych.
Moim zdaniem najlepsze podejście polega na wykorzystaniu w miarę możliwości rozwiązań niskiego poziomu, aby osiągnąć maksymalną obsługę przeglądarek. W takim przypadku jedyny HTML mógłby działać dobrze, unikając korzystania z Javascript (który tak czy inaczej wszyscy kochamy).
Tag LABEL jest dostępny w naszej pomocy, ponieważ ma takie zachowanie i może zawierać elementy wejściowe, do których musi się odnosić. Jego domyślnym stylem jest jeden z elementów wbudowanych, więc nadając etykiecie styl wyświetlania bloków, możemy skorzystać z automatycznej 100% szerokości, w tym wypełnienia i obramowań, podczas gdy wewnętrzny obszar tekstowy nie ma obramowania, wypełnienia i 100% szerokości .
Patrząc na specyfikę W3C możemy zauważyć inne zalety:
Zobacz szczegółowe informacje na temat W3C, aby uzyskać bardziej szczegółowe informacje.
Prosty przykład:
Wypełnienie i ramka elementów .textareaContainer to te, które chcemy nadać obszarowi tekstowemu. Spróbuj je edytować, aby stylizować go tak, jak chcesz. Dałem duże i widoczne wypełnienie i obramowania elementowi .textareaContainer, aby umożliwić ich zachowanie po kliknięciu.
źródło
Jeśli nie przeszkadza ci szerokość wypełnienia, to rozwiązanie utrzyma wypełnienie również w procentach.
Nie idealnie, ale dostaniesz trochę wypełnienia, a szerokość dodaje się do 100%, więc wszystko jest dobrze
źródło
Natrafiłem tutaj na inne rozwiązanie które jest tak proste: dodaj padding-prawo do kontenera textarea. Dzięki temu margines, obramowanie i wypełnienie pola tekstowego zostają usunięte, co pozwala uniknąć problemu wskazanego przez Becka na temat podświetlenia fokusa, które chrom i safari umieszczają wokół obszaru tekstowego.
Prawa dopełnienie kontenera powinna być sumą efektywnego marginesu, ramki i dopełnienia po obu stronach obszaru tekstowego, a także dopełnienie, które w innym przypadku może być potrzebne dla kontenera. Zatem w przypadku pierwotnego pytania:
źródło
Ten kod działa dla mnie z IE8 i Firefox
źródło
Możesz skorzystać z właściwości zmiany wielkości pudełka, jest ona obsługiwana przez wszystkie główne przeglądarki zgodne ze standardem i IE8 +. Nadal będziesz potrzebować obejścia dla IE7. Przeczytaj więcej tutaj .
źródło
Nie, nie możesz tego zrobić za pomocą CSS. To jest powód, dla którego Microsoft początkowo wprowadził inny, a może bardziej praktyczny model pudełkowy . Model pudełkowy, który ostatecznie wygrał, sprawia, że mieszanie procentów i jednostek jest niepraktyczne.
Nie sądzę, aby wyrażanie szerokości wypełnienia i obramowania w procentach elementu nadrzędnego było w porządku.
źródło
Szukałem rozwiązania do stylizacji wbudowanej zamiast rozwiązania CSS, a to najlepsze, co mogę zrobić, aby uzyskać responsywny obszar tekstowy:
źródło
Jeśli padniesz i przesuniesz w następujący sposób:
prawa strona obszaru tekstowego idealnie dopasowuje się do prawej strony pojemnika, a tekst wewnątrz obszaru tekstowego idealnie dopasowuje się do tekstu podstawowego w pojemniku ... a lewa strona obszaru tekstowego „nieco wystaje”. czasami jest ładniejsza.
źródło
Użyj właściwości zmiany rozmiaru pudełka :
To pomoże
źródło
Dla osób korzystających z Bootstrap, textarea.form-control może również powodować problemy z rozmiarem textarea. Chrome i Firefox wydają się używać różnych wysokości w następującym CSS Bootstrap:
źródło
Często naprawiam ten problem
calc()
. Po prostu dajesz obszarowi tekstowemu szerokość 100% i pewną ilość dopełnienia, ale musisz odjąć całkowitą lewą i prawą dopełnienie 100% szerokości, którą nadałeś obszarowi tekstowemu:Lub jeśli chcesz nadać obszarowi tekstowemu granicę:
źródło
Co powiesz na ujemne marże?
źródło
źródło