Проблема с форматированием Bootstrap / flask

#flask #bootstrap-4

#flask #bootstrap-4

Вопрос:

Я создал веб-сайт на основе flask, используя платформу Bootstrap. Вдохновением для этого выбора послужил сериал Кори Шафера на YouTube. Проблема, с которой я сталкиваюсь, связана с моим желанием иметь широкие таблицы данных, которые доступны пользователю, при соблюдении ценности, которую Bootstrap привносит в поддержку различных шаблонов устройств.

Однако, как вы увидите, я не совсем уверен, «какие рычаги использовать» для достижения моей цели. Например, мой рабочий стол может отображать более широкие представления таблицы, но что-то ограничивает это измерение, о чем свидетельствует пустое пространство справа.

Для рабочего стола

Когда я пытаюсь уменьшить размер шрифта, это работает для таблицы в версии для Ipad, но должен быть лучший способ пропорционально масштабировать весь текст.

версия для ipad

И, наконец, iphone. К счастью, похоже, что это версия, которая работает лучше всего, поскольку я могу наиболее легко изменять масштаб на нужном устройстве (а прокрутка в таблице дает очень «контролируемое» ощущение).

версия для iphone

Вот мой CSS-код:

 body {
  background: #fafafa;
  color: #333333;
  margin-top: 5rem;
  max-width: 105%;
}

h1, h2, h3, h4, h5, h6 {
  color: #444444;
}

.bg-steel {
  background-color: #5f788a;
}

.site-header .navbar-nav .nav-link {
  color: #cbd5db;
}

.site-header .navbar-nav .nav-link:hover {
  color: #ffffff;
}

.site-header .navbar-nav .nav-link.active {
  font-weight: 500;
}

.content-section {
  background: #ffffff;
  padding: 2px 5px;
  border: 1px solid #dddddd;
  border-radius: 3px;
  margin-bottom: 20px;
}

.article-title {
  color: #444444;
}

.article-title:hover {
  color: #428bca;
  text-decoration: none;
}

.article-content {
  white-space: pre-line;
}

.article-img {
  height: 65px;
  width: 65px;
  margin-right: 16px;
}

.article-metadata {
  padding-bottom: 1px;
  margin-bottom: 4px;
  border-bottom: 1px solid #e3e3e3
}

.article-metadata a:hover {
  color: #333;
  text-decoration: none;
}

.article-svg {
  width: 25px;
  height: 25px;
  vertical-align: middle;
}

.account-img {
  height: 125px;
  width: 125px;
  margin-right: 20px;
  margin-bottom: 16px;
}

.account-heading {
  font-size: 2.5rem;
}

.loader {
  border: 16px solid #f3f3f3; /* Light grey */
  border-top: 16px solid #3498db; /* Blue */
  border-radius: 50%;
  width: 120px;
  height: 120px;
  animation: spin 2s linear infinite;
}

.table-condensed{
  font-size: 8px;
}
  

Вот мой html-код, относящийся к тому, что отображается:

 <div class="content-section">
    <form method="POST" action="" enctype="multipart/form-data">
        {{ form.hidden_tag() }}
        <fieldset class="form-group">
            <legend class="border-bottom mb-4">{{ legend }}</legend>
                <div class="btn-group-vertical" onclick="loading();">
                    {{ form.submit_autopull(class="btn btn-outline-primary") }}
                    {{ form.submit_autobren(class="btn btn-outline-primary") }}
                    {{ form.submit_autotang(class="btn btn-outline-primary") }}
                </div>
                <h6> </h6>
                <h6>This process can take 5 minutes for a large clan to compile and score games.</h6>
                <h6> </h6>

        </fieldset>
        {% if dataToShow == 1 %}
        <fieldset class="form-group">
            <legend class="border-bottom mb-4">{{ legend2 }}</legend>
            <div class="table-responsive table-condensed">
                 <table class="table">{{ form.clanStats | safe }}</table>
            </div>
        </fieldset>
        <fieldset class="form-group">
            <legend class="border-bottom mb-4">{{ legend3 }}</legend>
            <div class="media-body row flex-row flex-nowrap">
                <p class="article-content">{{ form.quartStats | safe }}</p>
            </div>
        </fieldset>

        <h6>Note: Results shown only for ladder games and experience levels 12 or greater.</h6>
        {% endif %}
    </form>
</div>
  

Любая помощь, которая может быть предложена, чтобы помочь мне понять взаимодействие между компонентами, очень ценится!

Ответ №1:

