是否有一种更简洁的方式来实现2个对齐的列,文本/图像?

问题描述:

我对编程非常陌生,我想知道是否有一种更简单的方法实现这一点:左侧的文本框和右侧的图像都对齐。我添加了一个填充顶部来说明导航菜单。我可以用较少的代码行完成此操作吗?是否有一种更简洁的方式来实现2个对齐的列,文本/图像?

<div class="intro"> 
    <div id="text"> 
     <h2 id="head">Quiénes Somos</h2> 
     <p id="info"> text text text text</p> 
    </div> 

    <div id="image"> 
     <img id="obj" src="images/pyme.jpg"> 
    </div> 
</div> 

这里的CSS:

.intro { 
    text-align: center; 
    padding-top: 135px; 
} 

.intro #text { 
    vertical-align: top; 
    width: 40%; 
    display: inline-block; 
    padding: 10px; 
    border: 1px solid black; 
} 

.intro #text #head { 
    background-color: #d45029; 
    text-align: left; 
    border-radius: 7px; 
} 

.intro #text #info { 
    margin-top: 10px; 
    text-indent: 50px; 
    text-align: justify; 
} 

.intro #image { 
    width: 40%; 
    display: inline-block; 
    padding:10px; 
    border: 1px solid black; 
} 

.intro #image #obj { 
    max-width: 100%; 
} 

而这里的小提琴link。我读过使用花车会容易得多,但我试过并失败了。任何帮助将不胜感激。

+1

你可以用'显示:父flex',它将把列的水平行,则不需要'直列block' https://开头的jsfiddle。 net/dqx1qznb/1/ –

+0

哇,超级简单的东西!谢谢! – Oscar

我通常使用百分比,显示:块和浮动这东西。然后我根据我想要做的事情调整边距和填充。

HTML

<div class="divs-wrapper"> 
    <div class="div-1"> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ac dictum lectus, id tristique elit. Integer tincidunt sollicitudin magna a congue.</p> 
    </div> 
    <div class="div-2"> 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ac dictum lectus, id tristique elit. Integer tincidunt sollicitudin magna a congue.</p> 
    </div> 
</div> 

CSS

.divs-wrapper { 
    width: 80%;/* width of wrapper */ 
    display: block;/* display block allows margin and width setting */ 
    margin: 0 auto;/* centers wrapper in 100% width body */ 
} 

.div-1 { 
    width: 49%;/* div 1 half width of wrapper */ 
    display: block;/* display block allows floats */ 
    float: left;/* float left to allow alignment of elements next to eachother */ 
    padding: .5%;/* padding for spacing */ 
} 

.div-2 { 
    width: 49%;/* div 2 half width of wrapper */ 
    display: block;/* display block allows floats */ 
    float: left;/* float left to allow alignment of elements next to eachother */ 
    padding: .5%;/* padding for spacing */ 
} 

我演示 https://codepen.io/rw1982/pen/eWwZjB

如果你是新的HTML和CSS,并且要开设专栏或网格在响应层面上工作。尝试这些链接开始。

响应电网 http://www.responsivegridsystem.com/

+0

如果你想加强它,请查看flex框的工作原理。 ** Flex-Box Demo ** http://the-echoplex.net/flexyboxes/ – rw1982

+0

谢谢!我一定会检查这些网站。这个答案让我更好地理解divs的行为。我正在尝试通过添加边框来创建布局,以查看我的内容的外观。为什么当我向你的CSS添加边框时,会将一个元素放在另一个元素的上面? – Oscar

+0

我会研究盒子模型的工作原理。由于我在示例中使用百分比,因此向其添加边框可能会使其超过元素的100%宽度。百分比很敏感。可以随意使用父元素的宽度,或者只使用像素,ems或(更好的是)可以暂时简化事物。有很多方法可以做到这一点,甚至可以将所有内容添加到一个div中,并使用此方法添加列。 https://www.w3schools.com/css/css3_multiple_columns.asp – rw1982

divs默认为display: block,这意味着它们将拉伸它们的容器的全部宽度,除非它们的宽度被指定(或者您将display更改为其他内容)。

如果你想使用float风格,你需要采取的所有内容进行单独申报单,这将离开你是这样的:

<div class="intro"> 
    <img style = "float: right; max-width: 50%" id="obj" src="http://i.imgur.com/8EL2PCM.jpg"> 
    <h2 id="head">text text</h2> 
    <p id="info"> text text text text text text</p> 
</div> 

因为pimg是内嵌在默认情况下,他们不不会占用比他们需要更多的空间。请注意,我已将样式设置为内嵌图像。你可以将它们移动到你的样式表来获得相同的效果。图像默认情况下会以其实际尺寸进行渲染,这就是为什么我将max-width设置为50%。如果您使用的图像的大小已经达到您想要渲染的大小,则不需要执行此操作。

如果要在所有文字上应用样式,而不是div,请将文字包装在span(默认为display: inline元素)中。或者只是给你的p标签类或ID。这些也是display:inline

+0

这基本上做了我想要的所有额外的代码。我期待在显示器的中心有文字和图像。我是否应该使用百分比边际? – Oscar

+0

“display:inline”元素可以使用“text-align”属性进行居中放置,因此您只需将“text-align:center”添加到#intro div即可。尽管如此,这也会使文本居中。如果您想将内容从边缘移开,是的,您可以使用边距。有一件事你可能会看到哪些布局非常容易使用Bootstrap ...也许现在不是,但是一旦你对HTML和CSS有了很好的理解,它就可以轻松地控制诸如边距之类的东西并调整布局以适应不同的屏幕尺寸。 –

+0

另一件你可能会考虑的事情是,如果你不希望文字与图像对接,那就是在图像中添加填充。填充左:10px的;填充底:10px的;或任何会给图像一些空间。 –