javascript - 温泉 UI - 列表调整大小

标签 javascript html css mobile onsen-ui

我正在开发一个基于 Cordova 和 Onsen UI 的移动应用程序。 我的 html 页面分为 3 个部分。第一个是聊天框,占据了屏幕的 35%。然后我有一个列表(ons-list),我想填满 40% 的屏幕,最后我有一个文本框和一个按钮,它们都填满了屏幕的 25%。

我的问题是我无法根据移动屏幕分辨率调整列表及其列表项的大小。

我的想法是我希望该应用无需滚动即可填满整个屏幕。

有什么帮助吗?谢谢

<ons-template id="Main.html">
        <ons-page id="homepage">
            <ons-navigator var="myNavigator">
                <ons-toolbar id="topBar" fixed-style>
                    <div class="center"><font size="5">Main</font></div>
                    <div class="left">
                        <ons-toolbar-button ng-click="menu.toggleMenu()"><ons-icon icon="ion-navicon" style="font-size: 32px; width: 1em;"></ons-icon></ons-toolbar-button>
                    </div>
                </ons-toolbar>

                <ul id="conversationBox" class="ChatLog"></ul>
                <script>
                    //localStorage.clear();
                    //fillConversationBox();
                </script>
                <ons-list>
                    <ons-list-header>Messages</ons-list-header>
                    <ons-list-item class="list-item-container" modifier="chevron" onclick="myNavigator.pushPage('mensagens_predefinidas1.html');">
                        <ons-row>
                            <ons-col class="colImg">
                                <img class="thumbnail img_crop" src="images/ambulance48.png">
                            </ons-col>
                            <ons-col class="text_col">
                                Item 1
                            </ons-col>
                        </ons-row>
                    </ons-list-item>
                    <ons-list-item class="list-item-container" modifier="chevron" onclick="myNavigator.pushPage('mensagens_predefinidas2.html');">
                        <ons-row>
                            <ons-col class="colImg">
                                <img class="thumbnail img_crop" src="images/police48.png">
                            </ons-col>
                            <ons-col class="text_col">
                                Item 2
                            </ons-col>
                        </ons-row>
                    </ons-list-item>
                    <ons-list-item class="list-item-container" modifier="chevron" onclick="myNavigator.pushPage('mensagens_predefinidas3.html');">
                        <ons-row>
                            <ons-col class="colImg">
                                <img class="thumbnail img_crop" src="images/firetruck48.png">
                            </ons-col>
                            <ons-col class="text_col">
                                Item 3
                            </ons-col>
                        </ons-row>
                    </ons-list-item>
                    <ons-list-item class="list-item-container" modifier="chevron" onclick="myNavigator.pushPage('minhas_mensagens.html');">
                        <ons-row>
                            <ons-col class="colImg">
                                <img src="images/mymsgs.png" class="thumbnail">
                            </ons-col>
                            <ons-col class="text_col">
                                Item4
                            </ons-col>
                        </ons-row>
                    </ons-list-item>
                </ons-list>

                <div align="center" style="margin-bottom: 2%;margin-top: 4%; position: absolute; left: 0; right: 0;bottom: 0;">
                    <textarea id="messageTxtSend" rows="3" style="resize: none" placeholder="Introduzir mensagem"></textarea>
                    <button id="btnSend" class="button button--cta">Enviar</button>
                </div>
            </ons-navigator>
        </ons-page>
    </ons-template>

最佳答案

首先,我想说的是,如果有很多单元格,让内容不可滚动并调整高度可能不是一个好主意,因为这样元素在小手机上可能变得不可读。话虽这么说,这里是解决方案:

我为你创建了一个 jsfiddle https://jsfiddle.net/philolo1/m4gdu5s0/15/ .

第一个技巧是使用 flexbox (flexbox.io/):列表的父项设置为“display:flex”,所有子项的高度都相同“flex: 1”。这是 html 文件:

<body> 
    <ons-page>
        <ons-toolbar modifier="material">
            <div class="center">Adjustable Height</div>
        </ons-toolbar>
        <div style="height: 35%; background: green;"></div>
        <ons-list  style="display: flex; flex: 1; flex-direction: column; height: 40%; background: blue;">
            <div id="container" style=" flex: 1; border: solid; border-color: white;"> 
                <ons-list-item class="myItem"> Text 1 </ons-list-item> 
            </div>
            <div id="container" style=" flex: 1; border: solid; border-color: white;"> 
                <ons-list-item class="myItem"> Text 2 </ons-list-item> 
            </div>
            <div id="container" style=" flex: 1; border: solid; border-color: white;"> 
                <ons-list-item class="myItem"> Text 3 </ons-list-item> 
            </div>
        </ons-list>
        <div style="height: 25%; background: red;"></div>
    </ons-page>
</body>

在 Javascript 中,需要更新列表项的 css 属性以将其设置为适当的高度(以及字体和其他元素)。

ons.ready(function() {
    var fontSize = parseInt($("#container").height() *0.8)+"px";
    $(".myItem").css('min-height', 0);
    $(".myItem").css('line-height', fontSize);
    $(".myItem").css('font-size', fontSize);
});

关于javascript - 温泉 UI - 列表调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34793918/

相关文章:

javascript - JQuery/JavaScript : Why does function mess up array outside function?

javascript - 使用 AngularJS 中的多个输入字段编辑分隔字符串

javascript - 如何CSS嵌套div来影响外部外部div?

javascript - 单击两次会产生两个 onClick 事件

html - 粘性页脚冲突 css

javascript - for twig.js 内的循环,设置循环计数器

javascript - HTML5 Canvas 中的文本框值

jquery - 如何在点击时切换变换过渡?

html - 如何用html和css制作标签

html - 初学者 css => 仅将属性应用于一个元素