Создайте адаптивный макет с элементами фиксированной ширины с помощью Bootstrap 4 - PullRequest
0 голосов
/ 05 июня 2018

Я хочу создать веб-страницу, чей макет отзывчивый.Я впервые использую Bootstrap и прочитал, что он основан на структуре из 12 столбцов.

На этой веб-странице мне нужно вставить ползунок, переключатели, флажок и графики, сделанные в d3..js, некоторые из которых имеют фиксированную ширину.Например, карта имеет ширину 600 пикселей (она не может быть меньше, иначе она будет деформирована).Тепловая карта имеет переменную ширину, потому что она зависит от выбранных данных.Диаграммы с кратными кратными числами представляют собой 32 очень маленьких графика (каждый имеет размер 80x40).

То, что я хотел бы, показано на этом рисунке:

enter image description here

Я объясню лучше.Если размер экрана большой, то тепловая карта размещается с правой стороны карты (случай 1).

Если размер экрана меньше, размер контейнера карты не изменяется,контейнер тепловых карт становится меньше, и если он может содержать тепловую карту, то тепловая карта помещается рядом с картой (случай 2), в противном случае она располагается под картой (случай 3).

Это мойкод:

<body>

    <!-- YEAR SELECTOR -->
    <div id='year-selector-container'>
        <input id='year-slider' class='year-range' type='range' min='1981' max='2017' value='2016' step='1'>
        Year: <span id='year-span'>2016</span>
    </div>

    <!-- VACCINE SELECTOR -->
    <div id='vaccine-selector-container'>
        <form id='vaccine-selector'>
            <input type='radio' name='vaccine-selector' id='rb-dtp' value='DTP' checked />
            <label for='rb-dtp' title='Vaccine against diphtheria, tetanus, pertussis'>DTP</label>

            <input type='radio' name='vaccine-selector' id='rb-hib' value='HIB' />
            <label for='rb-hib' title='Vaccine against haemophilus influenzae type B'>HIB</label>

            <input type='radio' name='vaccine-selector' id='rb-mmr' value='MMR' />
            <label for='rb-mmr' title='Vaccine against measles, mumps and rubella'>MMR</label>

            <input type='radio' name='vaccine-selector' id='rb-pol' value='POL' />
            <label for='rb-pol' title='Vaccine against poliomyelitis'>POL</label>

            <input type='radio' name='vaccine-selector' id='rb-hepB' value='HEP B' />
            <label for='rb-hepB' title='Vaccine against hepatitis b'>HEP B</label>
        </form>
    </div>

    <!-- SHOW CASES OR NOT -->
    Cases: <input type='checkbox' id='showCasesOrNotId' name='showCasesOrNotName' value='ShowCasesOrNot' checked='true'>
    <label for='showCasesOrNotId'>Show reported cases</label>

    <!-- MAP -->
    <div id='map'></div>

    <!-- HEATMAP -->
    <div id="initialOrder">
        <button>Initial order</button>
    </div>
    <div id='heatmap'></div>
    <div id='sparkline'></div>

    <!-- SMALL MULTIPLES -->
    <div id='doublebar'></div>
    <div id='doubleline'></div>

    <!-- LEGEND -->
    <div id='legend-rect'></div>
    <div id='legend-circle'></div>

    <!-- PATTERN -->
    <div id='pattern'></div>

    <script src='/script/all.js' rel='script'/><{{!}}/script>
    <script src='/script/bubblemap.js' rel='script'/><{{!}}/script>
    <script src='/script/heatmap.js' rel='script'/><{{!}}/script>
    <script src='/script/smallMultiples.js' rel='script'/><{{!}}/script>
</body>

И вот результаты:

enter image description here

ЗДЕСЬ код.

Мне нужна помощь.Спасибо

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

вот что вы спрашиваете в скрипке.Вы не спросили, какие точки останова устройства вы хотели, поэтому я выбрал некоторые.Скажи мне, если ты хочешь больше подробностей.

<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,500,500i,700" rel="stylesheet">
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js"></script>
<div class="container">
    <div class="row my-4">
        <div class="col">
            <div class="jumbotron">
                <h1>Bootstrap 4 - Create a responsive layout with fixed width elements using Bootstrap 4</h1>
                <p class="lead">by djibe.</p>
                <p class="text-muted">(thx to BS4)</p>
                <p class="lead">
                    Tutorial
                </p>
                <ol>
                    <li>Just use standard Bootstrap 4 classes and layout</li>
                    <li>(You didn't precise which breakpoints you wanted to use)</li>
                    <li>The design is breaked on small devices as your fixed width exceeds their width (600px)</li>
                    <li>You'll have to use CSS3 flexboxes for the footer to be bottom attached</li>
                    <li>Et voilà</li>
                </ol>
            </div>
        </div>
    </div>
</div>

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
    <a class="navbar-brand" href="#">Navbar</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
    <div class="collapse navbar-collapse" id="navbarNav">
        <ul class="navbar-nav">
            <li class="nav-item active">
                <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Features</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Pricing</a>
            </li>
            <li class="nav-item">
                <a class="nav-link disabled" href="#">Disabled</a>
            </li>
        </ul>
    </div>
</nav>
<div class="container-fluid">
    <div class="row">
        <div class="col py-2" style="background: #D7E2BC">
            SLIDER
        </div>
    </div>
    <div class="row">
        <div class="col-sm" style="background: #ED9C53">
            <div class="custom-control custom-radio custom-control-inline">
                <input type="radio" id="customRadioInline1" name="customRadioInline1" class="custom-control-input">
                <label class="custom-control-label" for="customRadioInline1">Toggle this custom radio</label>
            </div>
            <div class="custom-control custom-radio custom-control-inline">
                <input type="radio" id="customRadioInline2" name="customRadioInline1" class="custom-control-input">
                <label class="custom-control-label" for="customRadioInline2">Or toggle this other custom radio</label>
            </div>
        </div>
        <div class="col-sm d-flex" style="background: #E07000">
            <div class="custom-control custom-checkbox m-auto">
                <input type="checkbox" class="custom-control-input" id="customCheck1">
                <label class="custom-control-label" for="customCheck1">Check this custom checkbox</label>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-auto" style="background: #B75146;">
          <div class="font-weight-bold text-uppercase text-white" style="width: 600px;height: 300px">
            MAP
          </div>
        </div>
        <div class="col" style="background: #5B89D4">
            <p class="font-weight-bold text-uppercase text-white">
                HEATMAP
            </p>
        </div>
    </div>
    <div class="row">
        <div class="col py-2 d-flex" style="background: #98CF4C">
            <div class="m-auto">
                32 small multiples
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col">
            White space
        </div>
    </div>
</div>
<footer class="bg-light">
    <div class="container-fluid">
        <div class="row">
            <div class="col py-3">
    FOOTER
            </div>
        </div>
    </div>
</footer>
0 голосов
/ 08 июня 2018

Вы можете попробовать сделать это.

Чтобы достичь того, что вы хотели, вам нужно использовать CSS @media rule .затем добавьте @media screen and (max-width: 880px), это означает, что стиль будет реализован только при размере экрана менее 880 пикселей.

@media screen and (max-width: 880px){
    
    .row #vaccine-selector-container,
    .row #showCasesOrNotDivId,
    .row #map,
    .row #heatmap{
        flex: auto;
        max-width: 100%;
    }
    
}
...