Я предлагаю использовать D3 для адаптивной таблицы. Я добавил пример ниже. Я надеюсь, что это решит вашу проблему. Дай мне знать, если все в порядке или нужно что-нибудь еще. Спасибо

         data = [
        {
        "First Name": "James",
        "Last Name": "Matman",
        "Job Title": "Chief Sandwich Eater",
        "Favorite Color": "Lettuce Green",
        "Wars or Trek?": "Trek",
        "Date of Birth": "January 13, 1979",
        "Dream Vacation City": "Gotham City",
        "GPA": "3.1",
        "Arbitrary Data": "RBX-12"
        },
        {
        "First Name": "The",
        "Last Name": "Tick",
        "Job Title": "Crimefighter Sorta",
        "Favorite Color": "Blue",
        "Wars or Trek?": "Wars",
        "Date of Birth": "July 19, 1968",
        "Dream Vacation City": "Athens",
        "GPA": "N/A",
        "Arbitrary Data": "Edlund, Ben (July 1996)."
        },
        {
        "First Name": "Jokey",
        "Last Name": "Smurf",
        "Job Title": "Giving Exploding Presents",
        "Favorite Color": "Smurflow",
        "Wars or Trek?": "Smurf",
        "Date of Birth": "Smurfuary Smurfteenth, 1945",
        "Dream Vacation City": "New Smurf City",
        "GPA": "4.Smurf",
        "Arbitrary Data": "One"
        },
        {
        "First Name": "Cindy",
        "Last Name": "Beyler",
        "Job Title": "Sales Representative",
        "Favorite Color": "Red",
        "Wars or Trek?": "Wars",
        "Date of Birth": "July 5, 1956",
        "Dream Vacation City": "Paris",
        "GPA": "3.4",
        "Arbitrary Data": "3451"
        },
        {
        "First Name": "Captain",
        "Last Name": "Cool",
        "Job Title": "Tree Crusher",
        "Favorite Color": "Blue",
        "Wars or Trek?": "Wars",
        "Date of Birth": "December 13, 1982",
        "Dream Vacation City": "Las Vegas",
        "GPA": "1.9",
        "Arbitrary Data": "Under the couch"
        }
        ]
        
        
        
        var sortAscending = true;
        var table = d3.select('#page-wrap').append('table');
        var titles = d3.keys(data[0]);
        var headers = table.append('thead').append('tr')
        .selectAll('th')
        .data(titles).enter()
        .append('th')
        .text(function (d) {
        return d;
        })
        .on('click', function (d) {
        headers.attr('class', 'header');
        
        if (sortAscending) {
        rows.sort(function (a, b) { return b[d] < a[d]; }); sortAscending=false; this.className='aes' ; } else {
            rows.sort(function (a, b) { return b[d]> a[d]; });
            sortAscending = true;
            this.className = 'des';
            }
        
            });
        
            var rows = table.append('tbody').selectAll('tr')
            .data(data).enter()
            .append('tr');
            rows.selectAll('td')
            .data(function (d) {
            return titles.map(function (k) {
            return { 'value': d[k], 'name': k };
            });
            }).enter()
            .append('td')
            .attr('data-th', function (d) {
            return d.name;
            })
            .text(function (d) {
            return d.value;
            });  
 * {
            margin: 0;
            padding: 0;
        }

        body {
            font: 14px/1.4 Georgia, Serif;
        }

        #page-wrap {
            margin: 50px;
        }

        p {
            margin: 20px 0;
        }

        /* 
    Generic Styling, for Desktops/Laptops 
    */
        table {
            width: 100%;
            border-collapse: collapse;
        }

        /* Zebra striping */
        tr:nth-of-type(odd) {
            background: #eee;
        }

        th {
            background: #333;
            color: white;
            font-weight: bold;
            cursor: s-resize;
            background-repeat: no-repeat;
            background-position: 3% center;
        }

        td,
        th {
            padding: 6px;
            border: 1px solid #ccc;
            text-align: left;
        }

        th.des:after {
            content: "21E9";
        }

        th.aes:after {
            content: "21E7";
        }

        /* 
    Max width before this PARTICULAR table gets nasty
    This query will take effect for any screen smaller than 760px
    and also iPads specifically.
    */
        @media only screen and (max-width: 760px),
        (min-device-width: 768px) and (max-device-width: 1024px) {

            /* Force table to not be like tables anymore */
            table,
            thead,
            tbody,
            th,
            td,
            tr {
                display: block;
            }

            /* Hide table headers (but not display: none;, for accessibility) */
            thead tr {
                position: absolute;
                top: -9999px;
                left: -9999px;
            }

            tr {
                border: 1px solid #ccc;
            }

            td {
                /* Behave  like a "row" */
                border: none;
                border-bottom: 1px solid #eee;
                position: relative;
                padding-left: 50%;
            }

            td:before {
                /* Now like a table header */
                position: absolute;
                /* Top/left values mimic padding */
                top: 6px;
                left: 6px;
                width: 45%;
                padding-right: 10px;
                white-space: nowrap;
            }

            /*
        Label the data
        */
            td:before {
                content: attr(data-th) ": ";
                font-weight: bold;
                width: 6.5em;
                display: inline-block;
            }
        }

        /* Smartphones (portrait and landscape) ----------- */
        @media only screen and (min-device-width : 320px) and (max-device-width : 480px) {
            body {
                padding: 0;
                margin: 0;
                width: 320px;
            }
        }

        /* iPads (portrait and landscape) ----------- */
        @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
            body {
                width: 495px;
            }
        }  
     <div id="page-wrap"></div>
    <script type="text/javascript" src="https://d3js.org/d3.v3.min.js"></script>