2012-05-17 8 views
30

Po prostu uczę się układów płynnych CSS & responsywnego projektu i próbuję użyć wszystkich wartości procentowych bez wartości px w układzie.Układ płynów CSS: margines-góra na podstawie procentu rośnie, gdy zwiększa się szerokość kontenera

Do tej pory wygląda na to, że działa, ale w jednym miejscu widzę coś, czego się nie spodziewałem. Próbuję umieścić margines między dwoma pionowo ułożonymi elementami div, które zmieniają się w zależności od wysokości kontenera. Spodziewam się, że margines ten zmieni się, gdy zmieniam rozmiar okna w pionie, ale rośnie on również, gdy zmienisz rozmiar w poziomie, czego nie chcę. czego mi brakuje?

Oto skrzypce. Dzięki za pomoc z góry.

http://jsfiddle.net/gregir/aP5kz/

+2

jednostki Viewport CSS vw VH 1vw = 1% szerokości okienka ekranu 1vh = 1% wysokość ekranu – atilkan

Odpowiedz

50

W CSS, wszystkie cztery, a margines padding: procenty odnoszą się do szerokości... mimo że może wydawać się bezsensowne. Tak właśnie wygląda specyfikacja CSS, nic nie możesz z tym zrobić.

Czy możesz zrobić to, co chcesz, zamiast "ex" (lub "em")? W ten sposób jestem przyzwyczajony do określenia "płynnych" wartości marginesu/dopełnienia określonych ... i może to być mniej problematyczne niż wartości procentowe. (Chociaż nie mam odpowiedniego doświadczenia z pierwszej ręki, to bardzo długa precyzja obliczonych wartości procentowych ustawi Cię później na problemy z niezgodnością przeglądarki.) Mój styl polega na ograniczaniu procentów CSS do liczb całkowitych, jeśli wszystkie możliwe, lub czasami być może jedna, czasem nawet dwie cyfry po kropce dziesiętnej).

Jeśli naprawdę chcesz mieć dokładnie taką samą pustą przestrzeń pionową, która stanowi procent pojemnika, pierwszą rzeczą, która przychodzi mi do głowy jest oddzielnym pustym < div> ze specyfikacją CSS "height: nn%". A może coś, co określasz, obsługuje już rozmiary w pionie, jakie chcesz (ponieważ wyglądałoby na to, że marginesy nie zmieniają w ogóle rozmiaru pionowego).

+0

Dzięki, Chuck. Naprawdę potrzebowałem użyć wartości procentowych dla marginesów, ponieważ interfejs, który buduję, będzie się wahał bardzo szeroko, od dużych do małych, a jeśli moje duże elementy staną się bardzo małe, ale między nimi jest jeden margines, wygląda to dziwnie. W przypadku wartości o dużej precyzji podniosłem pomysł z A List Apart (http://www.alistapart.com/articles/fluid-images/) i nie planowałem używać tych w produkcji. W każdym razie Twoja sugestia: pusty div będzie działał dobrze; to jest proste/eleganckie i chciałbym, bym o tym pomyślał. Dzięki jeszcze raz! – Gregir

+0

http://stackoverflow.com/questions/11003911/why-are-margin-padding-percentages-in-css-always-calculated-against-width –

+2

@Mr. TA - Rozumiem, dlaczego specyfik jest taki, jaki jest. Jeśli procent górnego i dolnego marginesu został zmieniony na względny w stosunku do _height_, podczas gdy procenty lewego i prawego marginesu pozostały w stosunku do _width_, nie byłoby sposobu na określenie marginesów (i dopełnienia) wartościami procentowymi, ale także równe im wszystkie odwrotnie. (Jest to również podstawa dziwnego hacka CSS do utrzymania proporcji elementu.) Są to trudne wybory; weź głęboki oddech, zanim dojdziesz do wniosku, że są po prostu "wadą projektu". –

1

Tak, jest to nieoczekiwane i sprzeczne z intuicją, ale działa jako zaprojektowanego & nie mam pojęcia, dlaczego to działa, jak to robi. Zobacz margin-top percentage does not change when window height decreases

+2

dziwne. I przykro mi, że przegapiłem to wcześniej w moim wyszukiwaniu stosu. Nie mam pojęcia, jak sobie z tym poradzić, ale myślę, że lepiej będzie, jeśli wezmę swój kapelusz myślowy. Dzięki. – Gregir

Powiązane problemy