html两个盒子怎么左右对其,关于html:在同一行上左右对齐两个内联块
如何對齊兩個內聯塊,以便一個在左邊,另一個在同一行? 為什么這么難? 是否有類似LaTeX的 hfill這樣的東西可以占用它們之間的空間來實現這一目標?
我不想使用浮點數,因為有了內聯塊,我可以將基線對齊。 當窗口對于兩個窗口而言都太小時,使用內聯塊,我可以將文本對齊方式更改為居中,并且它們將居中對齊。 相對(父)+絕對(元素)定位與浮點數存在相同的問題。
HTML5:
Title
A Link
Another Link
A Third Link
CSS:
header {
//text-align: center; // will set in js when the nav overflows (i think)
}
h1 {
display: inline-block;
margin-top: 0.321em;
}
nav {
display: inline-block;
vertical-align: baseline;
}
Thery彼此相鄰,但我希望右側的nav。
AFAIK解決此問題的唯一方法是使用浮動或絕對定位。 您可以使用導航上的margin-top獲得相同的基線位置。
只需使用margin-top和float。 沒有那種定位或絕對定位就不可能做到這一點。
使用css媒體查詢可根據視口的大小更改css。 您可以同時使用position: absolute和inline-block
編輯:自從我回答這個問題以來已經過去了3年,我想還需要一種更現代的解決方案,盡管當前的解決方案是可行的:)
1.Flexbox
到目前為止,它是最短且最靈活的。將display: flex;應用于父容器,并通過justify-content: space-between;調整其子容器的放置,如下所示:
.header {
display: flex;
justify-content: space-between;
}
可以在此處在線查看-http://jsfiddle.net/skip405/NfeVh/1073/
但是請注意,flexbox支持是IE10及更高版本。如果需要支持IE 9或更早版本,請使用以下解決方案:
2.您可以在此處使用text-align: justify技術。
.header {
background: #ccc;
text-align: justify;
/* ie 7*/
*width: 100%;
*-ms-text-justify: distribute-all-lines;
*text-justify: distribute-all-lines;
}
.header:after{
content: '';
display: inline-block;
width: 100%;
height: 0;
font-size:0;
line-height:0;
}
h1 {
display: inline-block;
margin-top: 0.321em;
/* ie 7*/
*display: inline;
*zoom: 1;
*text-align: left;
}
.nav {
display: inline-block;
vertical-align: baseline;
/* ie 7*/
*display: inline;
*zoom:1;
*text-align: right;
}
可以在此處看到工作示例:http://jsfiddle.net/skip405/NfeVh/4/。此代碼在IE7及更高版本中有效
如果HTML中的內聯塊元素未用空格分隔,則此解決方案將不起作用-請參見示例http://jsfiddle.net/NfeVh/1408/。當您使用Java腳本插入內容時,可能是這種情況。
如果我們不在乎IE7,則只需省略star-hack屬性。使用標記的工作示例在此處-http://jsfiddle.net/skip405/NfeVh/5/。我只添加了header:after部分并說明了內容。
為了解決用after偽元素插入的額外空間的問題,可以做一個技巧,將父元素的font-size設置為0,子元素將其重置為14px。可以在這里看到此技巧的有效示例:http://jsfiddle.net/skip405/NfeVh/326/
有什么方法可以阻止它提高橫幅的高度嗎?我意識到這是如何工作的,所以我認為這里沒有。
此解決方案非常優雅,而且足夠高,這不是解決方法嗎?它恰好增加了20個無用的像素:-(編輯:可能的解決方法,指定高度:NUMpx;在容器上,由于多種原因,這是非常糟糕的。
如果您使用javascript生成內容,請注意,僅當元素之間存在空格時,此解決方案才有效。您將需要在left / right元素之間插入一個文本節點,否則它們都將粘在左邊。
@Valerio Coltr,我找到了解決此小問題的方法。如果將font-size: 1px設置為父容器,則多余的空間實際上將消失。只是現在,我們必須將子元素的font-size設置回正常狀態-像這樣:jsfiddle.net/skip405/NfeVh/326
您還可以將代碼粘貼到這里嗎?鏈接到外部場所的習慣有時會死掉,如果發生這種情況,那么本來有用的答案將突然變得無用。
@ValerioColtr我同意空白空間是這種方法中最令人討厭的東西。顯式管理font-size是相當不可取的。我提出了一個不同的解決方案。請注意,.header:after裝飾器添加的一行高度等于font-size。幸運的是,我們知道那是多少。正是1em!因此,負利潤可助您一臂之力!這個小提琴顯示了如何。
我正在嘗試在Firefox中執行類似操作,但無法正常工作。我發生兩件事:1.不是正確的CSS選擇器:: after,不是:after? 2. :: after選擇器將內容而不是元素插入頁面。如果內容不是元素,如何設置內容的寬度?無論如何,似乎正在為一些工作,但林困惑。
"所有支持雙冒號(::) CSS3語法的瀏覽器也僅支持(:)語法,但IE 8僅支持單冒號" css-tricks.com/almanac/selectors/a/after-and-before
@ skip405注意:將包裝元素(標題)上的行高設置為0并修復其偽元素的垂直對齊方式(vertical-align:top,例如)可以解決額外的空間問題。當然,我們必須在父元素上重新設置行高,但是在許多情況下它可能更容易。 jsfiddle.net/bencergazda/3gL8153n/7
@bencergazda,很酷,謝謝:)
@ skip405如果我正確閱讀了問題,OP希望兩個子項都在同一基線上對齊。也許您想考慮將此添加到您的答案中?放在這里:jsfiddle.net/c4pwtn5o-基本上是在.header上添加align-items: baseline;。
@JanPapenbrock,感謝您的建議。它確實在OP圖像上看起來元素在同一基線上。但是,問題本身不在于垂直對齊。編輯被拒絕(順便說一句,我拒絕)
@JanPapenbrock,更重要的是,OP明確表示可以line up the baselines。它能回答您的編輯為何被拒絕的原因嗎?沒有惡意?
我個人并不喜歡這種改進;-)我只是發現自己需要調整為基準-從問題圖像中我還認為這也是OP的需要。 因此,我認為這將是一個很好的補充。 關于編輯和拒絕的原因,我知道這是形式問題(應該評論而不是編輯)而不是內容。
利用@ skip405的答案,我為此做了一個Sass mixin:
@mixin inline-block-lr($container,$left,$right){
#{$container}{
text-align: justify;
&:after{
content: '';
display: inline-block;
width: 100%;
height: 0;
font-size:0;
line-height:0;
}
}
#{$left} {
display: inline-block;
vertical-align: middle;
}
#{$right} {
display: inline-block;
vertical-align: middle;
}
}
它接受3個參數。容器,左元素和右元素。
例如,要適合這個問題,可以這樣使用:
@include inline-block-lr('header', 'h1', 'nav');
如果您不想使用浮點數,則必須包裝導航:
Title
A Link
Another Link
A Third Link
...并添加一些更具體的CSS:
header {
//text-align: center; // will set in js when the nav overflows (i think)
width:960px;/*Change as needed*/
height:75px;/*Change as needed*/
}
h1 {
display: inline-block;
margin-top: 0.321em;
}
#navWrap{
position:absolute;
top:50px; /*Change as needed*/
right:0;
}
nav {
display: inline-block;
vertical-align: baseline;
}
您可能需要做更多一點,但這只是一個開始。
我認為對此的一種可能的解決方案是使用display: table:
.header {
display: table;
width: 100%;
box-sizing: border-box;
}
.header > * {
display: table-cell;
}
.header > *:last-child {
text-align: right;
}
h1 {
font-size: 32px;
}
nav {
vertical-align: baseline;
}
JSFiddle:http://jsfiddle.net/yxxrnn7j/1/
如果您已經在屏幕過小時(根據標題的注釋)使用JavaScript來使內容居中,那為什么不只是在使用JavaScript時撤消浮點數/邊距,然后正常使用浮點數和邊距。
您甚至可以使用CSS媒體查詢來減少使用的JavaScript數量。
我想我還沒有真正考慮過,似乎這樣會更容易。但顯然不是。關于我如何從javascript跳轉到下一行的導航的任何提示?
啊,我可以使用媒體查詢!我認為這些僅用于啟動,而不用于調整大小。謝謝。
正確對齊項目的新方法:
網格:
.header {
display:grid;
grid-template-columns: 1fr auto;
}
演示
Bootstrap 4.右對齊:
left
element needs to be right aligned
演示
兩種元素都使用
display: inline-block;
用于" nav"元素
float: right;
對于浮子,不能使用自動換行。
給它float:right和h1 float:left并在它們之后放置一個帶有clear:的元素。
"我不想使用浮子"
@powerbuoy有趣,他選擇了最后帶有浮點數的解決方案,對嗎?
@意大利:只是因為我認為這是唯一可能的方法,所以我改變了我接受的答案。
總結
以上是生活随笔為你收集整理的html两个盒子怎么左右对其,关于html:在同一行上左右对齐两个内联块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 补充小知识:文件句柄与文件标识符
- 下一篇: 5星好书———电子技术基础数字部分(第6