简体   繁体   English

div中的垂直对齐元素

[英]vertical align elements within div

I've looked at several similar questions but have not come up with an answer that quite addresses my specific problem. 我看过几个类似的问题,但没有给出一个可以完全解决我的特定问题的答案。

I am building a resume document and I have two divs which float side-by-side, left is for headers (Work experience, education, etc), right is for details (company name, duties, etc), and they are vertically aligned on the page. 我正在创建一份简历文档,我有两个div并排浮动,左侧是标题(工作经验,学历等),右侧是详细信息(公司名称,职务等),并且它们垂直对齐在页面上。

I would like to know how to marry the vertical alignment of the headers in the left div to the details in the right div. 我想知道如何将左div中的标题的垂直对齐方式与右div中的详细信息结合使用。 For instance, I have several p's for details of work experience, and I want my next header to vertically align below those in order to sit next to the appropriate p element. 例如,我有几个p代表工作经验的详细信息,我希望我的下一个标题在这些标题下方垂直对齐,以便位于适当的p元素旁边。

 body { height: 100%; width: 100%; background-color: #fffffc; font-family: Times, serif; } .wrapper { margin: 1em; padding: 1em; } #header { height: 5em; width: 90%; margin: auto auto 0px auto; ; border-bottom: 4px solid black; padding: 1em 1em 0 1em; } #header_name { border-bottom: 1px solid #66ccff; margin-bottom: 2px; } #header_contact { margin: 2px auto auto auto; padding-top: 2px; } .left { float: left; margin-right: 2em; margin-left: 3em; display: table; } .work_left { display: table-cell; float: left; clear: left; padding-bottom: 400px; } .volunteer_left { display: table-cell; float: left; clear: left; padding-top: 45px; } .education_left { display: table-cell; float: left; clear: left; } .skills_left { display: table-cell; float: left; clear: left; } #work_head {} #volunteer_head {} #education_head {} #skills_head {} .right { width: 60%; display: table; margin-right: 3em; } .work_right { margin-bottom: 2px; padding-bottom: 2px; } h5 { margin-top: 2px; padding-top: 2px; } .work_def { text-align: justify; text-justify: inter-word; } #org_name { float: right; } #location { float: right; } 
 <div> <div class="wrapper"> <div id="header"> <h2 id="header_name">First Last </h3> <p id="header_contact">555.555.5555 &middot <a href="mailto:mail@gmail.com">mail@gmail.com</a> &middot City, State </p> </div> <div id="content"> <div class= "left"> <h3 class="work_left" id="work_head">Work Experience</h3> <h3 class="volunteer_left" id="volunteer_head">Volunteer Experience</h3> <h3 class="education_left" id="education_head">Education</h3> <h3 class="skills_left" id="skills_head">Special Skills</h3> </div> <div class="right"> <h4 class="work_right">Job Title <span id="org_name">Company Name</span></h4> <h5>July 2013 - Present <span id="location">City, State</span></h5> <p class="work_def">Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah</p> <p class="volunteer"></p> <p class="education"></p> <p class="skills"></p> </dv> </div> <div id="footer"> </div> </div> </div> 

One solution is to give each "block" its own left and right elements. 一种解决方案是为每个“块”赋予其自己的左右元素。 That way, each block is self-contained: a header on the left and some content on the right. 这样,每个块都是独立的:左侧是标题,右侧是一些内容。 Any content in the block will increase the block's height and push down the next block. 块中的任何内容都会增加块的高度并向下推下一个块。

Below, I'm using a "clearfix" method to clear floats after each pair. 在下面,我使用“ clearfix”方法在每对之后清除浮点数。

 .group:after { content: ""; display: table; clear: both; } div.entry h3 { float: left; width:50%; } div.entry div.content { float: right; width:50%; } 
 <div class="entry group"> <h3>Work Experience</h3> <div class="content"> <h4>Job Title Company Name</h4> <h5>July 2013 - Present City, State</h5> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. Vivamus pharetra posuere sapien. Nam consectetuer. Sed aliquam, nunc eget euismod ullamcorper, lectus nunc ullamcorper orci, fermentum bibendum enim nibh eget ipsum. Donec porttitor ligula eu dolor. Maecenas vitae nulla consequat libero cursus venenatis.</p> </div> </div> <div class="entry group"> <h3>Volunteer Experience</h3> <div class="content"> <p>volunteer</p> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. Vivamus pharetra posuere sapien. Nam consectetuer. Sed aliquam, nunc eget euismod ullamcorper, lectus nunc ullamcorper orci, fermentum bibendum enim nibh eget ipsum. Donec porttitor ligula eu dolor. Maecenas vitae nulla consequat libero cursus venenatis.</p> </div> </div> <div class="entry group"> <h3>Education</h3> <div class="content"> <p>education</p> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. Vivamus pharetra posuere sapien. Nam consectetuer. Sed aliquam, nunc eget euismod ullamcorper, lectus nunc ullamcorper orci, fermentum bibendum enim nibh eget ipsum. Donec porttitor ligula eu dolor. Maecenas vitae nulla consequat libero cursus venenatis.</p> </div> </div> <div class="entry group"> <h3>Special Skills</h3> <div class="content"> <p>skills</p> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. Vivamus pharetra posuere sapien. Nam consectetuer. Sed aliquam, nunc eget euismod ullamcorper, lectus nunc ullamcorper orci, fermentum bibendum enim nibh eget ipsum. Donec porttitor ligula eu dolor. Maecenas vitae nulla consequat libero cursus venenatis.</p> </div> </div> 

Edit: 编辑:

As mentioned by GCyrillus, you can avoid floating content altogether by using the CSS display property. 如GCyrillus所述,可以通过使用CSS display属性完全避免浮动内容。 Below, I'm using display:inline-block . 在下面,我正在使用display:inline-block

inline-block : The element generates a block element box that will be flowed with surrounding content as if it were a single inline box (behaving much like a replaced element would) inline-block :元素生成一个block元素框,该框将与周围的内容一起流动,就好像它是单个inline box一样(与被替换的元素非常相似)
Source display @ MDN 显示@ MDN

However, be warned that inline-block will respect (and display) white space between elements. 但是,请注意, inline-block将尊重(并显示)元素之间的空白。 Two adjacent elements with width:50% will not fit in one row and will wrap to the next row (because 50% + 50% + white space > 100%). width:50%两个相邻元素将不能排成一行,而是换行到下一行(因为50%+ 50%+空格> 100%)。 For this reason, I've adjusted the element widths in my example. 因此,我在示例中调整了元素宽度。 Other methods of handling white space can be found below the snippet. 片段下方可以找到其他处理空白的方法。

 div.entry h3, div.entry div.content { display:inline-block; width:45%; vertical-align:top; } 
 <div class="entry group"> <h3>Work Experience</h3> <div class="content"> <h4>Job Title Company Name</h4> <h5>July 2013 - Present City, State</h5> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. Vivamus pharetra posuere sapien. Nam consectetuer. Sed aliquam, nunc eget euismod ullamcorper, lectus nunc ullamcorper orci, fermentum bibendum enim nibh eget ipsum. Donec porttitor ligula eu dolor. Maecenas vitae nulla consequat libero cursus venenatis.</p> </div> </div> <div class="entry group"> <h3>Volunteer Experience</h3> <div class="content"> <p>volunteer</p> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. Vivamus pharetra posuere sapien. Nam consectetuer. Sed aliquam, nunc eget euismod ullamcorper, lectus nunc ullamcorper orci, fermentum bibendum enim nibh eget ipsum. Donec porttitor ligula eu dolor. Maecenas vitae nulla consequat libero cursus venenatis.</p> </div> </div> <div class="entry group"> <h3>Education</h3> <div class="content"> <p>education</p> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. Vivamus pharetra posuere sapien. Nam consectetuer. Sed aliquam, nunc eget euismod ullamcorper, lectus nunc ullamcorper orci, fermentum bibendum enim nibh eget ipsum. Donec porttitor ligula eu dolor. Maecenas vitae nulla consequat libero cursus venenatis.</p> </div> </div> <div class="entry group"> <h3>Special Skills</h3> <div class="content"> <p>skills</p> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. Vivamus pharetra posuere sapien. Nam consectetuer. Sed aliquam, nunc eget euismod ullamcorper, lectus nunc ullamcorper orci, fermentum bibendum enim nibh eget ipsum. Donec porttitor ligula eu dolor. Maecenas vitae nulla consequat libero cursus venenatis.</p> </div> </div> 

For more information on handling white space, see: 有关处理空白的更多信息,请参见:

Edit: 编辑:

Yet another method utilizes CSS display:table , display:table-row , and display:table-cell to display content similarly to an HTML table (but without the possibly non-semantic use of a table for layout purposes ). 还有另一种方法利用CSS display:tabledisplay:table-rowdisplay:table-cell来显示内容,类似于HTML表格(但出于布局目的 ,可能不会非语义地使用表格 )。 This is not my favorite method, but it has its applications depending on the context. 这不是我最喜欢的方法,但是它的应用取决于上下文。

 div.container { display: table; } div.entry { display: table-row; } div.entry h3, div.entry div.content { display: table-cell; } div.entry h3 { white-space:nowrap; padding: 0 3em 0 0; } 
 <div class="container"> <div class="entry group"> <h3>Work Experience</h3> <div class="content"> <h4>Job Title Company Name</h4> <h5>July 2013 - Present City, State</h5> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. Vivamus pharetra posuere sapien. Nam consectetuer. Sed aliquam, nunc eget euismod ullamcorper, lectus nunc ullamcorper orci, fermentum bibendum enim nibh eget ipsum. Donec porttitor ligula eu dolor. Maecenas vitae nulla consequat libero cursus venenatis.</p> </div> </div> <div class="entry group"> <h3>Volunteer Experience</h3> <div class="content"> <p>volunteer</p> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. Vivamus pharetra posuere sapien. Nam consectetuer. Sed aliquam, nunc eget euismod ullamcorper, lectus nunc ullamcorper orci, fermentum bibendum enim nibh eget ipsum. Donec porttitor ligula eu dolor. Maecenas vitae nulla consequat libero cursus venenatis.</p> </div> </div> <div class="entry group"> <h3>Education</h3> <div class="content"> <p>education</p> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. Vivamus pharetra posuere sapien. Nam consectetuer. Sed aliquam, nunc eget euismod ullamcorper, lectus nunc ullamcorper orci, fermentum bibendum enim nibh eget ipsum. Donec porttitor ligula eu dolor. Maecenas vitae nulla consequat libero cursus venenatis.</p> </div> </div> <div class="entry group"> <h3>Special Skills</h3> <div class="content"> <p>skills</p> <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque, id pulvinar odio lorem non turpis. Nullam sit amet enim. Suspendisse id velit vitae ligula volutpat condimentum. Aliquam erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero. Vivamus pharetra posuere sapien. Nam consectetuer. Sed aliquam, nunc eget euismod ullamcorper, lectus nunc ullamcorper orci, fermentum bibendum enim nibh eget ipsum. Donec porttitor ligula eu dolor. Maecenas vitae nulla consequat libero cursus venenatis.</p> </div> </div> </div> 

Okay first up you've got some markup and readability issues: 好的,首先您会遇到一些标记和可读性问题:

Your h* in headers starts as an h2 and ends as an h3 and no one wants that. 标头中的h *开头为h2,结尾为h3,没有人想要。 Also you have one closing div tag misspelled as /dv 另外,您有一个关闭的div标签拼写为/ dv

Also your code is a little over-reliant on div's, give some html5 markup a shot. 另外,您的代码在div上有点过分依赖,请尝试一些html5标记。 You can use header for the header, footer for the footer and main for the content. 您可以将header用作标题,将footer用作页脚,将main用作内容。 This makes the code more readable for humans, browsers, and screen readers. 这使代码对人类,浏览器和屏幕阅读器更具可读性。

Also, I'd recommend always double spacing and properly indenting your code; 另外,我建议始终使用双倍行距并适当缩进代码; it may seem trivial on one page docs like this, but it really pays off down the line to build good habits now. 在一页这样的文档上看似微不足道,但是现在确实可以养成良好的习惯了。 Also it makes helping you out easier. 同时,它也使您的工作更加轻松。

I went ahead and cleaned up your code; 我继续整理您的代码; I remember when I first started out it wasn't always obvious where indents should go. 我记得刚开始时缩进哪里并不总是很明显。

Finally onto your question: 最后是您的问题:

Have you considered just using a table? 您是否考虑过只使用桌子? The layout your describing sounds exactly like a table to me. 您所描述的布局听起来对我来说就像一张桌子。 Bear in mind that just because it's a table doesn't mean it has to have borders, you can style it however you want. 请记住,仅因为它是一张桌子并不意味着它必须有边框,您可以根据需要对其进行样式设置。 I'll include a little example down below. 我将在下面提供一个小示例。

Cleaned up code: 清理代码:

<head>

    <link type="text/css" rel="stylesheet" href="html resume style.css"/>

    <title>First Last's Resume</title>

</head>

<body>

     <div>

        <div class="wrapper">

            <div id="header">

                <h2 id="header_name">First Last</h3>

                <p id="header_contact">555.555.5555 &middot <a href="mailto:mail@gmail.com">mail@gmail.com</a> &middot City, State</p>

            </div>

            <div id="content">

                <div class= "left">

                    <h3 class="work_left" id="work_head">Work Experience</h3>

                    <h3 class="volunteer_left" id="volunteer_head">Volunteer Experience</h3>

                    <h3 class="education_left" id="education_head">Education</h3>

                    <h3 class="skills_left" id="skills_head">Special Skills</h3>
                </div>

                <div class="right">

                    <h4 class="work_right">Job Title <span id="org_name">Company Name</span></h4>

                    <h5>July 2013 - Present <span id="location">City, State</span></h5>

                    <p class="work_def">Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah</p>

                    <p class="volunteer"></p>

                    <p class="education"></p>

                    <p class="skills"></p>

                </dv> <!-- End of Digital Velociraptor? -->

            </div>

            <div id="footer">

            </div>

        </div>

    </div>

and here's an example of a table that might work for you: 这是一个可能适合您的表格示例:

    <table id="content">

        <tr>

            <td class="work_left" id="work_head">Work Experience</td>

            <td>I've done all kinds of stuff</td>

        </tr>

            <td class="volunteer_left" id="volunteer_head">Volunteer Experience</td>

            <td>6 months, Stephen Hawking's wheelchair</td>

        </tr>

    </table>

First in each represents the first column, the next being the second. 每个列中的第一列代表第一列,第二列代表第二列。

Good luck! 祝好运!

You can do it by DIVs or Table .....here i have answered using table with full code 您可以通过DIVsTable .....在这里我已经使用带有完整代码的表进行了回答

  body { height: 100%; width: 100%; background-color: #fffffc; font-family: Times, serif; } .wrapper { margin: 1em; padding: 1em; } #header { height: 5em; width: 90%; margin: auto auto 0px auto; border-bottom: 4px solid black; padding: 1em 1em 0 1em; } #header_name { border-bottom: 1px solid #66ccff; margin-bottom: 2px; } #header_contact { margin: 2px auto auto auto; padding-top: 2px; } h5 { margin-top: 2px; padding-top: 2px; } #content{ width:1024px; margin:0px auto; } #resume{ width:100%; padding:10px; } #resume td{ padding-bottom:10px; } .header{ width:250px } .work_right { margin-bottom: 2px; padding-bottom: 2px; } h5 { margin-top: 2px; padding-top: 2px; } #org_name { float: right; } #location { float: right; } 
 <div class="wrapper"> <div id="header"> <h2 id="header_name">First Last </h3> <p id="header_contact">555.555.5555 &middot <a href="mailto:mail@gmail.com">mail@gmail.com</a> &middot City, State </p> </div> <div id="content"> <table id="resume"> <tr> <td class="header"><h3><h3></td> <td ><h4 class="work_right">Job Title <span id="org_name">Company Name</span></h4> <h5>July 2013 - Present <span id="location">City, State</span></h5></td> </tr> <tr> <td class="header"><h3>Work Experience<h3></td> <td>Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah</td> </tr> <tr> <td class="header"><h3>Volunteer Experience<h3></td> <td>Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah</td> </tr> <tr> <td class="header"><h3>Education<h3></td> <td>Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah</td> </tr> <tr> <td class="header"><h3>Special Skills</h3></td> <td>Blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah</td> </tr> </table> </div> <div id="footer"> </div> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM