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:
- nie jest potrzebny atrybut „for”: gdy tag LABEL zawiera dane wejściowe celu, automatycznie skupia dane potomne po kliknięciu;
- jeśli zewnętrzna etykieta dla obszaru tekstowego została już zaprojektowana, nie występują konflikty, ponieważ dane wejściowe mogą mieć jedną lub więcej etykiet.
Zobacz szczegółowe informacje na temat W3C, aby uzyskać bardziej szczegółowe informacje.
Prosty przykład:
.container {
width: 400px;
border: 3px
solid #f7c;
}
.textareaContainer {
display: block;
border: 3px solid #38c;
padding: 10px;
}
textarea {
width: 100%;
margin: 0;
padding: 0;
border-width: 0;
}
<body>
<div class="container">
I am the container
<label class="textareaContainer">
<textarea name="text">I am the padded textarea with a styled border...</textarea>
</label>
</div>
</body>
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.