質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

4553閲覧

高さが可変するヘッダー分、指定の要素を下げたい

NakaShun_1129

総合スコア20

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/04/23 05:02

編集2021/04/23 05:10

こんにちは。

高さが可変するヘッダー分、指定の要素を下げたいのですが、いいやり方がわからないので質問させてください。

やりたいこと

  • ヘッダーを固定し、その高さ分、bodyを下げたい

課題

  • ヘッダーの高さが固定であれば、bodyにmargin-topで解決するが、ページによってはタブ(アンカーリンク)が存在しない場合もある。
  • 現状、tabItemsの数で条件分岐し、margin-topをpxで当てているが、ヘッダーの高さを取得し、その分下げたい。

試したこと

  • ヘッダーに(ref="header)を当て、this.$refs.header.getBoundingClientRect().heightで取得しようと思ったがthis.$refs.headerがundifinedになった

####追記
調べてみたところrefsの取得はmounted以降でないとできないようですね。mountedで取得した高さ分、bodyを下げることはできますでしょうか?

####ソースコード

<template lang="pug"> div div.header //ここの高さが可変する Tab(:items="tabItems" style="padding-top: 16px;") div.body(:style="AdjustingPositionBody()") div.body1(id="1") div.body1(id="2") div.body1(id="3") </template> <script lang="ts"> import { Component, Prop, Vue } from 'vue-property-decorator'; import Tab from '@/components/tabs/Tab.vue'; @Component({ components: {Tab}, }) export default class Sample extends Vue { private tabItems = [ {title:'item1', id:'1'}, {title:'item2', id:'2'}, {title:'item2', id:'3'}, ] private onScroll (id: string) { document.getElementById(id).scrollIntoView({ behavior: 'smooth'}) } private AdjustingPositionBody() { //無理やり感があるので変えたい if(this.tabItems.length <= 3) { return { marginTop: "50px" } } else if(this.tabItems.length >= 4) { return { marginTop: "80px" } } } } </script> <style scoped> .header { z-index: 999; position: fixed; width: 100%; } </style>

####タブのコンポーネント

<template lang="pug"> div.tabs li( v-for="(item, index) in items" @click="onScroll(item.id)" ).tab {{item.title}} </template> <script lang="ts"> import { Component, Prop, Vue } from 'vue-property-decorator'; @Component({ components: {} }) export default class Tab extends Vue { @Prop() items: string[] | undefined; private onScroll (id: string) { document.getElementById(id).scrollIntoView({ behavior: 'smooth'}) } } </script> <style scoped> .tabs { display: grid; grid-template-columns: repeat(3, 1fr); list-style: none; grid-gap: 8px; margin: 0; border-bottom: 1px solid #afafaf; background-color: #fff; } .tab { padding: 0 8px; padding-bottom: 4px; color: rgb(81, 38, 0);; margin-bottom: -1px; font-size: 16px; cursor: pointer; text-align: center; } </style>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2021/04/23 05:09

sticky ではダメそうでしたか?
NakaShun_1129

2021/04/23 05:39

コメントありがとうございます! stickyを試したところヘッダーの高さ分下げることができました! こんなシンプルな方法があったんですね、、教えていただいたきありがとうございます! 一点だけうまくいかない点があり、 スクロール時にヘッダーが固定されずに一緒にスクロールされてしまいます。 top: 0 も指定しているので原因がわかりません。 もし、何かご存知でしたら教えていただきたいです。
guest

回答1

0

ベストアンサー

stickyを使ってみてはいかがでしょうか。
この質問が参考になると思います。

CSS - position、fixedで可変するヘッダーの下のコンテンツを被らないようにしたいです。|teratail

投稿2021/04/23 05:19

Lhankor_Mhy

総合スコア36074

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NakaShun_1129

2021/04/23 05:40

ありがとうございます! 他の回答者の方に教えていただき試したところヘッダーの高さ分下げることができました! しかし、一点だけうまくいかない点があり、 スクロール時にヘッダーが固定されずに一緒にスクロールされてしまいます。 top: 0 も指定しているので原因がわかりません。 もし、何かご存知でしたら教えていただきたいです。
NakaShun_1129

2021/04/23 05:57

ありがとうございます! overflow: hiddenについては確認しましたが、特に使っていませんでした。 詳しく調べたところ、stickyを指定した要素の親要素にheightが指定されていないと固定されないようです。 なので親要素にheightを指定したとこを、問題なく実装できました! 本件、これで解決しましたのでクローズとさせていただきます。 非常に助かりました、ありがとうございます!
Lhankor_Mhy

2021/04/23 05:59

お役に立てたようで何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問