Rozmiar ulotki Mapa wewnątrz paska startowego


11

Próbowałem zmienić wysokość mojej mapy ulotki na wartość procentową wewnątrz bootstrapu, ale za każdym razem mapa nie będzie rysować. Dlatego zawsze muszę wracać do wartości px. Jestem prawie pewien, że to proste ustawienie, którego mi brakuje, ponieważ jestem nowicjuszem w CSS. Oto mój css.

<style type="text/css">
  body {
    padding-top: 60px;
    padding-bottom: 40px;
  }
  #map {
    height: 75%;
  }
</style>

3
podaj więcej informacji: jak wygląda twój znacznik? Czy możesz podać minimalny przykład pokazujący problem?
atlefren

Odpowiedzi:


12

Zawsze miałem problemy z wysokością mapy podczas ładowania, ponieważ margines u góry może być inny, gdy szerokość mapy zmienia się, aby uzyskać 100% wysokości (ale z paskiem nawigacyjnym u góry).

var mapmargin = 50;
$('#map').css("height", ($(window).height() - mapmargin));
$(window).on("resize", resize);
resize();
function resize(){

    if($(window).width()>=980){
        $('#map').css("height", ($(window).height() - mapmargin));    
        $('#map').css("margin-top",50);
    }else{
        $('#map').css("height", ($(window).height() - (mapmargin+12)));    
        $('#map').css("margin-top",-21);
    }

}

co jest brzydkie, ale wykonuje pracę.


6

[AKTUALIZACJA 2020]

Od 2020/02/23 Flexbox obsługuje 95% przeglądarki i jest świetną opcją, aby ulotka reagowała przy użyciu właściwości flex-grow.

Zobacz prezentację CodePen tutaj

Jest skonfigurowany tak, aby nadal wyświetlał się w przeglądarkach, które nie obsługują Flexbox, tylko ci użytkownicy będą musieli przewijać abit

¯ \ _ (ツ) _ / ¯

================================================== ==========

[STARY POST]

To zadziałało dla mnie.

Uwaga: chciałem, aby moja mapa nie miała 100% szerokości na dużych ekranach, więc dodałem

.container{max-width:60em;} /* Remove for full screen */

HTML

<div id="map-holder">
  <div class="container fill">
    <div id="map"></div>
  </div>
</div>

CSS

#map
{
    width: 100px;
    height:100px;
    min-height: 100%;
    min-width: 100%;
    display: block;
}

html, body
{
    height: 100%;
}

#map-holder{
    height: 100%;
}

.fill
{
    min-height: 100%;
    height: 100%;
    width: 100%;
    max-width: 100%;
}

.container{
    max-width:60em;
    padding: 0.2em;
}

1
pracował dla mnie. właściwie najlepsza odpowiedź w ogóle
g07kore

5

Problem polega na tym, #mapże elementy potomne bodymogą określać procentowe wysokości elementów potomnych tylko wtedy, gdy ich rodzic ma wyraźnie określoną wysokość.

<style type="text/css">
    body {
        padding-top: 60px;
        padding-bottom: 40px;
        height: 480px;
        }
    #map {
        height: 75%;
        }
</style>

Spowoduje to utworzenie pożądanego efektu, ale powierzchnia użytkowa nigdy nie wzrośnie powyżej 75% z 480 pikseli. Zwykle divzawija się, gdy nie ma treści, ale z Ulotką, nawet jeśli twoja mapa jest w środku, nie divjest obliczana przy renderowaniu, dlatego zwalnia podczas renderowania. Jeśli chcesz, aby treść zajmowała całą przestrzeń pionową, możesz zapytać o rozmiar okna przy ładowaniu strony za pomocą javascript i ustawić wysokość w ten sposób.


3

Po prostu dodaj a height:100%do tagów htmli body, aby miały określoną wysokość i mogły być używane jako odniesienie i powinno działać.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Height sample</title>
<style type="text/css">
    html, body { 
        height:100%
    }
    #map {
        margin: 1em auto;
        height:70%;
        border: 2px dashed black;
    }                                                                                                                                                                                                            
</style>
</head>
<body>
    <h1>The map</h1>
    <div id="map"></div>
</body>
</html>

Bibliografia:


1
To jest odpowiednie rozwiązanie.
George Silva

1

Ostrzeżenie! Po przetestowaniu w różnych przeglądarkach dowiedziałem się, że moja odpowiedź poniżej działa tylko dla mnie w Chrome, a nie w Firefox


Miałem ten sam problem i naprawiłem to za pomocą display: table na głównym div i display table-cell na każdym div dzięki tej odpowiedzi na stackoverflow :

<div class="container body-container">

  <div class="col-md-6 side-container">
    <p>some stuff to</p>
    <p>fill the</p>
    <p>first colum</p>      
  </div><!-- /other column -->
  <div class="col-md-6 side-container">
    <div id="map"></div>
  </div><!-- /leaflet column -->
</div><!-- /container -->

I css:

.body-container {
    display: table;
}
.side-container {
  float: none;
  display: table-cell;
  height:0;
}
#map {
    height: 100%;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.