Połączone pytanie stackoverflow.com/questions/11093943/… daje interesującą, ale nie w pełni zgodną z poprzednimi wersjami odpowiedź, może też chciałbyś się temu przyjrzeć.
11684
5
Dla każdego, kto zetknie się z tym pytaniem, Chad odpowiedział, że współczesne przeglądarki obsługują width: calc(100% - 100px);to kilka odpowiedzi i mam nadzieję, że pytający zaktualizuje swoje pytanie :) :)
Znalazłem, gdy calc(100% - 6px)calc(94%)width: calc(~"100% - 6px");
używałem,
12
Uważaj, musisz mieć spacje wokół znaku -(lub +). To działa: calc(100% - 100px); A to nie działa:calc(100%-100px);
freefaller
Jestem trochę zaskoczony, że nie ma opcji automatycznego odejmowania dwukrotnego wypełnienia elementu, co zwykle byłoby dość powszechnym przypadkiem. Np. Muszę to zrobić padding: 0.25em; width: calc(100% - 2 * 0.25em - 2em);i musiałbym teraz zmienić to 0.25emw dwóch miejscach, jeśli trzeba by było zmienić.
cnst
Wielkie dzięki, chciałbym również zauważyć, że działa w przypadku dodawania: (100% + 100px)
Viktor Mellgren
99
Mogłaś zagnieździć div z margin-left: 50px;a margin-right: 50px;wewnątrz <div>z width: 100%;?
Ustawienie marginesów treści na 0, szerokość zewnętrznego pojemnika na 100% i użycie wewnętrznego pojemnika z lewym / prawym marginesem 50 pikseli wydaje się działać.
<style>
body {margin:0;padding:0;}.full-width
{width:100%;}.innerContainer
{margin:0px50px0px50px;}</style><body><divclass="full-width"style="background-color:#ff0000;"><divclass="innerContainer"style="background-color:#00ff00;">
content here
</div></div></body>
Pracując z panelami bootstrap, szukałem sposobu umieszczenia linku „usuń” w panelu nagłówka, który nie byłby zasłonięty przez długi sąsiedni element. A oto rozwiązanie:
html:
<divclass="with-right-link"><aclass="left-link"href="#">Long link header Long link header</a><aclass="right-link"href="#">Delete</a></div>
Zaczęło mi działać dopiero wtedy, gdy sprawdziłem wszystkie spacje. Więc to nie działało w ten sposób: width: calc(100%- 20px)lub calc(100%-20px)i doskonale działało width: calc(100% - 20px).
Edycja: moje rozwiązanie jest złe. Rozwiązanie opublikowane przez Arica TenEycka, sugerujące użycie elementu div o szerokości 100%, a następnie zagnieżdżenie innego elementu div przy użyciu marginesów, wydaje się bardziej poprawne.
Jeśli to zrobisz, czy nie skończysz z całkowitą szerokością wynoszącą 100% + 100 pikseli?
Adam Crume
: o (Przepraszam. Czy powinienem usunąć swój post, czy powinienem go zostawić i pozwolić głosom w dół go popchnąć?
Tina Orooji
1
głosy w dół mają zazwyczaj zachęcić Cię do uporządkowania swojego posta, abyś mógł odzyskać punkty rep utracone przez głosy negatywne. Jeśli wiesz, że Twoje rozwiązanie jest błędne, możesz je usunąć, z głosami negatywnymi lub bez, lub zaktualizować je, aby naprawić.
aleemb
@AdamCrume - Nie. Byłoby tak tylko w przypadku, gdybyś również określił width:100%. Element div automatycznie wypełni kontener, chyba że zostanie to zastąpione, np. Poprzez jawne określenie widthlub użycie floatpozycjonowania bezwzględnego lub. Dodanie marginesu do elementu div spowoduje po prostu wypełnienie jego kontenera, pomniejszone o kwotę określoną przez margines.
gilly3
@aleemb - w tym przypadku głosy przeciw są użytkownikom, którzy nie rozumieją CSS, ponieważ ta odpowiedź jest całkowicie poprawna.
gilly3
1
Wypełnienie na zewnętrznej stronie div zapewni pożądany efekt.
Istnieją 2 techniki, które mogą się przydać w tym typowym scenariuszu. Każdy ma swoje wady, ale oba mogą być czasami przydatne.
box-sizing: border-box zawiera dopełnienie i szerokość obramowania na szerokość elementu. Na przykład, jeśli ustawisz szerokość elementu div z dopełnieniem 20 pikseli, 20 pikseli i obramowaniem 1 piks.
.bb{-webkit-box-sizing: border-box;/* Safari/Chrome, other WebKit */-moz-box-sizing: border-box;/* Firefox, other Gecko */
box-sizing: border-box;
width:100%;
height:200px;
padding:50px;}
Żadne z nich nie są oczywiście doskonałe, rozmiar pola nie pasuje do pytania, ponieważ element ma w rzeczywistości 100% szerokości, a nie 100% - 100 pikseli (jakkolwiek element podrzędny byłby). Pozycjonowanie bezwzględne zdecydowanie nie może być używane w każdej sytuacji, ale zwykle jest w porządku, o ile jest ustawiona wysokość nadrzędna.
CSS nie może służyć do animacji ani modyfikacji stylu wydarzeń.
Jedynym sposobem jest użycie funkcji javascript, która zwróci szerokość danego elementu, a następnie odejmie od niego 100px i ustawi nowy rozmiar szerokości.
Zakładając, że używasz jQuery, możesz zrobić coś takiego:
Możesz przyjrzeć się użyciu LESS , czyli pliku JavaScript, który wstępnie przetwarza CSS, dzięki czemu możesz dołączyć logikę i zmienne do swojego CSS. Więc na przykład w LESS napisałbyś, width: 100% - 100px;aby osiągnąć dokładnie to, czego chciałeś :)
Czy mógłbyś dodać wyjaśnienie do swojej odpowiedzi?
Michał Perłakowski
Próbowałem: calc (100% -100px) i wyniki nie są spójne na wszystkich platformach / przeglądarkach, potem próbowałem naprawdę uprościć i użyłem margin-right: 100px; szerokość: auto; i zadziałało ...
user1552559
calc to komponent CSS3 i ten css będzie działał na tych przeglądarkach, które obsługują CSS3.
Sushan
-2
Krótka odpowiedź brzmi: NIE Rób tego w CSS. Internet Explorer obsługuje coś, co nazywa się wyrażeniami CSS, ale nie jest to standardowe i zdecydowanie nie jest obsługiwane przez inne przeglądarki, na przykład FireFox.
Tak, chyba będę musiał zachować to w javascript, refraktoryzuję jakiś kod i chciałem usunąć javascript, który robił to tks.
fmsf
1
Proszę jeśli można uniknąć to nie rób tego w JavaScript. HTML + CSS może być trudny, a rozwiązanie może nie być oczywiste, ale prawdopodobnie może zrobić prawie wszystko, czego potrzebujesz. Używanie JavaScript do układów statycznych jest prawie zawsze złym pomysłem.
width: calc(100% - 100px);
to kilka odpowiedzi i mam nadzieję, że pytający zaktualizuje swoje pytanie :) :)Odpowiedzi:
Nowoczesne przeglądarki obsługują teraz:
Aby zobaczyć listę obsługiwanych wersji przeglądarek, sprawdź: Czy mogę użyć funkcji calc () jako wartości jednostki CSS?
Istnieje zapasowe rozwiązanie jQuery: css width: calc (100% -100px); alternatywne użycie jquery
źródło
calc(100% - 6px)
calc(94%)
width: calc(~"100% - 6px");
-
(lub+
). To działa:calc(100% - 100px);
A to nie działa:calc(100%-100px);
padding: 0.25em; width: calc(100% - 2 * 0.25em - 2em);
i musiałbym teraz zmienić to0.25em
w dwóch miejscach, jeśli trzeba by było zmienić.Mogłaś zagnieździć div z
margin-left: 50px;
amargin-right: 50px;
wewnątrz<div>
zwidth: 100%;
?źródło
Możesz spróbować tego ...
vw: szerokość rzutni
vh: wysokość rzutni
źródło
calc(100% - 6px)
calc(94%)
width: calc(~"100% - 6px");
mój kod i działa dla IE6:
źródło
Musisz mieć kontener na swój element div zawartości, który ma mieć 100% - 100 pikseli
Może być konieczne dodanie czyszczącego elementu div tuż przed ostatnim,
</div>
jeśli element div zawartości jest przepełniony.źródło
Ustawienie marginesów treści na 0, szerokość zewnętrznego pojemnika na 100% i użycie wewnętrznego pojemnika z lewym / prawym marginesem 50 pikseli wydaje się działać.
źródło
Pracując z panelami bootstrap, szukałem sposobu umieszczenia linku „usuń” w panelu nagłówka, który nie byłby zasłonięty przez długi sąsiedni element. A oto rozwiązanie:
html:
css:
Oczywiście możesz modyfikować wartości „top” i „right” zgodnie z własnymi wcięciami. Źródło
źródło
Zaczęło mi działać dopiero wtedy, gdy sprawdziłem wszystkie spacje. Więc to nie działało w ten sposób:
width: calc(100%- 20px)
lubcalc(100%-20px)
i doskonale działałowidth: calc(100% - 20px)
.źródło
Czy mógłbyś zrobić:
Edycja: moje rozwiązanie jest złe. Rozwiązanie opublikowane przez Arica TenEycka, sugerujące użycie elementu div o szerokości 100%, a następnie zagnieżdżenie innego elementu div przy użyciu marginesów, wydaje się bardziej poprawne.
źródło
width:100%
. Element div automatycznie wypełni kontener, chyba że zostanie to zastąpione, np. Poprzez jawne określeniewidth
lub użyciefloat
pozycjonowania bezwzględnego lub. Dodanie marginesu do elementu div spowoduje po prostu wypełnienie jego kontenera, pomniejszone o kwotę określoną przez margines.Wypełnienie na zewnętrznej stronie div zapewni pożądany efekt.
źródło
Istnieją 2 techniki, które mogą się przydać w tym typowym scenariuszu. Każdy ma swoje wady, ale oba mogą być czasami przydatne.
box-sizing: border-box zawiera dopełnienie i szerokość obramowania na szerokość elementu. Na przykład, jeśli ustawisz szerokość elementu div z dopełnieniem 20 pikseli, 20 pikseli i obramowaniem 1 piks.
Oto doskonały artykuł na ten temat: http://css-tricks.com/box-sizing/ i tutaj jest skrzypce http://jsfiddle.net/L3Rvw/
Jest też pozycja: absolutna
http://jsfiddle.net/Mw9CT/1/
Żadne z nich nie są oczywiście doskonałe, rozmiar pola nie pasuje do pytania, ponieważ element ma w rzeczywistości 100% szerokości, a nie 100% - 100 pikseli (jakkolwiek element podrzędny byłby). Pozycjonowanie bezwzględne zdecydowanie nie może być używane w każdej sytuacji, ale zwykle jest w porządku, o ile jest ustawiona wysokość nadrzędna.
źródło
CSS nie może służyć do animacji ani modyfikacji stylu wydarzeń.
Jedynym sposobem jest użycie funkcji javascript, która zwróci szerokość danego elementu, a następnie odejmie od niego 100px i ustawi nowy rozmiar szerokości.
Zakładając, że używasz jQuery, możesz zrobić coś takiego:
I z natywnym javascriptem:
Zakładamy, że masz ustawiony styl css na 100%;
źródło
Czy używasz trybu standardowego? Myślę, że to rozwiązanie zależy od tego.
Jeśli próbujesz utworzyć dwie kolumny, możesz zrobić coś takiego:
Następnie użyj CSS do stylizacji:
Jeśli nie chcesz dwóch kolumn, prawdopodobnie możesz je usunąć
<div id="left">
źródło
źródło
Możesz przyjrzeć się użyciu LESS , czyli pliku JavaScript, który wstępnie przetwarza CSS, dzięki czemu możesz dołączyć logikę i zmienne do swojego CSS. Więc na przykład w LESS napisałbyś,
width: 100% - 100px;
aby osiągnąć dokładnie to, czego chciałeś :)źródło
Nie możesz.
Możesz jednak użyć marginesów, aby uzyskać ten sam wynik.
źródło
To działa:
źródło
Krótka odpowiedź brzmi: NIE Rób tego w CSS. Internet Explorer obsługuje coś, co nazywa się wyrażeniami CSS, ale nie jest to standardowe i zdecydowanie nie jest obsługiwane przez inne przeglądarki, na przykład FireFox.
Lepiej byłoby zrobić to w JavaScript.
źródło