Augmented reality (AR) is an interactive experience of a real-world environment where the objects that reside in the real world are enhanced by computer-generated perceptual information, sometimes across multiple sensory modalities, including visual, auditory, haptic, somatosensory and olfactory. Virtual reality (VR) is a simulated experience that can be similar to or completely different from the real world. Applications of virtual reality include entertainment (e.g. video games) and education (e.g. medical or military training). Other distinct types of VR-style technology include augmented reality and mixed reality, sometimes referred to as extended reality or XR.
Popular New Releases in Virtual Reality
aframe
v1.2.0
engine
v1.53.2
Relativty
Relativty 2 early Release
MixedRealityToolkit-Unity
Microsoft Mixed Reality Toolkit v2.7.3
openvr
v1.16.8
Popular Libraries in Virtual Reality
by jeromeetienne html
15308 MIT
Efficient Augmented Reality for the Web - 60fps on mobile!
by cyrildiagne typescript
14263 MIT
Cut and paste your surroundings using AR
by aframevr javascript
13681 MIT
:a: web framework for building virtual reality experiences.
by playcanvas javascript
7301 MIT
Fast and lightweight JavaScript game engine built on WebGL and glTF
by olucurious swift
6962
A curated list of awesome ARKit projects and resources. Feel free to contribute!
by relativty c++
5416 GPL-3.0
An open source VR headset with SteamVR supports for $200
by microsoft csharp
5032 MIT
Mixed Reality Toolkit (MRTK) provides a set of components and features to accelerate cross-platform MR app development in Unity.
by ProjectDent swift
4993 MIT
Combines the high accuracy of AR with the scale of GPS data.
by ValveSoftware c++
4789 BSD-3-Clause
OpenVR SDK
Trending New libraries in Virtual Reality
by cyrildiagne typescript
14263 MIT
Cut and paste your surroundings using AR
by AR-js-org javascript
3449 MIT
Image tracking, Location Based AR, Marker tracking. All on the Web.
by pmndrs javascript
1002 MIT
𤳠VR/AR with react-three-fiber
by felixmariotto javascript
686 MIT
âš Make VR user interfaces for Three.js
by fabio914 c
641 GPL-2.0
Mixed Reality app for iOS
by hiukim javascript
621 MIT
Web Augmented Reality. Image Tracking, Face Tracking. Tensorflow.js
by lllyasviel python
550 Apache-2.0
Generating Digital Painting Lighting Effects via RGB-space Geometry (SIGGRAPH2020/TOG2020)
by ju1ce c++
510 MIT
Full-body tracking in VR using AprilTag markers.
by googlesamples csharp
445 Apache-2.0
ARCore Depth Lab is a set of Depth API samples that provides assets using depth for advanced geometry-aware features in AR interaction and rendering. (UIST 2020)
Top Authors in Virtual Reality
1
29 Libraries
9752
2
20 Libraries
2418
3
15 Libraries
15863
4
14 Libraries
98
5
13 Libraries
1147
6
13 Libraries
144
7
13 Libraries
4977
8
12 Libraries
5925
9
11 Libraries
71
10
10 Libraries
240
1
29 Libraries
9752
2
20 Libraries
2418
3
15 Libraries
15863
4
14 Libraries
98
5
13 Libraries
1147
6
13 Libraries
144
7
13 Libraries
4977
8
12 Libraries
5925
9
11 Libraries
71
10
10 Libraries
240
Trending Kits in Virtual Reality
Projection Based AR is an Image/video projection technique that can be extended and reinforce visual data by throwing images on the surface of 3D objects. Graphical and Imaginary representation is straightforward to implement with Projection Based AR techniques that standard lighting techniques cannot express. This kit helps users to experience the shopping experience like wearing Glasses, cap, earring in AR mode. Aframe is a framework for building virtual reality websites. This project will show you how to build an e-commerce site using aframe, AR.js, mind-AR.js, and Sketch-three.js.
Aframe has many components that can be used together or separately in your project. You may already be familiar with React or Three.js - these are two of the most common technologies used in web development today. They're used here as well! Aframe brings together these technologies and provides a simple interface for building virtual reality experiences on the web while maintaining the power of React and Three.js behind the scenes.
Troubleshooting
- While running batch file, if you encounter Windows protection alert, select More info --> Run anyway
- During kit installer, if you encounter a Windows security alert, click Allow
For a detailed tutorial on installing & executing the solution as well as learning resources including training & certification opportunities, please visit the OpenWeaver Community
Development Environment
Visual studio code IDE is used for this development. It becomes easy and simple to develop an interactive UI with Visual studio code.
AR Libraries
A-Frame is an open-source web framework used for building Augmented reality (AR) experiences. Web-based augmented reality (WebAR) is the most advanced technology that allows users to access AR experiences directly from their smartphones. Three.js is the open-source web framework used to develop augmented reality (AR) projects.
Support
If you need help using this kit, you may reach us at the OpenWeaver Community.
Location based AR Kit is a tool for creating augmented reality apps. It applies computer vision techniques to place digital objects in real-world scenes. AR Kit can locate horizontal planes like tables and floors, allowing you to place objects on a surface without additional calibration. It can also detect a user's position and direction as they walk around an area, which lets you anchor 3D content to specific locations in the physical world.
We have used many libraries like aframe, three.js, and location-based AR libraries to build this AR kit. An HTML5 web framework of aframe that provides you with all the tools needed to create experiences for desktop and mobile devices using WebGL, WebVR and Web Audio. Three.js is an open-source web framework used to develop augmented reality (AR) projects.
kandi kit provides you with a fully deployable Location Based AR app. Source code included so that you can customize it for your requirement.
Troubleshooting
- While running batch file, if you encounter Windows protection alert, select More info --> Run anyway
- During kit installer, if you encounter a Windows security alert, click Allow
For a detailed tutorial on installing & executing the solution as well as learning resources including training & certification opportunities, please visit the OpenWeaver Community
Development Environment
Visual studio code IDE is used for this development. It becomes easy and simple to develop an interactive UI with Visual studio code.
Location Based AR Libraries
Geo AR is an advanced technology that allows developers to add digital content to geographical points of interest. This means that unlike the typical marker-based Augmented Reality features like Image Tracking & Object Tracking, Geo AR projects do not need a physical target to trigger the feeling of AR experience.
A-Frame is an open-source web framework used for building Augmented reality (AR) experiences.
Three.js is an open-source web framework used to develop augmented reality (AR) projects.
Support
If you need help using this kit, you may reach us at the OpenWeaver Community.
AR Core app allows users to experience augmented reality on their Android devices. This kit helps developers and users to experience their own 3d models.
The users have the liberty to choose their own 3d models with all the fun elements also. Please see below a sample solution kit to jumpstart your solution on AR App using Android Kit. To use this kit to build your own solution, scroll down to the Kit Deployment Instructions sections.
Development Environment
The Android Studio IDE is open source and used for this development. It has a rich UI development environment with templates to give new developers launching their innovations into Android development.
Android Libraries
ARCore is the advanced platform that enables Android app developers and users to quickly and easily build AR experiences into their mobile apps and games.
Google Sceneform is an open-source 3D framework that makes it easy for you to build ARCore apps.
Android-Gradle is the open-source Android framework used to develop AR projects.
AR Fragments are used to build these ARCore apps.
Instruction to Replace 3d Models
- To place your own 3d model, initially, you need to set up your Android studio with "Google Sceneform Tool (Beta)"
- To install Google Sceneform Tool just follow the below steps : a. Go to file > settings b. In settings, click on 'plugins' c. In plugins search for "Google Sceneform Tool" in Marketplace d. Once you find, Install and restart the Android Studio
- Place your 3d model obj and mtl file in sampledata folder in the application Note:- Name of the obj file should be in lowercase
- Make a raw folder under app > src > main > res > raw
- Right-click on the obj file and generate the Sceneform for your 3d model under the raw folder.
Support
If you need help to use this kit, you can email us at kandi.support@openweaver.com or direct message us on Twitter Message @OpenWeaverInc.
AR Face Filter has been very popular recently, especially with the rise of social media apps. It can create an AR experience by overlaying virtual objects.
The technology is similar to the one used by Facebook camera effects OR Snapchat selfie lens to add filters to their photos and videos but has its own unique style and capabilities.
kandi kit provides you with a fully deployable Face Filter for Insta & Snapchat. The source code included so that you can customize it for your requirement.
Troubleshooting
- While running batch file, if you encounter a Windows protection alert, select More info --> Run anyway
- During kit installer, if you encounter a Windows security alert, click Allow
For a detailed tutorial on installing & executing the solution as well as learning resources including training & certification opportunities, please visit the OpenWeaver Community
Development Environment
Visual studio code IDE is used for this development. It becomes easy and simple to develop an interactive UI with Visual studio code.
AR Libraries
Three.js is the open-source web framework used to develop augmented reality (AR) projects.
Web-based augmented reality (WebAR) is the most advanced technology that allows users to access AR experiences directly from their smartphones.
Support
If you need help using this kit, you may reach us at the OpenWeaver Community.
The AR learning app is an educational app that uses Augmented Reality technology. It provides an interactive learning experience for students.
The app allows users to learn about different animals or plants by placing them in a virtual world, where they can interact with them and learn more about their characteristics. The app uses augmented reality technology to overlay 3D virtual objects onto real-world images and videos. Students can use the app to learn about science topics through experiments, including chemical reactions and the effects of gravity on objects and similar many other concepts.
AR is a new technology that is being adopted by many developers and businesses. We have seen many examples of AR applications that have been developed. This AR learning application is built using the A-Frame framework. This app will help you learn how to create an augmented reality app using A-Frame and VSCODE, etc.
Please see below a sample solution kit to jumpstart your solution on the AR Learning Kit. To use this kit to build your own solution, scroll down to the Kit Deployment Instructions sections.
Instruction to run:
Follow below instructions to run the solution:
- Locate and open the respective extracted zip file.
- Open the command prompt and start your local HTTP server with Python by using the command "python -m http.server 8000," or you can deploy this in any other web server also.
- Use the "G" marker, i.e., available in the assets folder. Show the marker to the application, and then see the 3d image in the browser. (can use the print-out-based marker or marker can be downloaded in your mobile and can also show the same).
- The application currently has 15 models. Refer the same under < a-assets > in the "index.html" file. You can replace any of the 3d models with your own model.
- Use left arrow and right arrow available on the screen to experience the models. Zoom in option is also available in the application.
ďťżFor changing the images for your topics,
Create your own 3d images related to the themes that you would like to explain with AR features.
1. To add your 3d models, follow below procedure:
- The 3d models should be in the format of ".gltf"
- If your 3d model contains a single file, then place the same directly in the assets folder i.e., available under the "AR-Alphabets-master" folder otherwise if your 3d model contains multiple files, then create a folder with the respective name inside assets and place the files in the folder.
- Then go to the "index.html" file and update the src attribute accordingly Example :- src="assets/3d-model-name.gltf" or src="assets/your-folder-name/3d-model-name.gltf"
- To place your 3d model, some more helpful comments are available under < a-assets > in "index.html" file. Note:- To experience your 3d models, you should run the application on your local web server mode only. For information about creating the 3d models, kindly refer to the Creation of 3d Model Repository section.
2. You can change the size of the 3d models by adjusting the scale values in "main.js" (eg:-scale: "0.2 0.2 0.2")
3. You can also change the voice assistant corresponding to the 3d image by changing the description name in "main.js" (eg:-description: "Earth")
4. Once changes are done, make sure to restart the application for the changes to be effective.
5. Now, you will experience your theme with AR in your Environment!
6. For more details or clarification please refer this Link
Creation of 3d Model Repository
1. You can create your own 3d models by using open source IDE like unity3d, Blender, AutoCAD or you can get 3d models from open source websites given below
Note:- Kindly check the license of the 3d models before using them.
2. Make sure that 3d models should be in the form of ".gltf" format, if not so kindly change them to the respective format. You can refer to the below links to convert your 3d models in the ".gltf" format.
Troubleshooting
- While running batch file, if you encounter Windows protection alert, select More info --> Run anyway
- During kit installer, if you encounter a Windows security alert , click Allow
For a detailed tutorial on installing & executing the solution as well as learning resources including training & certification opportunities, please visit the OpenWeaver Community
Development Environment
Visual studio code IDE is used for this development. It becomes easy to modify the code and the configuration with Visual studio code.
AR Libraries
A-Frame is an open-source web framework used for building Augmented reality (AR) experiences. In the spirit of open-source software development, jQuery plays a vital role in community code contribution.
The below library could be used to create jQuery scripts and respective models.
Support
If you need help using this kit, you may reach us at the OpenWeaver Community.
The Build Marker Based AR Solution is an application that can detect a marker and create a semblance of an augmented reality experience.
The marker can be detected and identified using the phone's camera and OpenCV library. When the marker is detected, it is then analyzed for color, size, and orientation. This information is used to determine what kind of marker it is (3D or 2D) and whether it can be used to place 3D objects in the scene. If this check passes, the 3D object is drawn at the correct position and orientation in relation to the camera feed from the device.
We used MindAR for marker detection and VSCode for development. We also used aframe and three.js for our applications. Mind AR is a platform that allows developers to build Augmented Reality applications. It is written in Javascript, HTML, and CSS. Mind AR works with the marker-based AR system.
Troubleshooting
- While running batch file, if you encounter Windows protection alert, select More info --> Run anyway
- During kit installer, if you encounter a Windows security alert, click Allow
ďťżFor a detailed tutorial on installing & executing the solution as well as learning resources including training & certification opportunities, please visit the OpenWeaver Community
Development Environment
Visual studio code IDE is used for this development. It becomes easy and simple to develop an interactive UI with Visual studio code.
AR Libraries
A-Frame is an open-source web framework used for building Augmented reality (AR) experiences. Web-based augmented reality (WebAR) is the most advanced technology that allows users to access AR experiences directly from their smartphones. Three.js is the open-source web framework used to develop augmented reality (AR) projects.
Support
If you need help using this kit, you may reach us at the OpenWeaver Community.
Most JavaScript libraries support marker-based AR, where users scan a physical marker with their deviceâs camera to trigger an AR experience.
Some libraries support markerless AR, which uses object recognition to trigger AR experiences without requiring a physical marker. Here are the top JavaScript Augmented Reality libraries used to create web AR experiences. AR libraries support the display of 3D models in AR, which will allow developers to create immersive experiences which blend digital content with the real world. It supports the display of image and video overlays in AR which can be used for displaying information or creating interactive experiences.
It uses advanced tracking algorithms for tracking the orientation and position of the device in real-time, which will allow the AR content to be accurately placed and aligned with the real world. These libraries are optimized for best performance with the help of techniques like feature and image recognition for reducing the amount of processing required for tracking the deviceâs orientation and position.
Here is the list of top 19 JavaScript Augmented Reality libraries that are handpicked to help developers:
three.js
- Is a JavaScript library that makes creating and displaying 3D graphics in a web browser easier.
- Is one of the most popular 3D graphics libraries for the web and is widely used by web designers and developers for creating immersive and interactive experiences.
- Uses WebGL, a web standard to render 3D graphics, for creating high-performance graphics which can be displayed in a web browser.
AR.js
- Is a JavaScript library to create AR experiences on the web which uses computer vision to enable marker-based AR experiences without additional plugins or software.
- Is a lightweight library for Augmented Reality on the web with features like Location-based AR, Marker Tracking, and Image Tracking.
- Supports marker-based AR that will allow users to scan physical markers with their deviceâs camera to trigger AR experiences.
three.ar.js
- Is a JavaScript library that extends Three.js and AR.js to provide a framework for creating AR experiences in a web browser.
- Is designed to simplify the process of creating an AR experience by offering utilities and tools which integrate seamlessly with AR.js and Three.js.
- Is optimized for use on mobile devices and supports both Android and iOS.
webxr
- The WebXR device API to access VR and AR devices, like head-mounted displays and sensors on the Web.
- Is designed for creating immersive augmented reality and virtual experiences in web browsers.
- Is designed to be easy to set up and use with a simple API, allowing developers to get started quickly.
jeelizFaceFilter
- Is lightweight and does not include a 3D engine or third-party library.
- Is a JavaScript library that detects and tracks the face in real time from the camera video feed captured with WebRTC.
- Offers various demonstrations using the main WebGL 3D engines, which can overlay 3D content for AR applications.
viro
- Is a platform for developers to build Augmented and Virtual Reality experiences rapidly.
- Is a cross-platform AR/VR development platform that allows developers to create immersive experiences for web, virtual reality, and mobile device headsets.
- Provides a suite of features and tools for making creating high-quality AR and VR experiences easier.
exokit
- Is an open source JavaScript engine to create and run immersive experiences in virtual reality headsets, web browsers, and other platforms.
- Offers various features and tools, allowing developers to create and deploy immersive experiences and applications.
- Supports virtual experiences by allowing developers to create immersive experiences which can run on virtual reality headsets.
js-aruco
- Is a JavaScript library for marker-based augmented reality.
- Is an implementation of the ARToolKit library, allowing developers to create marker-based AR experiences in web browsers.
- Includes algorithms for detecting markers in real-time video streams, allowing developers to create experiences that respond to the physical world.
React-Web-AR
- Is based on the WebXR API and Three.js library, making creating high-quality AR experiences in the browser easier.
- Includes various components and tools for creating animations, 3D models, and other assets, making it easier to create high-quality AR content.
- Supports image tracking, allowing developers to create experiences triggered by specific patterns or images.
ar-facedoodle
- Is a JavaScript library that can enable developers to create AR experiences that track and draw on the userâs face in real-time.
- Is based on the WebRTC and TensorFlow.js libraries, making it possible to create a high-quality AR experience in web browsers without additional software or plugins.
- Is easy to set up and use with a simple API, allowing developers to get started quickly.
jeelizAR
- Is a JavaScript Object Detection lightweight library for AR that uses convolutional neural networks running on the GPU with WebGL.
- Is designed to work on various platforms, like mobile devices and desktops, and is compatible with various browsers.
- Includes algorithms to detect markers in real-time video streams, allowing developers to create experiences that respond to the physical world.
threex.webar
- Is a threex extension for three.js, which offers an easy-to-use extension for experimenting with augmented reality and three.js.
- Is built on top of the Three.js library, making it possible to create high-quality AR experiences with 3D graphics and animation.
- Has an active community of contributors and developers, making it easy to get support and help when required.
WebXR-emulator-extension
- Is a browser extension that helps your WebXR content creation and enables you to run WebXR applications on your browser without any XR devices.
- Includes multiple XR devices emulation, graphical device emulator control with Three.js, and cross browsers support with WebExtensions API.
- Allows developers to customize the environment they are testing their WebEX projects in, like adjusting the room lighting, scale, and other parameters.
webxr-polyfill
- Is a JavaScript implementation of the WebXR Device API and the WebXR Gamepad Module.
- Allows developers to write against the latest specifications, offering support if run on browsers that implement the WebVR 1.1 spec or on mobile devices.
- Offers a fallback mechanism for legacy browsers and provides additional functionality unavailable in native WebXR API.
3dio-js
- Is a JavaScript library that enables developers to create interactive 3D audio experiences in web browsers.
- Is built on top of the Web Audio API and Three.js, making it easy to create high-quality audio experiences with 3D spatialization.
- Various customization options allow developers to adjust the audio spatialization, sound effects, and other parameters to suit their requirements.
wasm-sudoku-solver
- Is a JavaScript library that uses WebAssembly to offer an efficient Sudoku-solving algorithm in web browsers.
- Is designed for solving sudoku puzzles quickly and accurately, making it a valuable tool for developers creating Sudoku puzzle applications or games.
- Various customization options allow developers to adjust the solving algorithm and other parameters to suit their requirements.
webxr-polyfill
- Is a JavaScript library that offers support for the WebXR API on browsers that do not natively support it.
- Is designed to enable responsive and immersive AR and VR experiences on the web, like support for hand tracking, head-mounted displays, and other features.
- Includes optimizations for performance, including asynchronous loading of resources, reducing latency, and minimizing the impact on CPU and memory usage.
aframe-ar
- Is a JavaScript library that offers an effortless way to create AR experiences on the web.
- Includes a range of customization options, allowing developers to adjust the appearance and behavior of their AR experiences
- Offers an accessible and user-friendly way for developers to create compelling AR experiences on the web.
WebAR-Article
- Is a JavaScript library created by Google AR which offers a straightforward way to embed AR content into web pages.
- Includes various customization options, allowing developers to adjust the behavior and appearance of their AR experiences.
- Can be easily integrated with other JavaScript libraries, making it possible to create more complex AR experiences.
FAQ
1. What advantages does the AR-Display AR library offer for making Augmented Reality?
Here are the advantages of using AR â Display AR library for developing AR experiences:
- Simplified Development: Developers can create AR experiences more easily without starting from scratch. It can significantly reduce development time and effort.
- Hardware Abstraction: It simplifies using various AR devices and sensors by removing complications. No matter what hardware they use, developers can always interact with it consistently.
- Optimized Performance: Optimized Performance helps improve how AR experiences work. It makes rendering more efficient, handles camera inputs, and manages 3D objects.
- Feature Set: It often comes with various built-in features and tools. It can be marker detection, gesture recognition, 3D rendering capabilities, and object tracking.
- Scalability: It helps your AR experiences work well in different situations and places.
- Rapid Prototyping: It helps with quick prototyping and testing of AR concepts. It is essential for iterating on ideas and refining the user experience.
2. How can webcam filters be used to build JavaScript Augmented Reality experiences?
Creating JavaScript-based Augmented Reality experiences using webcam filters involves using computer vision methods. It processes the live video feed from a userâs webcam and overlays virtual elements. We can achieve it by combining JavaScript, HTML, and CSS.
Here is a basic outline of how you can build such experiences:
- Access Webcam Feed: You can use the âgetUserMediaâ API to access the userâs webcam feed in the browser. It allows you to request permission to access the webcam and receive a live video stream.
- Canvas Rendering: You can make a canvas on your webpage to show the webcam and AR elements. You can use JavaScript to capture frames from the webcam and render them onto the canvas.
- Computer Vision Libraries: It can help track objects, detect features, and process images. It assists in finding markers, applying filters to video frames, and tracking movements.
- Marker Detection: The camera can display virtual markers by recognizing patterns or images.
- Applying Filters: You can improve videos by adding CSS and HTML filters and effects. You can use this for image overlays, animations, and color adjustments.
- Interaction and Animation: JavaScript can make interactive elements respond to user actions. It can also respond to movements detected by the webcam. Implement animations and transformations based on user interactions.
- Testing and Debugging: To ensure your AR experience works on all devices, test and debug it. Debug any issues related to webcam access, rendering, or the application of filters.
- Deployment: To share your AR experience online, deploy it on a web server or hosting platform.
3. Can you create immersive and interactive experiences using a JavaScript AR library?
Creating immersive and interactive AR experiences using a JavaScript AR library. The difficulty of the task depends on the library you select. It can be easy or hard. Here is a breakdown of the factors to consider:
Advantages:
- Familiar technology
- Web-based
- Quick Prototyping
- Community Support
- Web Standards
Disadvantages:
- Complexity
- Performance
- Learning Curve
- Compatibility
- Hardware Limitations
- Advanced Interactions
4. What AR experiences can you have with a JavaScript AR library?
JavaScript AR libraries can make interactive and engaging experiences using marker-based AR. The camera finds special markers, like pictures or patterns, to trigger these experiences. Here are many types of marker-based AR experiences:
- Image Overlay
- 3D Model Augmentation
- Informational Displays
- Virtual Try-on
- Interactive Games
- Educational Tools
- Navigation and Wayfinding
- Art and Creativity
- Social Sharing
- Animation Stories
- Training and Simulations
- AR Marketing Campaigns
5. Are there any limitations with JavaScript augmented reality library?
Yes, JavaScript AR libraries come with limitations. The limitations can affect the complexity of experiences you can create. They can also impact how well your applications work and how users experience them. Here are some common limitations associated with JavaScript AR libraries:
- Performance
- Device Compatibility
- Tracking Accuracy
- Limited Features
- Latency
- Battery Drain
- Network Dependency
- Marker Design Constraints
- Web Browser Limitations
- Learning Curve
- Limited Offline Functionality
- Privacy Concerns
- Lack of Native Integration
6. Which libraries are popular for tracking AR types like markers, locations, and images?
Here are some popular libraries for various types of AR experiences:
- Marker-based AR
- AR.js
- Vuforia
- Wikitude
- Location-based AR
- GeoAR
- Google ARCore and Apple ARKit
- Image Recognition-Based AR
- EasyAR
- Vuforia
- Wikitude
7. How can an existing JavaScipt AR library be integrated into a project or website?
Follow these steps to add a JavaScript AR library to your project or website. Here is how you can integrate:
- Choose the library
- Include the library files
- Set Up HTML structure
- Access Camera Feed
- Initialize the Library
- Configure and Customize
- Implement AR interactions
- Style and UI
- Testing and Debugging
- Deployment
- Ongoing Maintenance
8. Can developers find tutorials or guides for creating augmented reality with these libraries?
You can use JavaScript AR libraries to create AR experiences. Find online tutorials and guides. Here are some places to find tutorials and guides:
- Official documentation
- YouTube
- Online Learning Platforms
- Blogs and Websites
- Forums and Communities
- GitHub Repositories
- AR library Websites
- Social Media
- Webinars and Conferences
- Community Workshops
Why is Facebook is rebranding itself to focus on the metaverse? 7 years after its billion-dollar acquisition of Oculus, Facebook is pivoting itself towards virtual reality. While the earlier acquisitions of Instagram and WhatsApp successfully extended social engagement, metaverse is a much bigger bet. While metaverse looks like VR in a new bottle at some levels, betting the company's future on metaverse shows a strategic intent. It was interesting to see Microsoft announce immersive experiences on MS Teams. Multiple metaverses exist today in individual 3D gaming platforms and VR platforms. We are seeing companies fighting it out for cloud and AI platform dominance. Could Meta be positioning itself to own the user engagement channel in a new way? If users move towards using VR as a primary engagement model, this can pay off well. While this will play out over the decade or more, there are multiple low-hanging fruits to build mixed reality experiences into your applications. The kandi kit on Mixed Reality Solutions showcases popular open source libraries across AR, dedicated VR platforms, and device-specific solutions. Get ready for the next platform war!
Web Focused AR and VR Solutions
Virtual Reality Platforms
Virtual Reality Headset Focused Solutions
Virtual, Augmented, and Mixed realities bring in additional dimensions of collaboration in this distributed world. This collection represents a starter collection to experiment with different mixed reality use cases. It showcases toolkits, remote work use cases, and other exciting use cases for you to try across C#, JavaScript, and Java. If you have specific technologies or use cases in mind, use our search to find libraries specific to you.
Augmented reality enables you to bring virtual objects into your environment, augmenting the real world around with new digital content. With AR Kit, you can create experiences that integrate virtual images into the real world to interact with people, things, places, and services; simply by walking around a store, office, outdoors, or at home with a mobile device in their hands. A-Frame is a web framework for building virtual reality experiences. A-Frame is built on top of the web platform to allow it to work across multiple browsers without plugins. Arframe is a library that provides React components for working with A-Frame and React components for working with AR.js (AR library). Networked-aframe is an extension that makes it possible to use interactivity between multiple devices running A-Frame by connecting them over the WebRTC protocol. The entire list of open-source repos, popular and easy to use AR-specific libraries and a demo is provided below.
Aframe for Augmented Reality
A-Frame is an open-source web framework used for building Augmented reality (AR) experiences.
Three.js for AR Libraries
Three.js is the open-source web framework used to develop augmented reality (AR) projects.
Web AR Libraries
Web-based augmented reality (WebAR) is the most advanced technology that allows users to access AR experiences directly from their smartphones.
Node.js is a powerful web framework. It allows developers to build various applications, including virtual and augmented reality experiences. By leveraging the capabilities of Node.js, developers can create immersive applications. It can bridge the gap between real and virtual worlds.
We can use NodeJS to develop Virtual reality applications. It can range from simple demos to full-blown multi-user virtual reality experiences. Node.js provides a versatile platform. It helps build these applications, offering a pure web solution. We can access it using a web browser. By utilizing frameworks, developers can leverage React components. It helps code to create interactive and engaging virtual reality experiences.
To create VR applications, developers can start by installing the necessary modules. They can do it using the npm install command. Modules like a frame-react allow the integration of A-Frame and React. It combines the power of A-Frame's lightweight library with React's component-based approach. This results in better user experiences and improved browsing experiences for VR applications.
The WebXR API is another important tool for creating virtual reality applications. It provides access to core concepts like location-based augmented reality (AR). It allows developers to create applications that blend virtual and physical worlds.
Creating an application using Node.js involves designing the UI and implementing the code. Utilizing the modules provided by Node.js can create complex UI elements. It can simulate immersive environments through WebGL.
Debugging VR applications requires familiar tools like code editors and prompt engineering. Developers can identify and fix errors and optimize performance. It will ensure a smooth user experience. Additionally, leveraging platforms like Meta's new framework or Vuforia for marker tracking. It can enhance the functionality of VR applications.
We can use NodeJS for developing Marketing and selling VR applications. We can do it through various channels. Developers can develop a simple website to showcase their applications. Then promote them on social media platforms or sell them through online marketplaces. We can dedicate it to virtual reality content.
In conclusion, Node.js provides a robust platform. It helps create VR applications to leverage the power of the web to deliver experiences. It blurs the borders between the real and virtual worlds. Developers can create stunning VR applications using modules, libraries, and frameworks. With Node.js, the possibilities for creating captivating VR experiences are limitless.
Babylon.js
- Used to create interactive 3D experiences, including VR.
- Helps in building VR applications with rich graphics and physics simulations.
- Supports various VR devices and controllers.
- We can use it for developing VR games, architectural visualizations, and training simulations.
AR.js:
- Used to create virtual reality experiences using HTML and JavaScript.
- Helps in building immersive VR environments for web browsers.
- Supports 3D models, animations, and interactivity.
- We can use it for creating VR games, interactive simulations, and virtual tours.
react-360:
- Used to develop VR applications using React.
- Helps in building cross-platform VR experiences for web and mobile.
- Supports 360-degree media, spatial audio, and interactive UI components.
- We can use it for creating VR presentations, educational experiences, and product visualizations.
viro
- Used to build VR experiences using React.
- Helps in creating cross-platform VR applications for web and mobile.
- Supports 360-degree media, 3D models, and interactive components.
- We can use it for developing VR presentations, virtual tours, and immersive storytelling.
aframe-react
- Used to integrate A-Frame with React applications.
- It helps in combining the power of A-Frame with the flexibility of React.
- Supports creating VR experiences using React's component-based approach.
- We can use it for building VR games, data visualizations, and architectural walkthroughs.
Primrose
- Used to develop VR applications and games using WebGL.
- Helps in building VR experiences with custom shaders and graphics effects.
- Supports immersive audio, motion controllers, and physics simulations.
- We can use it for creating games, visualizations, and experiences with graphics capabilities.
WebVR-Extension
- Used to develop VR applications in the browser.
- It helps in accessing VR devices and sensors through JavaScript.
- It supports building VR experiences without any extra libraries.
- We can use it for creating browser-based VR games, educational apps, and visualizations.
FAQ
1. What is NodeJS virtual reality library? How can we use it to create virtual and augmented reality experiences?
A NodeJS VR library is a collection of modules, frameworks, and tools. It enables developers to create virtual and augmented reality experiences using NodeJS. It provides the necessary components and functionalities to build immersive applications. It will merge the real and virtual worlds. By leveraging the NodeJS capabilities, developers can create interactive and engaging VR experiences.
2. What web solution do NodeJs provide for developing React VR applications?
NodeJS provides a web solution for developing React VR applications. This web solution helps leverage the React components and code to create applications. With NodeJS, developers can use frameworks to build cross-platform VR experiences.
3. How do I use the npm start command to develop a React application with NodeJS?
You can use the npm start order to develop a React application with NodeJS. This command lets you see your real-time changes as you build your application. It helps compile and serve your application. Once you have set up and established the necessary dependencies using npm install. We can also set it by running npm start starts the development server.
4. Can we use A-Frame and React to build a web-based virtual reality experience?
A-Frame and React can build a web-based VR experience. A-Frame is a powerful library for creating virtual reality scenes and environments. It helps create interactive and immersive virtual reality experiences. In contrast, React provides a component-based approach to building user interfaces. By combining A-Frame and React, developers can leverage the strengths of both frameworks.
5. How can we implement the Location API in an application built on NodeJS?
We can implement the location API in an application built on NodeJS. We can do so by utilizing the capabilities of the WebXR API. We can build WebXR API on top of the WebVR API. It provides access to location-based augmented reality (AR). By utilizing this API, developers can create applications. It will help integrate virtual elements into the physical world. It will enhance the experience by blending real and virtual environments.
6. What are some advantages of WebXR when creating a VR experience with NodeJS?
WebXR offers several advantages when creating a VR experience with NodeJS. It provides a standardized and browser-supported API. It allows developers to create immersive content for various devices and platforms. WebXR simplifies the development process by providing access to VR and AR features. It does so by enabling developers to create cross-platform experiences easily.
One of the advantages of using VRChat is that you can use third-party libraries. This includes things like cats-blender-plugin, UdonSharp, and VRCX.
The main reason why people choose to use these libraries is because they provide a ready-to-use avatar model with animations. This saves you time and effort, as you don't have to create your own model from scratch or spend hours on animation. cats-blender-plugin provides a number of utilities for working with meshes and textures. This includes mesh generation, mesh manipulation, and texture extraction from image files. You may also find it useful if you need access to some of the more advanced features of Blender's API. The VRChat SDK provides an API for interacting with users and avatars, as well as an interface for adding new features to your game or experience. There are several popular open source VRChat libraries available for developers.
cats-blender-plugin
- The Cats Blender Plugin is a tool designed for Blender.
- cat's blender plugin is a Python library used in Gaming and game Engine applications.
- A tool designed to shorten steps needed to import and optimize models into VRChat.
cats-blender-plugin
- A popular 3D modeling and animation software.
- The plugin focused on facilitating the import and export of 3D models.
- The Cats Blender Plugin is used in combination with Unity to streamline.
April-Tag-VR-FullBody-Tracker
- AprilTag is a popular system for detecting markers in images.
- These markers are black-and-white patterns that can be identified by computer vision.
- AprilTags are used in augmented reality and virtual reality applications for tracking.
UdonSharp
- UdonSharp is a C# library.
- UdonSharp allows developers to write scripts in C# for VRChat worlds and avatars.
- It's tailored for writing scripts for VRChat, a popular virtual reality platform.
VRCX
- VRCX is a JavaScript library typically used in Gaming and video Game applications.
- VRCX is designed to enhance the VRChat experience by providing more features.
- VRCX allows users to track the online status of their friends in VRChat.
PoiyomiToonShader
- Poiyomi Toon Shader is a custom shader for Unity, a popular game development engine.
- The shader is designed to create a toon or cel-shaded look for 3D models.
- This type of shader is often used in various applications.
osc
- OSC is a C# library.
- Osc has no bugs, It has no vulnerabilities.
- It has a Permissive License, and it has low support.
VRCMods
- VRCMods is a C# library typically used in Gaming, Game Engine applications.
- VRCMods has no bugs, It has no vulnerabilities.
- This repository contains my mods for VRChat.
CyanEmu
- CyanEmu is a term associated with modifications or patches for certain video games.
- CyanEmu appears to be related to bypassing certain protections or restrictions in games.
- It's crucial to emphasize that using unofficial patches, cracks, or modifications.
vrchatapi.github.io
- vrchatapi.github.io is an HTML library used in Web Services and REST applications.
- vrchatapi.github.io has no bugs, It has no vulnerabilities.
- vrchatapi.github.io has a low active ecosystem.
material-combiner-addon
- material-combiner-addon is a Python library used in Plugin, Addon, and Three.js applications.
- material-combiner-addon has a Permissive License.
- material-combiner-addon has two bugs, It has four vulnerabilities.
XSOverlay-VRChat-Parser
- XSOverlay-VRChat-Parser is a C# library.
- A tool for parsing the VRChat output log and leveraging XSNotifications to displays.
- The application is built on .NET 5.0 and is both framework-dependent and standalone builts.
FAQ
1. Is VRChat age restricted?
The platform built to cater to people 13+ by knowing that it does not make sense to have warnings. To try to scare away their target user base from using the platform because they are under 18.
2. Why is VRChat popular?
VRChat's popularity has been attributed to its use by YouTubers and Twitch streamers. VRChat has spawned media such as a weekly newspaper in its forums. It talks shows and podcasts dedicated to a discussion of the game.
3. What does VRChat use?
VRChat is a popular and free multiplayer online experience. As you may guess from the name, it's compatible with the HTC Vive and Oculus Rift virtual reality headsets. It's accessible on your computer via Steam or the VRChat website.
4. Can I play VRChat on my phone?
The VRChat Beta is open to everyone with a compatible Android device. The Android Alpha is locked to accounts with VRChat Plus. The Beta is opens to everyone who owns a device that meets our requirements.
5. What engine does VRChat use?
The VRChat Software Development Kit enables users to create interactive worlds and avatars. All tools that Unity provides should work in VRChat. It includes lighting, nav mesh, and animations.
With Facebook rebranding itself as Meta and multiple corporations betting on the Metaverse, the interest for development on Metaverse and Extended Reality (XR) have peaked. And itâs no surprise: XR technologies are changing the way we interact with our environment while offering immersive experiences. But what is Extended Reality (XR)? Extended Reality (XR) is an environment or experience that combines virtual and physical realities through the use of augmented reality (AR), mixed reality, virtual reality (VR) or any similar immersive technologies. Think Pokemon Go or The Walking Dead: Our World â games that combine your phoneâs camera with a layer of 3D animated objects superimposed on top of it. Or imagine being able to virtually open up a virtual world inside of real-world buildings, like in Ready Player One. Whether youâre new to XR and just starting out, or youâre looking for specific tools to help you in your development process, you can use the following open source resources for your Extended Reality (XR) applications.
Trending Discussions on Virtual Reality
Algorithm to fill arbitrary marked/selected tiles on a square grid with the smallest number of rectangles?
Centering element in LaTeX table with fixed column width
How can I display an array of strings of an object as spans in a JS template literal?
Python regular expression unable to find pattern - using pyspark on Apache Spark
Why is my website slightly wider than the window?
Unity Gameobject not visible in Hololens 2
Why does my webpage look different upon resizing the browser window VS on mobile?
NoClassDefFoundError in OSGi although it is exported and imported
Why does the mobile-version navbar pops up automatically when downsizing screen?
count sum of values of selected radio buttons which have particular data-id
QUESTION
Algorithm to fill arbitrary marked/selected tiles on a square grid with the smallest number of rectangles?
Asked 2022-Jan-12 at 15:58What I am asking here is an algorithm question. I'm not asking for specifics of how to do it in the programming language I'm working in or with the framework and libraries I'm currently using. I want to know how to do this in principle.
As a hobby, I am working on an open source virtual reality remake of the 1992 first-person shooter game Wolfenstein 3D. My program will support classic mods and map packs for WOLF3D made in the original format from the 90s. This means that my program will not know in advance what the maps are going to be. They are loaded in at runtime from user provided files.
A Wolfenstein 3D map is a 2D square grid of normally 64x64 tiles. let's assume I have a 2D array of bools which return true if a particular tile can be traversed by the player and false if the tile will never be traversable no matter what happens in the game.
I want to generate rectangular collision objects for a modern game engine which will prevent collisions into non traversable tiles on the map. Right now, I have a small collision object on each surface of each wall tile with a traversible tile next to it and that is very inefficient because it makes way more collision objects than necessary. What I should have instead is a smaller number of large rectangles which fill all of the squares on the grid where that 2D array I mentioned has a false value to indicate non-traversible.
When I search for any algorithms or research that might have been done for problems similar to this, I find lots of information about rectangle packing for the purposes of making texture atlases for games, which packs rectangles into a square, but I haven't found anything that tries to pack the smallest number of rectangles into an arbitrary set of selected / marked square tiles.
The naive approach which occurs to me is to first make 64 rectangles representing 64 rows and then chop out whatever squares are traversible. but I suspect that there's got to be an algorithm which can do better, meaning that it can fill the same spaces with a smaller number of rectangles. Maybe something that starts with my naive approach and then checks each rectangle for adjacent rectangles which it could merge with? But I'm not sure how far to take that approach or if it will even truly reduce the number of rectangles.
The result doesn't have to be perfect. I am just fishing here to see if anyone has any magic tricks that could take me even a little bit beyond the naive approach.
Has anyone done this before? What is it called? Just knowing what some of the vocabulary words I would need to even talk about this are would help. Thanks!
(later edit)
Here is some sample input as comma-separated values. The 1s represent the area that must be filled with the rectangles while the 0s represent the area that should not be filled with the rectangles.
I expect that the result would be a list of sets of 4 integers where each set represents a rectangle like this:
- First integer would be the x coordinate of the left/western edge of the rectangle.
- Second integer would be the y coordinate of the top/northern edge of the rectangle.
- Third integer would be the width of the rectangle.
- Fourth integer would be the depth of the rectangle.
My program is in C# but I'm sure I can translate anything in a normal mainstream general purpose programming language or psuedocode.
ANSWER
Answered 2022-Jan-12 at 14:461Mark all tiles as not visited
2For each tile:
3 skip if the tile is not a top-left corner or was visited before
4 # now, the tile is a top-left corner
5 expand right until top-right corner is found
6 expand down
7 save the rectangle
8 mark all tiles in the rectangle as visited
9
However simplistic it looks, it will likely generate minimal number of rectangles - simply because we need at least one rectangle per pair of top corners.
For faster downward expansion, it makes sense to precompute a table holding sum of all element top and left from the tile (aka integral image).
For non-overlapping rectangles, worst case complexity for an n x n
"image" should not exceed O(n^3)
. If rectangles can overlap (would result in smaller number of them), integral image optimization is not applicable and the worst case will be O(n^4)
.
QUESTION
Centering element in LaTeX table with fixed column width
Asked 2021-Dec-02 at 10:09I am having some problems with LaTeX tables. In particular, I have the following code:
1\begin{table}[ht]
2 \centering
3 \setlength{\tabcolsep}{2pt}
4 \renewcommand{\arraystretch}{1.5}
5 \begin{tabular}{|p{0.15\textwidth}>{\centering}p{0.15\textwidth}>{\centering}p{0.15\textwidth}>{\centering}p{0.15\textwidth}>{\centering}p{0.15\textwidth}p{0.15\textwidth}|}
6 \hline
7 & \textbf{Virtual Reality Experience} & \textbf{First Person Experience} & \textbf{Multimedia Presentation Experience} & \multicolumn{2}{c|}{\textbf{Full sample}} \\
8 \hline
9 & \textit{n} & \textit{n} & \textit{n} & \textit{n} & \textit{\%} \\
10 \hline
11 \textbf{Gender} &&&&& \\
12 Female & 12 & 10 & 18 & 40 & 52.6 \\
13 Male & 10 & 13 & 13 & 36 & 47.4 \\
14 \hline
15 \textbf{Educational level} &&&&& \\
16 High School & 8 & 5 & 6 & 19 & 25.0 \\
17 Bachelor's Degree & 13 & 9 & 19 & 41 & 53.9 \\
18 Master's Degree & 1 & 8 & 6 & 15 & 19.7 \\
19 PhD & 0 & 1 & 0 & 1 & 1.3 \\
20 \hline \hline
21 \textbf{Age} &&&&& \\
22 Mean & 23.6 & 24.6 & 24 & \multicolumn{2}{c|}{24.1} \\
23 Median & 23.6 & 24.6 & 24 & \multicolumn{2}{c|}{24.1} \\
24 \hline
25 \end{tabular}
26 \caption{Participants demographic information}
27 \label{tab:demographic}
28\end{table}
29
This code gives me the following output: generated table.
I would like to center also the last column (using, like in the other columns, >{\centering}
). However, when I try to do so, I have a lot of errors:
-
Misplaced
\noalign
- You have used a\hline
command in the wrong place, probably outside a table. If the\hline
command is written inside a table, try including\\
before it (on the 3rd\hline
) -
Extra alignment tab has been changed to
\cr
- You have written too many alignment tabs in a table, causing one of them to be turned into a line break. Make sure you have specified the correct number of columns in your table (on the\textbf{Gender}
line) -
LaTeX Error: There's no line here to end - You have used a
\\
or\newline
command where LaTeX was not expecting one. Make sure that you only use line breaks after blocks of text, and be careful using linebreaks inside lists and other environments (on the\textbf{Gender}
line)
Could anyone help me? The table is far more beautiful if I manage to center also the last line.
ANSWER
Answered 2021-Dec-02 at 10:09You can centre the last column with >{\centering\arraybackslash}
1\begin{table}[ht]
2 \centering
3 \setlength{\tabcolsep}{2pt}
4 \renewcommand{\arraystretch}{1.5}
5 \begin{tabular}{|p{0.15\textwidth}>{\centering}p{0.15\textwidth}>{\centering}p{0.15\textwidth}>{\centering}p{0.15\textwidth}>{\centering}p{0.15\textwidth}p{0.15\textwidth}|}
6 \hline
7 & \textbf{Virtual Reality Experience} & \textbf{First Person Experience} & \textbf{Multimedia Presentation Experience} & \multicolumn{2}{c|}{\textbf{Full sample}} \\
8 \hline
9 & \textit{n} & \textit{n} & \textit{n} & \textit{n} & \textit{\%} \\
10 \hline
11 \textbf{Gender} &&&&& \\
12 Female & 12 & 10 & 18 & 40 & 52.6 \\
13 Male & 10 & 13 & 13 & 36 & 47.4 \\
14 \hline
15 \textbf{Educational level} &&&&& \\
16 High School & 8 & 5 & 6 & 19 & 25.0 \\
17 Bachelor's Degree & 13 & 9 & 19 & 41 & 53.9 \\
18 Master's Degree & 1 & 8 & 6 & 15 & 19.7 \\
19 PhD & 0 & 1 & 0 & 1 & 1.3 \\
20 \hline \hline
21 \textbf{Age} &&&&& \\
22 Mean & 23.6 & 24.6 & 24 & \multicolumn{2}{c|}{24.1} \\
23 Median & 23.6 & 24.6 & 24 & \multicolumn{2}{c|}{24.1} \\
24 \hline
25 \end{tabular}
26 \caption{Participants demographic information}
27 \label{tab:demographic}
28\end{table}
29\documentclass{article}
30
31\usepackage{array}
32
33\begin{document}
34
35\begin{table}[ht]
36 \centering
37 \setlength{\tabcolsep}{2pt}
38 \renewcommand{\arraystretch}{1.5}
39 \begin{tabular}{
40 |
41 p{0.15\textwidth}
42 >{\centering}p{0.15\textwidth}
43 >{\centering}p{0.15\textwidth}
44 >{\centering}p{0.15\textwidth}
45 >{\centering}p{0.15\textwidth}
46 >{\centering\arraybackslash}p{0.15\textwidth}
47 |
48 }
49 \hline
50 & \textbf{Virtual Reality Experience} & \textbf{First Person Experience} & \textbf{Multimedia Presentation Experience} & \multicolumn{2}{c|}{\textbf{Full sample}} \\
51 \hline
52 & \textit{n} & \textit{n} & \textit{n} & \textit{n} & \textit{\%} \\
53 \hline
54 \textbf{Gender} &&&&& \\
55 Female & 12 & 10 & 18 & 40 & 52.6 \\
56 Male & 10 & 13 & 13 & 36 & 47.4 \\
57 \hline
58 \textbf{Educational level} &&&&& \\
59 High School & 8 & 5 & 6 & 19 & 25.0 \\
60 Bachelor's Degree & 13 & 9 & 19 & 41 & 53.9 \\
61 Master's Degree & 1 & 8 & 6 & 15 & 19.7 \\
62 PhD & 0 & 1 & 0 & 1 & 1.3 \\
63 \hline \hline
64 \textbf{Age} &&&&& \\
65 Mean & 23.6 & 24.6 & 24 & \multicolumn{2}{c|}{24.1} \\
66 Median & 23.6 & 24.6 & 24 & \multicolumn{2}{c|}{24.1} \\
67 \hline
68 \end{tabular}
69 \caption{Participants demographic information}
70 \label{tab:demographic}
71\end{table}
72
73
74\end{document}
75
QUESTION
How can I display an array of strings of an object as spans in a JS template literal?
Asked 2021-Aug-20 at 22:55I have an array of objects. In each object there is a key
with a value
of an array of strings (the number of strings changes in each object). How can I display each string of the array as <span>
in a JS
template literal?
If the array contains 2 strings, than 2 <span>
should appear,
If 3 strings, 3 <span>
etc.
Code:
1let items = [{
2 "id": 1,
3 "name": "item 1",
4 "captionTags": ["Stills", "Animation", "Virtual Reality"]
5},
6{
7 "id": 2,
8 "name": "item 2",
9 "captionTags": ["Configurator", "Animation", "Application"]
10},
11{
12 "id": 3,
13 "name": "item 3",
14 "captionTags": ["Stills", "Configurator"]
15}];
16
17function displayItems() {
18 let itemsContainer = document.querySelector('.items-container');
19 itemsContainer.innerHTML = '';
20 items.forEach(item => {
21
22 itemsContainer.innerHTML += `
23 <div class="items-wrapper">
24 <div class="item-caption">
25 <span class="item-caption-col">
26 <h3>${item.name}</h3>
27 <span class="item-caption-tags">
28 I WANT TO DISPLAY HERE EACH ELEMENT OF CAPTION TAGS ARRAY IN EACH OBJECT
29 AS SPANS
30 </span>
31 </span>
32 </div>
33 </div>`
34 });
35};
36
37
38displayItems();
39
Thank you in advance for your help!
ANSWER
Answered 2021-Aug-20 at 12:29Try this:
1let items = [{
2 "id": 1,
3 "name": "item 1",
4 "captionTags": ["Stills", "Animation", "Virtual Reality"]
5},
6{
7 "id": 2,
8 "name": "item 2",
9 "captionTags": ["Configurator", "Animation", "Application"]
10},
11{
12 "id": 3,
13 "name": "item 3",
14 "captionTags": ["Stills", "Configurator"]
15}];
16
17function displayItems() {
18 let itemsContainer = document.querySelector('.items-container');
19 itemsContainer.innerHTML = '';
20 items.forEach(item => {
21
22 itemsContainer.innerHTML += `
23 <div class="items-wrapper">
24 <div class="item-caption">
25 <span class="item-caption-col">
26 <h3>${item.name}</h3>
27 <span class="item-caption-tags">
28 I WANT TO DISPLAY HERE EACH ELEMENT OF CAPTION TAGS ARRAY IN EACH OBJECT
29 AS SPANS
30 </span>
31 </span>
32 </div>
33 </div>`
34 });
35};
36
37
38displayItems();
39let items = [{
40 "id": 1,
41 "name": "item 1",
42 "captionTags": ["Stills", "Animation", "Virtual Reality"]
43 },
44 {
45 "id": 2,
46 "name": "item 2",
47 "captionTags": ["Configurator", "Animation", "Application"]
48 },
49 {
50 "id": 3,
51 "name": "item 3",
52 "captionTags": ["Stills", "Configurator"]
53 }];
54
55function displayItems() {
56 let itemsContainer = document.querySelector('.items-container');
57 itemsContainer.innerHTML = '';
58 items.forEach(item => {
59
60 itemsContainer.innerHTML += `
61 <div class="items-wrapper">
62 <div class="item-caption">
63 <span class="item-caption-col">
64 <h3>${item.name}</h3>
65 `;
66 item.captionTags.forEach(tag => {
67 itemsContainer.innerHTML +=`<span class="item-caption-tags"> ${tag} </span>`
68 })
69 itemsContainer.innerHTML +=`
70 </span>
71 </div>
72 </div>`
73 });
74};
75
76
77displayItems();
1let items = [{
2 "id": 1,
3 "name": "item 1",
4 "captionTags": ["Stills", "Animation", "Virtual Reality"]
5},
6{
7 "id": 2,
8 "name": "item 2",
9 "captionTags": ["Configurator", "Animation", "Application"]
10},
11{
12 "id": 3,
13 "name": "item 3",
14 "captionTags": ["Stills", "Configurator"]
15}];
16
17function displayItems() {
18 let itemsContainer = document.querySelector('.items-container');
19 itemsContainer.innerHTML = '';
20 items.forEach(item => {
21
22 itemsContainer.innerHTML += `
23 <div class="items-wrapper">
24 <div class="item-caption">
25 <span class="item-caption-col">
26 <h3>${item.name}</h3>
27 <span class="item-caption-tags">
28 I WANT TO DISPLAY HERE EACH ELEMENT OF CAPTION TAGS ARRAY IN EACH OBJECT
29 AS SPANS
30 </span>
31 </span>
32 </div>
33 </div>`
34 });
35};
36
37
38displayItems();
39let items = [{
40 "id": 1,
41 "name": "item 1",
42 "captionTags": ["Stills", "Animation", "Virtual Reality"]
43 },
44 {
45 "id": 2,
46 "name": "item 2",
47 "captionTags": ["Configurator", "Animation", "Application"]
48 },
49 {
50 "id": 3,
51 "name": "item 3",
52 "captionTags": ["Stills", "Configurator"]
53 }];
54
55function displayItems() {
56 let itemsContainer = document.querySelector('.items-container');
57 itemsContainer.innerHTML = '';
58 items.forEach(item => {
59
60 itemsContainer.innerHTML += `
61 <div class="items-wrapper">
62 <div class="item-caption">
63 <span class="item-caption-col">
64 <h3>${item.name}</h3>
65 `;
66 item.captionTags.forEach(tag => {
67 itemsContainer.innerHTML +=`<span class="item-caption-tags"> ${tag} </span>`
68 })
69 itemsContainer.innerHTML +=`
70 </span>
71 </div>
72 </div>`
73 });
74};
75
76
77displayItems();span.item-caption-tags {
78 border: 1px solid black
79}
1let items = [{
2 "id": 1,
3 "name": "item 1",
4 "captionTags": ["Stills", "Animation", "Virtual Reality"]
5},
6{
7 "id": 2,
8 "name": "item 2",
9 "captionTags": ["Configurator", "Animation", "Application"]
10},
11{
12 "id": 3,
13 "name": "item 3",
14 "captionTags": ["Stills", "Configurator"]
15}];
16
17function displayItems() {
18 let itemsContainer = document.querySelector('.items-container');
19 itemsContainer.innerHTML = '';
20 items.forEach(item => {
21
22 itemsContainer.innerHTML += `
23 <div class="items-wrapper">
24 <div class="item-caption">
25 <span class="item-caption-col">
26 <h3>${item.name}</h3>
27 <span class="item-caption-tags">
28 I WANT TO DISPLAY HERE EACH ELEMENT OF CAPTION TAGS ARRAY IN EACH OBJECT
29 AS SPANS
30 </span>
31 </span>
32 </div>
33 </div>`
34 });
35};
36
37
38displayItems();
39let items = [{
40 "id": 1,
41 "name": "item 1",
42 "captionTags": ["Stills", "Animation", "Virtual Reality"]
43 },
44 {
45 "id": 2,
46 "name": "item 2",
47 "captionTags": ["Configurator", "Animation", "Application"]
48 },
49 {
50 "id": 3,
51 "name": "item 3",
52 "captionTags": ["Stills", "Configurator"]
53 }];
54
55function displayItems() {
56 let itemsContainer = document.querySelector('.items-container');
57 itemsContainer.innerHTML = '';
58 items.forEach(item => {
59
60 itemsContainer.innerHTML += `
61 <div class="items-wrapper">
62 <div class="item-caption">
63 <span class="item-caption-col">
64 <h3>${item.name}</h3>
65 `;
66 item.captionTags.forEach(tag => {
67 itemsContainer.innerHTML +=`<span class="item-caption-tags"> ${tag} </span>`
68 })
69 itemsContainer.innerHTML +=`
70 </span>
71 </div>
72 </div>`
73 });
74};
75
76
77displayItems();span.item-caption-tags {
78 border: 1px solid black
79}<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
80<div class="items-container" > </div>
css
is for example only
QUESTION
Python regular expression unable to find pattern - using pyspark on Apache Spark
Asked 2021-Jul-15 at 21:31Can someone let me why the regular expression
1df = df2.withColumn("extracted", F.regexp_extract("title", "[Pp]ython", 0))
2
Can find the pattern 'Python' or 'python' from the followng column called title
1df = df2.withColumn("extracted", F.regexp_extract("title", "[Pp]ython", 0))
2title
3A fast PostgreSQL client library for Python: 3x faster than psycopg2
4A project template for data science in Python
5A simple python framework to build/train LUIS models
6An Introduction to Stock Market Data Analysis with Python (Part 1)
7Asynchronous Python
8Cubr A Rubiks Cube Solver Written in Python and using Webcam Input (2013)
9Python 4 Kids: Python for Kids: Python 3 Project 10
10
But the regular expression can't find the pattern Python or python from the following
1df = df2.withColumn("extracted", F.regexp_extract("title", "[Pp]ython", 0))
2title
3A fast PostgreSQL client library for Python: 3x faster than psycopg2
4A project template for data science in Python
5A simple python framework to build/train LUIS models
6An Introduction to Stock Market Data Analysis with Python (Part 1)
7Asynchronous Python
8Cubr A Rubiks Cube Solver Written in Python and using Webcam Input (2013)
9Python 4 Kids: Python for Kids: Python 3 Project 10
10title
11Python Core Development Sprint 2016: 3.6 and beyond
12Hypothesis.works articles: 3.5.0 and 3.5.1 Releases of Hypothesis for Python
13Total pip packages downloaded, separated by Python versions (June August 2016)
14PEP 530: Asynchronous Comprehensions in Python 3.6
15Python 2.7 still reigns supreme in pip installs
16CheckiO games for Python and JavaScript coders. ClassRoom support is included
17VR Zero, Virtual Reality on the RaspberryPi, in Python
18
Thanks
ANSWER
Answered 2021-Jul-15 at 21:31Use the ignore case regex;
(?i)
-ignore or case-insensitive mode ON
Data
data=[
1df = df2.withColumn("extracted", F.regexp_extract("title", "[Pp]ython", 0))
2title
3A fast PostgreSQL client library for Python: 3x faster than psycopg2
4A project template for data science in Python
5A simple python framework to build/train LUIS models
6An Introduction to Stock Market Data Analysis with Python (Part 1)
7Asynchronous Python
8Cubr A Rubiks Cube Solver Written in Python and using Webcam Input (2013)
9Python 4 Kids: Python for Kids: Python 3 Project 10
10title
11Python Core Development Sprint 2016: 3.6 and beyond
12Hypothesis.works articles: 3.5.0 and 3.5.1 Releases of Hypothesis for Python
13Total pip packages downloaded, separated by Python versions (June August 2016)
14PEP 530: Asynchronous Comprehensions in Python 3.6
15Python 2.7 still reigns supreme in pip installs
16CheckiO games for Python and JavaScript coders. ClassRoom support is included
17VR Zero, Virtual Reality on the RaspberryPi, in Python
18 (1,"Python Core Development Sprint 2016: 3.6 and beyond"),
19 (2,"Hypothesis.works articles: 3.5.0 and 3.5.1 Releases of Hypothesis for Python"),
20 (3,"CheckiO games for python and JavaScript coders. ClassRoom support is included")
21 ]
22df=spark.createDataFrame(data, ['id','title'])
23df.show(truncate=False)
24
Solution
1df = df2.withColumn("extracted", F.regexp_extract("title", "[Pp]ython", 0))
2title
3A fast PostgreSQL client library for Python: 3x faster than psycopg2
4A project template for data science in Python
5A simple python framework to build/train LUIS models
6An Introduction to Stock Market Data Analysis with Python (Part 1)
7Asynchronous Python
8Cubr A Rubiks Cube Solver Written in Python and using Webcam Input (2013)
9Python 4 Kids: Python for Kids: Python 3 Project 10
10title
11Python Core Development Sprint 2016: 3.6 and beyond
12Hypothesis.works articles: 3.5.0 and 3.5.1 Releases of Hypothesis for Python
13Total pip packages downloaded, separated by Python versions (June August 2016)
14PEP 530: Asynchronous Comprehensions in Python 3.6
15Python 2.7 still reigns supreme in pip installs
16CheckiO games for Python and JavaScript coders. ClassRoom support is included
17VR Zero, Virtual Reality on the RaspberryPi, in Python
18 (1,"Python Core Development Sprint 2016: 3.6 and beyond"),
19 (2,"Hypothesis.works articles: 3.5.0 and 3.5.1 Releases of Hypothesis for Python"),
20 (3,"CheckiO games for python and JavaScript coders. ClassRoom support is included")
21 ]
22df=spark.createDataFrame(data, ['id','title'])
23df.show(truncate=False)
24df.withColumn('extract', F.regexp_extract(col('title'),'(?i)[P]ython',0)).show()
25
Outcome
1df = df2.withColumn("extracted", F.regexp_extract("title", "[Pp]ython", 0))
2title
3A fast PostgreSQL client library for Python: 3x faster than psycopg2
4A project template for data science in Python
5A simple python framework to build/train LUIS models
6An Introduction to Stock Market Data Analysis with Python (Part 1)
7Asynchronous Python
8Cubr A Rubiks Cube Solver Written in Python and using Webcam Input (2013)
9Python 4 Kids: Python for Kids: Python 3 Project 10
10title
11Python Core Development Sprint 2016: 3.6 and beyond
12Hypothesis.works articles: 3.5.0 and 3.5.1 Releases of Hypothesis for Python
13Total pip packages downloaded, separated by Python versions (June August 2016)
14PEP 530: Asynchronous Comprehensions in Python 3.6
15Python 2.7 still reigns supreme in pip installs
16CheckiO games for Python and JavaScript coders. ClassRoom support is included
17VR Zero, Virtual Reality on the RaspberryPi, in Python
18 (1,"Python Core Development Sprint 2016: 3.6 and beyond"),
19 (2,"Hypothesis.works articles: 3.5.0 and 3.5.1 Releases of Hypothesis for Python"),
20 (3,"CheckiO games for python and JavaScript coders. ClassRoom support is included")
21 ]
22df=spark.createDataFrame(data, ['id','title'])
23df.show(truncate=False)
24df.withColumn('extract', F.regexp_extract(col('title'),'(?i)[P]ython',0)).show()
25+---+--------------------+-------+
26| id| title|extract|
27+---+--------------------+-------+
28| 1|Python Core Devel...| Python|
29| 2|Hypothesis.works ...| Python|
30| 3|CheckiO games fo...| python|
31+---+--------------------+-------+
32
QUESTION
Why is my website slightly wider than the window?
Asked 2021-May-04 at 13:42I'm working on a school project in which I have to create a small Webpage introducing you to a topic of choice.
Unfortunately my website has a horizontal scrollbar and I don't have a clue which element causes it. I tried disabling the elements one after another but haven't found a solution
Thanks in advance for any tips!
1<!doctype html>
2<html lang="de">
3 <head>
4 <title>VR</title>
5 <!-- Required meta tags -->
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8
9 <!-- Bootstrap CSS -->
10 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
11 <link rel="stylesheet" href="style.css">
12 </head>
13 <body>
14 <nav id="colorlib-main-nav" role="navigation">
15 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle active"><i></i></a>
16 <div class="js-fullheight colorlib-table">
17 <div class="img" style="background-image: url(images/bg_3.jpg);"></div>
18 <div class="colorlib-table-cell js-fullheight">
19 <div class="row no-gutters">
20 <div class="col-md-12 text-center">
21 <h1 class="mb-4"><a href="index.html" class="logo">Company Logo</a></h1>
22 <ul>
23 <li class="active"><a href="index.html"><span>Home</span></a></li>
24 <li><a href="about.html"><span>About</span></a></li>
25 <li><a href="blog.html"><span>Blog</span></a></li>
26 <li><a href="contact.html"><span>Contact</span></a></li>
27 </ul>
28 </div>
29 </div>
30 </div>
31 </div>
32 </nav>
33
34 <div class="header h-100">
35 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle"><i></i></a>
36 <h1 id="h-100" class="introduction h-100">Virtual Reality</h1>
37
38 </div>
39
40 <div class="h-100">
41 <h2 class="center">Was ist Virtual Reality (VR)</h2>
42 <p class="center">Eine virtuelle Welt oder ein Computerspiel, in das der Nutzer mit Hilfe eines VR-Headsets vollständig eintauchen kann</p>
43 </div>
44
45
46 <div id="vr-headset-kategorien" class="">
47 <!--Show each one as a full screen information - Picture or animation embeded at the left side - Text about it right-->
48 <div id="standalone" class="row">
49 <!---->
50 <div class="vr-left_side container col-lg-6">
51 <div class="sketchfab-embed-wrapper"> <iframe title="Quest 2 Headset - FanArt" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/ee496aa030bf4f37a52b445196796af3/embed?autospin=1&autostart=1&ui_hint=0"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/quest-2-headset-fanart-ee496aa030bf4f37a52b445196796af3?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Quest 2 Headset - FanArt </a> by <a href="https://sketchfab.com/josevillotguisan?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> joseVG </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
52 </div>
53
54 <div class="vr-right_side container col-lg-6">
55 <h3>Standalone</h3>
56
57 <p>Standalone VR-Headsets ben&ouml;tigen nur WLAN und Strom. In der VR-Brille ist ein eigener Prozessor eingebaut. Damit ist dieser Art super f&uuml;r Anf&auml;nger geeignet</p>
58
59 <p>
60 Vorteile:<br />
61 Kein guter PC ben&ouml;tigt<br />
62 Niedriger Einstiegspreis trotz guter Hardware<br/>
63 Gut optimierbar, da es fĂźr das Heaset nur einen Prozessor gibt</p>
64
65 <p>Nachteile:<br />
66 Je nach Headset schlechte Performance bei fordernden Spielen</p>
67 </div>
68
69 </div>
70
71 <div id="pc" class="row">
72 <div class="vr-left_side container col-lg-6">
73 <div class="sketchfab-embed-wrapper"> <iframe title="HTC Vive" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/4cee0970fe60444ead77d41fbb052a33/embed?autospin=1&autostart=1&ui_hint=0"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/htc-vive-4cee0970fe60444ead77d41fbb052a33?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> HTC Vive </a> by <a href="https://sketchfab.com/EternalRealm?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Eternal Realm </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
74 </div>
75
76 <div class="vr-right_side container col-lg-6">
77 <h3>PC-VR</h3>
78 <p>PC-VR Headsets funktionieren nur zusammen mit einem PC. Sie werden &uuml;ber ein langes Kabel verbunden. Mit einem passenden PC kann ein PC-VR Headset ein extrem sch&ouml;nes Bild liefern. Der Einstiegspreis ist jedoch sehr hoch, daher sind sie vor allem f&uuml;r Enthusiasten geeignet</p>
79
80 <p>Vorteile:<br />
81 Hohe Aufl&ouml;sung<br />
82 Wenig Lags</p>
83
84 <p>Nachteile:<br />
85 Hoher Einstiegspreis</p>
86 </div>
87 </div>
88
89 <div id="fulldive" class="row">
90 <div class="vr-left_side container col-lg-6">
91 <div class="sketchfab-embed-wrapper"> <iframe title="neuraLink" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/6a157c614d0641c2a2d2c7c7628fb01b/embed?autospin=1&autostart=1"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/neuralink-6a157c614d0641c2a2d2c7c7628fb01b?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> neuraLink </a> by <a href="https://sketchfab.com/rfarencibia?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> rfarencibia </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
92 </div>
93
94 <div class="vr-right_side container col-lg-6">
95 <h3>Full-Dive VR</h3>
96 <p>Tauche komplett in die VR-Welt ein. Full-Dive VR-Headsets befinden sich bereits in Entwicklung. Bei diesem Ansatz wird keine VR-Brille verwendet, die wie ein Monitor funktioniert sondern Full-Dive VR-Headsets greifen direkt auf die Seh-, Tast-, und weitere Nerven zu. Daher ist dies auch die umstrittenste Technologie</p>
97
98 <p>Vorteile:<br />
99 Unvergleichliche Immersion</p>
100
101 <p>Nachteile:<br />
102 Sicherheit - Z.B. In der VR-Welt einsperren - Unwahrscheinlich aber m&ouml;glich</p>
103 </div>
104 </div>
105
106 </div>
107
108
109
110
111 <!-- Optional JavaScript -->
112 <!-- jQuery first, then Popper.js, then Bootstrap JS -->
113 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
114 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
115 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
116 <script>
117 (function($) {
118
119 "use strict";
120
121 var fullHeight = function() {
122
123 $('.js-fullheight').css('height', $(window).height());
124 $(window).resize(function(){
125 $('.js-fullheight').css('height', $(window).height());
126 });
127
128 };
129 fullHeight();
130
131 var burgerMenu = function() {
132
133 $('.js-colorlib-nav-toggle').on('click', function(event) {
134 event.preventDefault();
135 var $this = $(this);
136 if( $('body').hasClass('menu-show') ) {
137 $('body').removeClass('menu-show');
138 $('#colorlib-main-nav > .js-colorlib-nav-toggle').removeClass('show');
139 } else {
140 $('body').addClass('menu-show');
141 setTimeout(function(){
142 $('#colorlib-main-nav > .js-colorlib-nav-toggle').addClass('show');
143 }, 900);
144 }
145 })
146 };
147 burgerMenu();
148
149
150 })(jQuery);
151 </script>
152 </body>
153</html>
154
1<!doctype html>
2<html lang="de">
3 <head>
4 <title>VR</title>
5 <!-- Required meta tags -->
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8
9 <!-- Bootstrap CSS -->
10 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
11 <link rel="stylesheet" href="style.css">
12 </head>
13 <body>
14 <nav id="colorlib-main-nav" role="navigation">
15 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle active"><i></i></a>
16 <div class="js-fullheight colorlib-table">
17 <div class="img" style="background-image: url(images/bg_3.jpg);"></div>
18 <div class="colorlib-table-cell js-fullheight">
19 <div class="row no-gutters">
20 <div class="col-md-12 text-center">
21 <h1 class="mb-4"><a href="index.html" class="logo">Company Logo</a></h1>
22 <ul>
23 <li class="active"><a href="index.html"><span>Home</span></a></li>
24 <li><a href="about.html"><span>About</span></a></li>
25 <li><a href="blog.html"><span>Blog</span></a></li>
26 <li><a href="contact.html"><span>Contact</span></a></li>
27 </ul>
28 </div>
29 </div>
30 </div>
31 </div>
32 </nav>
33
34 <div class="header h-100">
35 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle"><i></i></a>
36 <h1 id="h-100" class="introduction h-100">Virtual Reality</h1>
37
38 </div>
39
40 <div class="h-100">
41 <h2 class="center">Was ist Virtual Reality (VR)</h2>
42 <p class="center">Eine virtuelle Welt oder ein Computerspiel, in das der Nutzer mit Hilfe eines VR-Headsets vollständig eintauchen kann</p>
43 </div>
44
45
46 <div id="vr-headset-kategorien" class="">
47 <!--Show each one as a full screen information - Picture or animation embeded at the left side - Text about it right-->
48 <div id="standalone" class="row">
49 <!---->
50 <div class="vr-left_side container col-lg-6">
51 <div class="sketchfab-embed-wrapper"> <iframe title="Quest 2 Headset - FanArt" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/ee496aa030bf4f37a52b445196796af3/embed?autospin=1&autostart=1&ui_hint=0"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/quest-2-headset-fanart-ee496aa030bf4f37a52b445196796af3?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Quest 2 Headset - FanArt </a> by <a href="https://sketchfab.com/josevillotguisan?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> joseVG </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
52 </div>
53
54 <div class="vr-right_side container col-lg-6">
55 <h3>Standalone</h3>
56
57 <p>Standalone VR-Headsets ben&ouml;tigen nur WLAN und Strom. In der VR-Brille ist ein eigener Prozessor eingebaut. Damit ist dieser Art super f&uuml;r Anf&auml;nger geeignet</p>
58
59 <p>
60 Vorteile:<br />
61 Kein guter PC ben&ouml;tigt<br />
62 Niedriger Einstiegspreis trotz guter Hardware<br/>
63 Gut optimierbar, da es fĂźr das Heaset nur einen Prozessor gibt</p>
64
65 <p>Nachteile:<br />
66 Je nach Headset schlechte Performance bei fordernden Spielen</p>
67 </div>
68
69 </div>
70
71 <div id="pc" class="row">
72 <div class="vr-left_side container col-lg-6">
73 <div class="sketchfab-embed-wrapper"> <iframe title="HTC Vive" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/4cee0970fe60444ead77d41fbb052a33/embed?autospin=1&autostart=1&ui_hint=0"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/htc-vive-4cee0970fe60444ead77d41fbb052a33?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> HTC Vive </a> by <a href="https://sketchfab.com/EternalRealm?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Eternal Realm </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
74 </div>
75
76 <div class="vr-right_side container col-lg-6">
77 <h3>PC-VR</h3>
78 <p>PC-VR Headsets funktionieren nur zusammen mit einem PC. Sie werden &uuml;ber ein langes Kabel verbunden. Mit einem passenden PC kann ein PC-VR Headset ein extrem sch&ouml;nes Bild liefern. Der Einstiegspreis ist jedoch sehr hoch, daher sind sie vor allem f&uuml;r Enthusiasten geeignet</p>
79
80 <p>Vorteile:<br />
81 Hohe Aufl&ouml;sung<br />
82 Wenig Lags</p>
83
84 <p>Nachteile:<br />
85 Hoher Einstiegspreis</p>
86 </div>
87 </div>
88
89 <div id="fulldive" class="row">
90 <div class="vr-left_side container col-lg-6">
91 <div class="sketchfab-embed-wrapper"> <iframe title="neuraLink" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/6a157c614d0641c2a2d2c7c7628fb01b/embed?autospin=1&autostart=1"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/neuralink-6a157c614d0641c2a2d2c7c7628fb01b?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> neuraLink </a> by <a href="https://sketchfab.com/rfarencibia?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> rfarencibia </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
92 </div>
93
94 <div class="vr-right_side container col-lg-6">
95 <h3>Full-Dive VR</h3>
96 <p>Tauche komplett in die VR-Welt ein. Full-Dive VR-Headsets befinden sich bereits in Entwicklung. Bei diesem Ansatz wird keine VR-Brille verwendet, die wie ein Monitor funktioniert sondern Full-Dive VR-Headsets greifen direkt auf die Seh-, Tast-, und weitere Nerven zu. Daher ist dies auch die umstrittenste Technologie</p>
97
98 <p>Vorteile:<br />
99 Unvergleichliche Immersion</p>
100
101 <p>Nachteile:<br />
102 Sicherheit - Z.B. In der VR-Welt einsperren - Unwahrscheinlich aber m&ouml;glich</p>
103 </div>
104 </div>
105
106 </div>
107
108
109
110
111 <!-- Optional JavaScript -->
112 <!-- jQuery first, then Popper.js, then Bootstrap JS -->
113 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
114 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
115 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
116 <script>
117 (function($) {
118
119 "use strict";
120
121 var fullHeight = function() {
122
123 $('.js-fullheight').css('height', $(window).height());
124 $(window).resize(function(){
125 $('.js-fullheight').css('height', $(window).height());
126 });
127
128 };
129 fullHeight();
130
131 var burgerMenu = function() {
132
133 $('.js-colorlib-nav-toggle').on('click', function(event) {
134 event.preventDefault();
135 var $this = $(this);
136 if( $('body').hasClass('menu-show') ) {
137 $('body').removeClass('menu-show');
138 $('#colorlib-main-nav > .js-colorlib-nav-toggle').removeClass('show');
139 } else {
140 $('body').addClass('menu-show');
141 setTimeout(function(){
142 $('#colorlib-main-nav > .js-colorlib-nav-toggle').addClass('show');
143 }, 900);
144 }
145 })
146 };
147 burgerMenu();
148
149
150 })(jQuery);
151 </script>
152 </body>
153</html>
154html, body {
155 background-color: black;
156
157 color: white;
158 height: 100%;
159 min-height: 100%;
160
161}
162
163#h-100{
164 /*height: 100%;
165 min-height: 100%;*/
166
167 /*padding-top: 30%;
168 padding-bottom: 30%;*/
169
170 text-align: center;
171}
172
173.introduction {
174 background-image: url("beat-saber-intro.jpg");
175 background-repeat: no-repeat;
176 background-attachment: fixed;
177 background-position: center;
178 background-size: cover;
179}
180
181.row{
182 padding-bottom: 10%;
183}
184
185.sketchfab-embed-wrapper{
186 height: 100%;
187 margin-bottom: 200px;
188}
189
190iframe{
191 height: 100%;
192 width: 100%;
193}
194
195header {
196 height: 100%;
197 min-height: 100%;
198}
199
200.center{
201 text-align: center;
202}
203
204/* Menu*/
205.img {
206 background-size: cover;
207 background-repeat: no-repeat;
208 background-position: center center; }
209
210 #colorlib-main-nav {
211 position: absolute;
212 top: 0;
213 bottom: 0;
214 right: 0;
215 padding: 0;
216 width: 100%;
217 height: 100%;
218 background: rgba(0, 0, 0, 0.99);
219 z-index: 1002;
220 text-align: center;
221 visibility: hidden;
222 opacity: 0;
223 -webkit-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
224 -moz-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
225 -ms-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
226 -o-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
227 transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
228 -webkit-transform: scale(0.1);
229 -moz-transform: scale(0);
230 -ms-transform: scale(0);
231 -o-transform: scale(0);
232 transform: scale(0);
233 overflow-y: scroll; }
234 #colorlib-main-nav .colorlib-table {
235 display: table;
236 width: 100%;
237 height: 100%; }
238 #colorlib-main-nav .colorlib-table .img {
239 position: absolute;
240 top: 0;
241 left: 0;
242 bottom: 0;
243 height: 100%;
244 width: 100%;
245 opacity: 1; }
246 #colorlib-main-nav .colorlib-table .img:after {
247 position: absolute;
248 top: 0;
249 left: 0;
250 bottom: 0;
251 right: 0;
252 content: '';
253 background: rgba(0, 0, 0, 0.3); }
254 #colorlib-main-nav .colorlib-table .colorlib-table-cell {
255 display: table-cell;
256 vertical-align: middle; }
257 #colorlib-main-nav .colorlib-nav-toggle {
258 position: absolute;
259 top: 40px;
260 right: 40px;
261 padding: 20px;
262 height: 44px;
263 width: 44px;
264 line-height: 0;
265 padding: 0 !important;
266 visibility: hidden;
267 opacity: 0;
268 -webkit-transition: 0.3s;
269 -o-transition: 0.3s;
270 transition: 0.3s; }
271 @media (prefers-reduced-motion: reduce) {
272 #colorlib-main-nav .colorlib-nav-toggle {
273 -webkit-transition: none;
274 -o-transition: none;
275 transition: none; } }
276 #colorlib-main-nav .colorlib-nav-toggle i {
277 top: 18px !important;
278 left: 0 !important;
279 margin: 0 !important;
280 padding: 0 !important;
281 line-height: 0;
282 text-indent: 0; }
283 #colorlib-main-nav .colorlib-nav-toggle.show {
284 visibility: visible;
285 opacity: 1; }
286 #colorlib-main-nav .colorlib-nav-toggle:hover i::before, #colorlib-main-nav .colorlib-nav-toggle:hover i::after {
287 content: '';
288 width: 40px;
289 height: 2px;
290 background: #fff;
291 position: absolute;
292 left: 0; }
293 .menu-show #colorlib-main-nav {
294 visibility: visible;
295 opacity: 1;
296 -webkit-transform: scale(1);
297 -moz-transform: scale(1);
298 -ms-transform: scale(1);
299 -o-transform: scale(1);
300 transform: scale(1); }
301 #colorlib-main-nav .logo {
302 font-size: 40px;
303 color: #fff;
304 text-transform: uppercase;
305 letter-spacing: 2px;
306 font-weight: 700;
307 position: relative;
308 display: inline-block;
309 margin-bottom: 0;
310 line-height: 1.5;
311 font-family: "Poppins", Arial, sans-serif; }
312 #colorlib-main-nav .logo span {
313 font-size: 14px;
314 display: block;
315 font-weight: 300;
316 color: rgba(255, 255, 255, 0.8);
317 letter-spacing: 8px; }
318 #colorlib-main-nav ul {
319 padding: 0;
320 margin: 0;
321 display: block; }
322 @media (max-width: 767.98px) {
323 #colorlib-main-nav ul {
324 padding: 20px 0 0 0; } }
325 #colorlib-main-nav ul li {
326 padding: 0;
327 margin: 0;
328 list-style: none;
329 font-weight: 600;
330 font-size: 14px;
331 letter-spacing: 5px;
332 text-transform: uppercase; }
333 #colorlib-main-nav ul li a {
334 display: block;
335 color: white;
336 padding: 5px 0; }
337 #colorlib-main-nav ul li a span {
338 color: white;
339 position: relative;
340 padding: 0 10px; }
341 #colorlib-main-nav ul li a span small {
342 position: absolute;
343 bottom: 7px;
344 left: -30px;
345 font-size: 16px;
346 color: rgba(255, 255, 255, 0.3);
347 border-bottom: 1px solid rgba(255, 255, 255, 0.3); }
348 #colorlib-main-nav ul li a:hover, #colorlib-main-nav ul li a:active, #colorlib-main-nav ul li a:focus {
349 outline: none;
350 text-decoration: none; }
351 #colorlib-main-nav ul li a:hover span:before, #colorlib-main-nav ul li a:active span:before, #colorlib-main-nav ul li a:focus span:before {
352 visibility: visible;
353 -webkit-transform: scaleX(1);
354 -moz-transform: scaleX(1);
355 -ms-transform: scaleX(1);
356 -o-transform: scaleX(1);
357 transform: scaleX(1); }
358 #colorlib-main-nav ul li.active a span {
359 color: #f8b500; }
360 #colorlib-main-nav ul li.active a span:before {
361 background: #fec771;
362 visibility: visible;
363 -webkit-transform: scaleX(1);
364 -moz-transform: scaleX(1);
365 -ms-transform: scaleX(1);
366 -o-transform: scaleX(1);
367 transform: scaleX(1); }
368
369 header {
370 padding: 2em 0;
371 position: absolute;
372 top: 0;
373 left: 0;
374 right: 0;
375 z-index: 9;
376 margin: 0 auto; }
377 @media (max-width: 767.98px) {
378 header {
379 padding: 1em 0;
380 position: absolute; } }
381 header .colorlib-navbar-brand {
382 float: left; }
383 header .colorlib-navbar-brand .colorlib-logo {
384 font-size: 12px;
385 color: #fff;
386 letter-spacing: 5px;
387 font-weight: 600;
388 position: relative;
389 display: inline-block;
390 margin-bottom: 0;
391 line-height: 1.5;
392 font-family: "Poppins", Arial, sans-serif;
393 text-transform: uppercase; }
394 header .colorlib-navbar-brand .colorlib-logo span {
395 font-size: 11px;
396 display: block;
397 font-weight: 300;
398 color: rgba(255, 255, 255, 0.8);
399 letter-spacing: 7px; }
400 header .colorlib-navbar-brand .colorlib-logo i {
401 color: #fec771;
402 position: absolute;
403 top: -18px;
404 bottom: 0;
405 left: 7px;
406 font-size: 48px; }
407 header .colorlib-navbar-brand .colorlib-logo:hover {
408 text-decoration: none !important; }
409 header .colorlib-navbar-brand .colorlib-logo:active, header .colorlib-navbar-brand .colorlib-logo:focus {
410 outline: none;
411 text-decoration: none; }
412
413 .colorlib-nav-toggle {
414 cursor: pointer;
415 text-decoration: none; }
416 .colorlib-nav-toggle.active i::before, .colorlib-nav-toggle.active i::after {
417 background: #000; }
418 .colorlib-nav-toggle.dark.active i::before, .colorlib-nav-toggle.dark.active i::after {
419 background: #000; }
420 .colorlib-nav-toggle:hover, .colorlib-nav-toggle:focus, .colorlib-nav-toggle:active {
421 outline: none;
422 border-bottom: none !important; }
423 .colorlib-nav-toggle i {
424 position: relative;
425 display: inline-block;
426 width: 20px;
427 height: 2px;
428 color: #000;
429 font: bold 14px/.4 Helvetica;
430 text-transform: uppercase;
431 text-indent: -55px;
432 background: #fff;
433 -webkit-transition: all .2s ease-out;
434 -o-transition: all .2s ease-out;
435 transition: all .2s ease-out; }
436 .menu-show .colorlib-nav-toggle i {
437 background: #fff;
438 color: #fff; }
439 .colorlib-nav-toggle i::before, .colorlib-nav-toggle i::after {
440 content: '';
441 width: 30px;
442 height: 2px;
443 background: #fff;
444 position: absolute;
445 left: 0;
446 -webkit-transition: 0.2s;
447 -o-transition: 0.2s;
448 transition: 0.2s; }
449 .menu-show .colorlib-nav-toggle i::before, .menu-show .colorlib-nav-toggle i::after {
450 background: #fff; }
451 @media (prefers-reduced-motion: reduce) {
452 .colorlib-nav-toggle i::before, .colorlib-nav-toggle i::after {
453 -webkit-transition: none;
454 -o-transition: none;
455 transition: none; } }
456 .colorlib-nav-toggle.dark i {
457 position: relative;
458 color: #fff;
459 background: #fff;
460 -webkit-transition: all .2s ease-out;
461 -o-transition: all .2s ease-out;
462 transition: all .2s ease-out; }
463 .colorlib-nav-toggle.dark i::before, .colorlib-nav-toggle.dark i::after {
464 background: #fff;
465 -webkit-transition: 0.2s;
466 -o-transition: 0.2s;
467 transition: 0.2s; }
468 @media (prefers-reduced-motion: reduce) {
469 .colorlib-nav-toggle.dark i::before, .colorlib-nav-toggle.dark i::after {
470 -webkit-transition: none;
471 -o-transition: none;
472 transition: none; } }
473
474 .colorlib-nav-toggle i::before {
475 top: -7px; }
476
477 .colorlib-nav-toggle i::after {
478 bottom: -7px; }
479
480 .colorlib-nav-toggle:hover i::before {
481 top: -10px; }
482
483 .colorlib-nav-toggle:hover i::after {
484 bottom: -10px; }
485
486 .colorlib-nav-toggle.active i {
487 background: transparent; }
488
489 .colorlib-nav-toggle.active i::before {
490 top: 0;
491 -webkit-transform: rotateZ(45deg);
492 -moz-transform: rotateZ(45deg);
493 -ms-transform: rotateZ(45deg);
494 -o-transform: rotateZ(45deg);
495 transform: rotateZ(45deg); }
496
497 .colorlib-nav-toggle.active i::after {
498 bottom: 0;
499 -webkit-transform: rotateZ(-45deg);
500 -moz-transform: rotateZ(-45deg);
501 -ms-transform: rotateZ(-45deg);
502 -o-transform: rotateZ(-45deg);
503 transform: rotateZ(-45deg); }
504
505 .colorlib-nav-toggle {
506 float: right;
507 z-index: 1003;
508 position: relative;
509 top: 0;
510 right: 0;
511 display: block;
512 margin: 0 auto;
513 cursor: pointer;
514 margin-top: 0; }
515 @media (max-width: 767.98px) {
516 .colorlib-nav-toggle {
517 right: 10px; } }
518
519 .hero-wrap {
520 background: #202020; }
521 .hero-wrap .slider-text .desc h1 {
522 font-size: 6vw;
523 font-weight: 700;
524 color: #fff;
525 text-transform: uppercase; }
526 .hero-wrap .slider-text .desc h3 {
527 color: rgba(255, 255, 255, 0.8);
528 font-size: 18px; }
529
ANSWER
Answered 2021-May-04 at 13:34The margins in your .row
class is causing the issue:
1<!doctype html>
2<html lang="de">
3 <head>
4 <title>VR</title>
5 <!-- Required meta tags -->
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8
9 <!-- Bootstrap CSS -->
10 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
11 <link rel="stylesheet" href="style.css">
12 </head>
13 <body>
14 <nav id="colorlib-main-nav" role="navigation">
15 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle active"><i></i></a>
16 <div class="js-fullheight colorlib-table">
17 <div class="img" style="background-image: url(images/bg_3.jpg);"></div>
18 <div class="colorlib-table-cell js-fullheight">
19 <div class="row no-gutters">
20 <div class="col-md-12 text-center">
21 <h1 class="mb-4"><a href="index.html" class="logo">Company Logo</a></h1>
22 <ul>
23 <li class="active"><a href="index.html"><span>Home</span></a></li>
24 <li><a href="about.html"><span>About</span></a></li>
25 <li><a href="blog.html"><span>Blog</span></a></li>
26 <li><a href="contact.html"><span>Contact</span></a></li>
27 </ul>
28 </div>
29 </div>
30 </div>
31 </div>
32 </nav>
33
34 <div class="header h-100">
35 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle"><i></i></a>
36 <h1 id="h-100" class="introduction h-100">Virtual Reality</h1>
37
38 </div>
39
40 <div class="h-100">
41 <h2 class="center">Was ist Virtual Reality (VR)</h2>
42 <p class="center">Eine virtuelle Welt oder ein Computerspiel, in das der Nutzer mit Hilfe eines VR-Headsets vollständig eintauchen kann</p>
43 </div>
44
45
46 <div id="vr-headset-kategorien" class="">
47 <!--Show each one as a full screen information - Picture or animation embeded at the left side - Text about it right-->
48 <div id="standalone" class="row">
49 <!---->
50 <div class="vr-left_side container col-lg-6">
51 <div class="sketchfab-embed-wrapper"> <iframe title="Quest 2 Headset - FanArt" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/ee496aa030bf4f37a52b445196796af3/embed?autospin=1&autostart=1&ui_hint=0"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/quest-2-headset-fanart-ee496aa030bf4f37a52b445196796af3?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Quest 2 Headset - FanArt </a> by <a href="https://sketchfab.com/josevillotguisan?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> joseVG </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
52 </div>
53
54 <div class="vr-right_side container col-lg-6">
55 <h3>Standalone</h3>
56
57 <p>Standalone VR-Headsets ben&ouml;tigen nur WLAN und Strom. In der VR-Brille ist ein eigener Prozessor eingebaut. Damit ist dieser Art super f&uuml;r Anf&auml;nger geeignet</p>
58
59 <p>
60 Vorteile:<br />
61 Kein guter PC ben&ouml;tigt<br />
62 Niedriger Einstiegspreis trotz guter Hardware<br/>
63 Gut optimierbar, da es fĂźr das Heaset nur einen Prozessor gibt</p>
64
65 <p>Nachteile:<br />
66 Je nach Headset schlechte Performance bei fordernden Spielen</p>
67 </div>
68
69 </div>
70
71 <div id="pc" class="row">
72 <div class="vr-left_side container col-lg-6">
73 <div class="sketchfab-embed-wrapper"> <iframe title="HTC Vive" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/4cee0970fe60444ead77d41fbb052a33/embed?autospin=1&autostart=1&ui_hint=0"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/htc-vive-4cee0970fe60444ead77d41fbb052a33?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> HTC Vive </a> by <a href="https://sketchfab.com/EternalRealm?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Eternal Realm </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
74 </div>
75
76 <div class="vr-right_side container col-lg-6">
77 <h3>PC-VR</h3>
78 <p>PC-VR Headsets funktionieren nur zusammen mit einem PC. Sie werden &uuml;ber ein langes Kabel verbunden. Mit einem passenden PC kann ein PC-VR Headset ein extrem sch&ouml;nes Bild liefern. Der Einstiegspreis ist jedoch sehr hoch, daher sind sie vor allem f&uuml;r Enthusiasten geeignet</p>
79
80 <p>Vorteile:<br />
81 Hohe Aufl&ouml;sung<br />
82 Wenig Lags</p>
83
84 <p>Nachteile:<br />
85 Hoher Einstiegspreis</p>
86 </div>
87 </div>
88
89 <div id="fulldive" class="row">
90 <div class="vr-left_side container col-lg-6">
91 <div class="sketchfab-embed-wrapper"> <iframe title="neuraLink" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/6a157c614d0641c2a2d2c7c7628fb01b/embed?autospin=1&autostart=1"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/neuralink-6a157c614d0641c2a2d2c7c7628fb01b?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> neuraLink </a> by <a href="https://sketchfab.com/rfarencibia?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> rfarencibia </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
92 </div>
93
94 <div class="vr-right_side container col-lg-6">
95 <h3>Full-Dive VR</h3>
96 <p>Tauche komplett in die VR-Welt ein. Full-Dive VR-Headsets befinden sich bereits in Entwicklung. Bei diesem Ansatz wird keine VR-Brille verwendet, die wie ein Monitor funktioniert sondern Full-Dive VR-Headsets greifen direkt auf die Seh-, Tast-, und weitere Nerven zu. Daher ist dies auch die umstrittenste Technologie</p>
97
98 <p>Vorteile:<br />
99 Unvergleichliche Immersion</p>
100
101 <p>Nachteile:<br />
102 Sicherheit - Z.B. In der VR-Welt einsperren - Unwahrscheinlich aber m&ouml;glich</p>
103 </div>
104 </div>
105
106 </div>
107
108
109
110
111 <!-- Optional JavaScript -->
112 <!-- jQuery first, then Popper.js, then Bootstrap JS -->
113 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
114 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
115 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
116 <script>
117 (function($) {
118
119 "use strict";
120
121 var fullHeight = function() {
122
123 $('.js-fullheight').css('height', $(window).height());
124 $(window).resize(function(){
125 $('.js-fullheight').css('height', $(window).height());
126 });
127
128 };
129 fullHeight();
130
131 var burgerMenu = function() {
132
133 $('.js-colorlib-nav-toggle').on('click', function(event) {
134 event.preventDefault();
135 var $this = $(this);
136 if( $('body').hasClass('menu-show') ) {
137 $('body').removeClass('menu-show');
138 $('#colorlib-main-nav > .js-colorlib-nav-toggle').removeClass('show');
139 } else {
140 $('body').addClass('menu-show');
141 setTimeout(function(){
142 $('#colorlib-main-nav > .js-colorlib-nav-toggle').addClass('show');
143 }, 900);
144 }
145 })
146 };
147 burgerMenu();
148
149
150 })(jQuery);
151 </script>
152 </body>
153</html>
154html, body {
155 background-color: black;
156
157 color: white;
158 height: 100%;
159 min-height: 100%;
160
161}
162
163#h-100{
164 /*height: 100%;
165 min-height: 100%;*/
166
167 /*padding-top: 30%;
168 padding-bottom: 30%;*/
169
170 text-align: center;
171}
172
173.introduction {
174 background-image: url("beat-saber-intro.jpg");
175 background-repeat: no-repeat;
176 background-attachment: fixed;
177 background-position: center;
178 background-size: cover;
179}
180
181.row{
182 padding-bottom: 10%;
183}
184
185.sketchfab-embed-wrapper{
186 height: 100%;
187 margin-bottom: 200px;
188}
189
190iframe{
191 height: 100%;
192 width: 100%;
193}
194
195header {
196 height: 100%;
197 min-height: 100%;
198}
199
200.center{
201 text-align: center;
202}
203
204/* Menu*/
205.img {
206 background-size: cover;
207 background-repeat: no-repeat;
208 background-position: center center; }
209
210 #colorlib-main-nav {
211 position: absolute;
212 top: 0;
213 bottom: 0;
214 right: 0;
215 padding: 0;
216 width: 100%;
217 height: 100%;
218 background: rgba(0, 0, 0, 0.99);
219 z-index: 1002;
220 text-align: center;
221 visibility: hidden;
222 opacity: 0;
223 -webkit-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
224 -moz-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
225 -ms-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
226 -o-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
227 transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
228 -webkit-transform: scale(0.1);
229 -moz-transform: scale(0);
230 -ms-transform: scale(0);
231 -o-transform: scale(0);
232 transform: scale(0);
233 overflow-y: scroll; }
234 #colorlib-main-nav .colorlib-table {
235 display: table;
236 width: 100%;
237 height: 100%; }
238 #colorlib-main-nav .colorlib-table .img {
239 position: absolute;
240 top: 0;
241 left: 0;
242 bottom: 0;
243 height: 100%;
244 width: 100%;
245 opacity: 1; }
246 #colorlib-main-nav .colorlib-table .img:after {
247 position: absolute;
248 top: 0;
249 left: 0;
250 bottom: 0;
251 right: 0;
252 content: '';
253 background: rgba(0, 0, 0, 0.3); }
254 #colorlib-main-nav .colorlib-table .colorlib-table-cell {
255 display: table-cell;
256 vertical-align: middle; }
257 #colorlib-main-nav .colorlib-nav-toggle {
258 position: absolute;
259 top: 40px;
260 right: 40px;
261 padding: 20px;
262 height: 44px;
263 width: 44px;
264 line-height: 0;
265 padding: 0 !important;
266 visibility: hidden;
267 opacity: 0;
268 -webkit-transition: 0.3s;
269 -o-transition: 0.3s;
270 transition: 0.3s; }
271 @media (prefers-reduced-motion: reduce) {
272 #colorlib-main-nav .colorlib-nav-toggle {
273 -webkit-transition: none;
274 -o-transition: none;
275 transition: none; } }
276 #colorlib-main-nav .colorlib-nav-toggle i {
277 top: 18px !important;
278 left: 0 !important;
279 margin: 0 !important;
280 padding: 0 !important;
281 line-height: 0;
282 text-indent: 0; }
283 #colorlib-main-nav .colorlib-nav-toggle.show {
284 visibility: visible;
285 opacity: 1; }
286 #colorlib-main-nav .colorlib-nav-toggle:hover i::before, #colorlib-main-nav .colorlib-nav-toggle:hover i::after {
287 content: '';
288 width: 40px;
289 height: 2px;
290 background: #fff;
291 position: absolute;
292 left: 0; }
293 .menu-show #colorlib-main-nav {
294 visibility: visible;
295 opacity: 1;
296 -webkit-transform: scale(1);
297 -moz-transform: scale(1);
298 -ms-transform: scale(1);
299 -o-transform: scale(1);
300 transform: scale(1); }
301 #colorlib-main-nav .logo {
302 font-size: 40px;
303 color: #fff;
304 text-transform: uppercase;
305 letter-spacing: 2px;
306 font-weight: 700;
307 position: relative;
308 display: inline-block;
309 margin-bottom: 0;
310 line-height: 1.5;
311 font-family: "Poppins", Arial, sans-serif; }
312 #colorlib-main-nav .logo span {
313 font-size: 14px;
314 display: block;
315 font-weight: 300;
316 color: rgba(255, 255, 255, 0.8);
317 letter-spacing: 8px; }
318 #colorlib-main-nav ul {
319 padding: 0;
320 margin: 0;
321 display: block; }
322 @media (max-width: 767.98px) {
323 #colorlib-main-nav ul {
324 padding: 20px 0 0 0; } }
325 #colorlib-main-nav ul li {
326 padding: 0;
327 margin: 0;
328 list-style: none;
329 font-weight: 600;
330 font-size: 14px;
331 letter-spacing: 5px;
332 text-transform: uppercase; }
333 #colorlib-main-nav ul li a {
334 display: block;
335 color: white;
336 padding: 5px 0; }
337 #colorlib-main-nav ul li a span {
338 color: white;
339 position: relative;
340 padding: 0 10px; }
341 #colorlib-main-nav ul li a span small {
342 position: absolute;
343 bottom: 7px;
344 left: -30px;
345 font-size: 16px;
346 color: rgba(255, 255, 255, 0.3);
347 border-bottom: 1px solid rgba(255, 255, 255, 0.3); }
348 #colorlib-main-nav ul li a:hover, #colorlib-main-nav ul li a:active, #colorlib-main-nav ul li a:focus {
349 outline: none;
350 text-decoration: none; }
351 #colorlib-main-nav ul li a:hover span:before, #colorlib-main-nav ul li a:active span:before, #colorlib-main-nav ul li a:focus span:before {
352 visibility: visible;
353 -webkit-transform: scaleX(1);
354 -moz-transform: scaleX(1);
355 -ms-transform: scaleX(1);
356 -o-transform: scaleX(1);
357 transform: scaleX(1); }
358 #colorlib-main-nav ul li.active a span {
359 color: #f8b500; }
360 #colorlib-main-nav ul li.active a span:before {
361 background: #fec771;
362 visibility: visible;
363 -webkit-transform: scaleX(1);
364 -moz-transform: scaleX(1);
365 -ms-transform: scaleX(1);
366 -o-transform: scaleX(1);
367 transform: scaleX(1); }
368
369 header {
370 padding: 2em 0;
371 position: absolute;
372 top: 0;
373 left: 0;
374 right: 0;
375 z-index: 9;
376 margin: 0 auto; }
377 @media (max-width: 767.98px) {
378 header {
379 padding: 1em 0;
380 position: absolute; } }
381 header .colorlib-navbar-brand {
382 float: left; }
383 header .colorlib-navbar-brand .colorlib-logo {
384 font-size: 12px;
385 color: #fff;
386 letter-spacing: 5px;
387 font-weight: 600;
388 position: relative;
389 display: inline-block;
390 margin-bottom: 0;
391 line-height: 1.5;
392 font-family: "Poppins", Arial, sans-serif;
393 text-transform: uppercase; }
394 header .colorlib-navbar-brand .colorlib-logo span {
395 font-size: 11px;
396 display: block;
397 font-weight: 300;
398 color: rgba(255, 255, 255, 0.8);
399 letter-spacing: 7px; }
400 header .colorlib-navbar-brand .colorlib-logo i {
401 color: #fec771;
402 position: absolute;
403 top: -18px;
404 bottom: 0;
405 left: 7px;
406 font-size: 48px; }
407 header .colorlib-navbar-brand .colorlib-logo:hover {
408 text-decoration: none !important; }
409 header .colorlib-navbar-brand .colorlib-logo:active, header .colorlib-navbar-brand .colorlib-logo:focus {
410 outline: none;
411 text-decoration: none; }
412
413 .colorlib-nav-toggle {
414 cursor: pointer;
415 text-decoration: none; }
416 .colorlib-nav-toggle.active i::before, .colorlib-nav-toggle.active i::after {
417 background: #000; }
418 .colorlib-nav-toggle.dark.active i::before, .colorlib-nav-toggle.dark.active i::after {
419 background: #000; }
420 .colorlib-nav-toggle:hover, .colorlib-nav-toggle:focus, .colorlib-nav-toggle:active {
421 outline: none;
422 border-bottom: none !important; }
423 .colorlib-nav-toggle i {
424 position: relative;
425 display: inline-block;
426 width: 20px;
427 height: 2px;
428 color: #000;
429 font: bold 14px/.4 Helvetica;
430 text-transform: uppercase;
431 text-indent: -55px;
432 background: #fff;
433 -webkit-transition: all .2s ease-out;
434 -o-transition: all .2s ease-out;
435 transition: all .2s ease-out; }
436 .menu-show .colorlib-nav-toggle i {
437 background: #fff;
438 color: #fff; }
439 .colorlib-nav-toggle i::before, .colorlib-nav-toggle i::after {
440 content: '';
441 width: 30px;
442 height: 2px;
443 background: #fff;
444 position: absolute;
445 left: 0;
446 -webkit-transition: 0.2s;
447 -o-transition: 0.2s;
448 transition: 0.2s; }
449 .menu-show .colorlib-nav-toggle i::before, .menu-show .colorlib-nav-toggle i::after {
450 background: #fff; }
451 @media (prefers-reduced-motion: reduce) {
452 .colorlib-nav-toggle i::before, .colorlib-nav-toggle i::after {
453 -webkit-transition: none;
454 -o-transition: none;
455 transition: none; } }
456 .colorlib-nav-toggle.dark i {
457 position: relative;
458 color: #fff;
459 background: #fff;
460 -webkit-transition: all .2s ease-out;
461 -o-transition: all .2s ease-out;
462 transition: all .2s ease-out; }
463 .colorlib-nav-toggle.dark i::before, .colorlib-nav-toggle.dark i::after {
464 background: #fff;
465 -webkit-transition: 0.2s;
466 -o-transition: 0.2s;
467 transition: 0.2s; }
468 @media (prefers-reduced-motion: reduce) {
469 .colorlib-nav-toggle.dark i::before, .colorlib-nav-toggle.dark i::after {
470 -webkit-transition: none;
471 -o-transition: none;
472 transition: none; } }
473
474 .colorlib-nav-toggle i::before {
475 top: -7px; }
476
477 .colorlib-nav-toggle i::after {
478 bottom: -7px; }
479
480 .colorlib-nav-toggle:hover i::before {
481 top: -10px; }
482
483 .colorlib-nav-toggle:hover i::after {
484 bottom: -10px; }
485
486 .colorlib-nav-toggle.active i {
487 background: transparent; }
488
489 .colorlib-nav-toggle.active i::before {
490 top: 0;
491 -webkit-transform: rotateZ(45deg);
492 -moz-transform: rotateZ(45deg);
493 -ms-transform: rotateZ(45deg);
494 -o-transform: rotateZ(45deg);
495 transform: rotateZ(45deg); }
496
497 .colorlib-nav-toggle.active i::after {
498 bottom: 0;
499 -webkit-transform: rotateZ(-45deg);
500 -moz-transform: rotateZ(-45deg);
501 -ms-transform: rotateZ(-45deg);
502 -o-transform: rotateZ(-45deg);
503 transform: rotateZ(-45deg); }
504
505 .colorlib-nav-toggle {
506 float: right;
507 z-index: 1003;
508 position: relative;
509 top: 0;
510 right: 0;
511 display: block;
512 margin: 0 auto;
513 cursor: pointer;
514 margin-top: 0; }
515 @media (max-width: 767.98px) {
516 .colorlib-nav-toggle {
517 right: 10px; } }
518
519 .hero-wrap {
520 background: #202020; }
521 .hero-wrap .slider-text .desc h1 {
522 font-size: 6vw;
523 font-weight: 700;
524 color: #fff;
525 text-transform: uppercase; }
526 .hero-wrap .slider-text .desc h3 {
527 color: rgba(255, 255, 255, 0.8);
528 font-size: 18px; }
529.row {
530 display: -ms-flexbox;
531 display: flex;
532 -ms-flex-wrap: wrap;
533 flex-wrap: wrap;
534 /* margin-right: -15px; */
535 /* margin-left: -15px; */
536}
537
You can add overflow-x: hidden;
to body
as a quickfix.
1<!doctype html>
2<html lang="de">
3 <head>
4 <title>VR</title>
5 <!-- Required meta tags -->
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8
9 <!-- Bootstrap CSS -->
10 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
11 <link rel="stylesheet" href="style.css">
12 </head>
13 <body>
14 <nav id="colorlib-main-nav" role="navigation">
15 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle active"><i></i></a>
16 <div class="js-fullheight colorlib-table">
17 <div class="img" style="background-image: url(images/bg_3.jpg);"></div>
18 <div class="colorlib-table-cell js-fullheight">
19 <div class="row no-gutters">
20 <div class="col-md-12 text-center">
21 <h1 class="mb-4"><a href="index.html" class="logo">Company Logo</a></h1>
22 <ul>
23 <li class="active"><a href="index.html"><span>Home</span></a></li>
24 <li><a href="about.html"><span>About</span></a></li>
25 <li><a href="blog.html"><span>Blog</span></a></li>
26 <li><a href="contact.html"><span>Contact</span></a></li>
27 </ul>
28 </div>
29 </div>
30 </div>
31 </div>
32 </nav>
33
34 <div class="header h-100">
35 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle"><i></i></a>
36 <h1 id="h-100" class="introduction h-100">Virtual Reality</h1>
37
38 </div>
39
40 <div class="h-100">
41 <h2 class="center">Was ist Virtual Reality (VR)</h2>
42 <p class="center">Eine virtuelle Welt oder ein Computerspiel, in das der Nutzer mit Hilfe eines VR-Headsets vollständig eintauchen kann</p>
43 </div>
44
45
46 <div id="vr-headset-kategorien" class="">
47 <!--Show each one as a full screen information - Picture or animation embeded at the left side - Text about it right-->
48 <div id="standalone" class="row">
49 <!---->
50 <div class="vr-left_side container col-lg-6">
51 <div class="sketchfab-embed-wrapper"> <iframe title="Quest 2 Headset - FanArt" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/ee496aa030bf4f37a52b445196796af3/embed?autospin=1&autostart=1&ui_hint=0"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/quest-2-headset-fanart-ee496aa030bf4f37a52b445196796af3?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Quest 2 Headset - FanArt </a> by <a href="https://sketchfab.com/josevillotguisan?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> joseVG </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
52 </div>
53
54 <div class="vr-right_side container col-lg-6">
55 <h3>Standalone</h3>
56
57 <p>Standalone VR-Headsets ben&ouml;tigen nur WLAN und Strom. In der VR-Brille ist ein eigener Prozessor eingebaut. Damit ist dieser Art super f&uuml;r Anf&auml;nger geeignet</p>
58
59 <p>
60 Vorteile:<br />
61 Kein guter PC ben&ouml;tigt<br />
62 Niedriger Einstiegspreis trotz guter Hardware<br/>
63 Gut optimierbar, da es fĂźr das Heaset nur einen Prozessor gibt</p>
64
65 <p>Nachteile:<br />
66 Je nach Headset schlechte Performance bei fordernden Spielen</p>
67 </div>
68
69 </div>
70
71 <div id="pc" class="row">
72 <div class="vr-left_side container col-lg-6">
73 <div class="sketchfab-embed-wrapper"> <iframe title="HTC Vive" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/4cee0970fe60444ead77d41fbb052a33/embed?autospin=1&autostart=1&ui_hint=0"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/htc-vive-4cee0970fe60444ead77d41fbb052a33?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> HTC Vive </a> by <a href="https://sketchfab.com/EternalRealm?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Eternal Realm </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
74 </div>
75
76 <div class="vr-right_side container col-lg-6">
77 <h3>PC-VR</h3>
78 <p>PC-VR Headsets funktionieren nur zusammen mit einem PC. Sie werden &uuml;ber ein langes Kabel verbunden. Mit einem passenden PC kann ein PC-VR Headset ein extrem sch&ouml;nes Bild liefern. Der Einstiegspreis ist jedoch sehr hoch, daher sind sie vor allem f&uuml;r Enthusiasten geeignet</p>
79
80 <p>Vorteile:<br />
81 Hohe Aufl&ouml;sung<br />
82 Wenig Lags</p>
83
84 <p>Nachteile:<br />
85 Hoher Einstiegspreis</p>
86 </div>
87 </div>
88
89 <div id="fulldive" class="row">
90 <div class="vr-left_side container col-lg-6">
91 <div class="sketchfab-embed-wrapper"> <iframe title="neuraLink" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/6a157c614d0641c2a2d2c7c7628fb01b/embed?autospin=1&autostart=1"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/neuralink-6a157c614d0641c2a2d2c7c7628fb01b?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> neuraLink </a> by <a href="https://sketchfab.com/rfarencibia?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> rfarencibia </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
92 </div>
93
94 <div class="vr-right_side container col-lg-6">
95 <h3>Full-Dive VR</h3>
96 <p>Tauche komplett in die VR-Welt ein. Full-Dive VR-Headsets befinden sich bereits in Entwicklung. Bei diesem Ansatz wird keine VR-Brille verwendet, die wie ein Monitor funktioniert sondern Full-Dive VR-Headsets greifen direkt auf die Seh-, Tast-, und weitere Nerven zu. Daher ist dies auch die umstrittenste Technologie</p>
97
98 <p>Vorteile:<br />
99 Unvergleichliche Immersion</p>
100
101 <p>Nachteile:<br />
102 Sicherheit - Z.B. In der VR-Welt einsperren - Unwahrscheinlich aber m&ouml;glich</p>
103 </div>
104 </div>
105
106 </div>
107
108
109
110
111 <!-- Optional JavaScript -->
112 <!-- jQuery first, then Popper.js, then Bootstrap JS -->
113 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
114 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
115 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
116 <script>
117 (function($) {
118
119 "use strict";
120
121 var fullHeight = function() {
122
123 $('.js-fullheight').css('height', $(window).height());
124 $(window).resize(function(){
125 $('.js-fullheight').css('height', $(window).height());
126 });
127
128 };
129 fullHeight();
130
131 var burgerMenu = function() {
132
133 $('.js-colorlib-nav-toggle').on('click', function(event) {
134 event.preventDefault();
135 var $this = $(this);
136 if( $('body').hasClass('menu-show') ) {
137 $('body').removeClass('menu-show');
138 $('#colorlib-main-nav > .js-colorlib-nav-toggle').removeClass('show');
139 } else {
140 $('body').addClass('menu-show');
141 setTimeout(function(){
142 $('#colorlib-main-nav > .js-colorlib-nav-toggle').addClass('show');
143 }, 900);
144 }
145 })
146 };
147 burgerMenu();
148
149
150 })(jQuery);
151 </script>
152 </body>
153</html>
154html, body {
155 background-color: black;
156
157 color: white;
158 height: 100%;
159 min-height: 100%;
160
161}
162
163#h-100{
164 /*height: 100%;
165 min-height: 100%;*/
166
167 /*padding-top: 30%;
168 padding-bottom: 30%;*/
169
170 text-align: center;
171}
172
173.introduction {
174 background-image: url("beat-saber-intro.jpg");
175 background-repeat: no-repeat;
176 background-attachment: fixed;
177 background-position: center;
178 background-size: cover;
179}
180
181.row{
182 padding-bottom: 10%;
183}
184
185.sketchfab-embed-wrapper{
186 height: 100%;
187 margin-bottom: 200px;
188}
189
190iframe{
191 height: 100%;
192 width: 100%;
193}
194
195header {
196 height: 100%;
197 min-height: 100%;
198}
199
200.center{
201 text-align: center;
202}
203
204/* Menu*/
205.img {
206 background-size: cover;
207 background-repeat: no-repeat;
208 background-position: center center; }
209
210 #colorlib-main-nav {
211 position: absolute;
212 top: 0;
213 bottom: 0;
214 right: 0;
215 padding: 0;
216 width: 100%;
217 height: 100%;
218 background: rgba(0, 0, 0, 0.99);
219 z-index: 1002;
220 text-align: center;
221 visibility: hidden;
222 opacity: 0;
223 -webkit-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
224 -moz-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
225 -ms-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
226 -o-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
227 transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
228 -webkit-transform: scale(0.1);
229 -moz-transform: scale(0);
230 -ms-transform: scale(0);
231 -o-transform: scale(0);
232 transform: scale(0);
233 overflow-y: scroll; }
234 #colorlib-main-nav .colorlib-table {
235 display: table;
236 width: 100%;
237 height: 100%; }
238 #colorlib-main-nav .colorlib-table .img {
239 position: absolute;
240 top: 0;
241 left: 0;
242 bottom: 0;
243 height: 100%;
244 width: 100%;
245 opacity: 1; }
246 #colorlib-main-nav .colorlib-table .img:after {
247 position: absolute;
248 top: 0;
249 left: 0;
250 bottom: 0;
251 right: 0;
252 content: '';
253 background: rgba(0, 0, 0, 0.3); }
254 #colorlib-main-nav .colorlib-table .colorlib-table-cell {
255 display: table-cell;
256 vertical-align: middle; }
257 #colorlib-main-nav .colorlib-nav-toggle {
258 position: absolute;
259 top: 40px;
260 right: 40px;
261 padding: 20px;
262 height: 44px;
263 width: 44px;
264 line-height: 0;
265 padding: 0 !important;
266 visibility: hidden;
267 opacity: 0;
268 -webkit-transition: 0.3s;
269 -o-transition: 0.3s;
270 transition: 0.3s; }
271 @media (prefers-reduced-motion: reduce) {
272 #colorlib-main-nav .colorlib-nav-toggle {
273 -webkit-transition: none;
274 -o-transition: none;
275 transition: none; } }
276 #colorlib-main-nav .colorlib-nav-toggle i {
277 top: 18px !important;
278 left: 0 !important;
279 margin: 0 !important;
280 padding: 0 !important;
281 line-height: 0;
282 text-indent: 0; }
283 #colorlib-main-nav .colorlib-nav-toggle.show {
284 visibility: visible;
285 opacity: 1; }
286 #colorlib-main-nav .colorlib-nav-toggle:hover i::before, #colorlib-main-nav .colorlib-nav-toggle:hover i::after {
287 content: '';
288 width: 40px;
289 height: 2px;
290 background: #fff;
291 position: absolute;
292 left: 0; }
293 .menu-show #colorlib-main-nav {
294 visibility: visible;
295 opacity: 1;
296 -webkit-transform: scale(1);
297 -moz-transform: scale(1);
298 -ms-transform: scale(1);
299 -o-transform: scale(1);
300 transform: scale(1); }
301 #colorlib-main-nav .logo {
302 font-size: 40px;
303 color: #fff;
304 text-transform: uppercase;
305 letter-spacing: 2px;
306 font-weight: 700;
307 position: relative;
308 display: inline-block;
309 margin-bottom: 0;
310 line-height: 1.5;
311 font-family: "Poppins", Arial, sans-serif; }
312 #colorlib-main-nav .logo span {
313 font-size: 14px;
314 display: block;
315 font-weight: 300;
316 color: rgba(255, 255, 255, 0.8);
317 letter-spacing: 8px; }
318 #colorlib-main-nav ul {
319 padding: 0;
320 margin: 0;
321 display: block; }
322 @media (max-width: 767.98px) {
323 #colorlib-main-nav ul {
324 padding: 20px 0 0 0; } }
325 #colorlib-main-nav ul li {
326 padding: 0;
327 margin: 0;
328 list-style: none;
329 font-weight: 600;
330 font-size: 14px;
331 letter-spacing: 5px;
332 text-transform: uppercase; }
333 #colorlib-main-nav ul li a {
334 display: block;
335 color: white;
336 padding: 5px 0; }
337 #colorlib-main-nav ul li a span {
338 color: white;
339 position: relative;
340 padding: 0 10px; }
341 #colorlib-main-nav ul li a span small {
342 position: absolute;
343 bottom: 7px;
344 left: -30px;
345 font-size: 16px;
346 color: rgba(255, 255, 255, 0.3);
347 border-bottom: 1px solid rgba(255, 255, 255, 0.3); }
348 #colorlib-main-nav ul li a:hover, #colorlib-main-nav ul li a:active, #colorlib-main-nav ul li a:focus {
349 outline: none;
350 text-decoration: none; }
351 #colorlib-main-nav ul li a:hover span:before, #colorlib-main-nav ul li a:active span:before, #colorlib-main-nav ul li a:focus span:before {
352 visibility: visible;
353 -webkit-transform: scaleX(1);
354 -moz-transform: scaleX(1);
355 -ms-transform: scaleX(1);
356 -o-transform: scaleX(1);
357 transform: scaleX(1); }
358 #colorlib-main-nav ul li.active a span {
359 color: #f8b500; }
360 #colorlib-main-nav ul li.active a span:before {
361 background: #fec771;
362 visibility: visible;
363 -webkit-transform: scaleX(1);
364 -moz-transform: scaleX(1);
365 -ms-transform: scaleX(1);
366 -o-transform: scaleX(1);
367 transform: scaleX(1); }
368
369 header {
370 padding: 2em 0;
371 position: absolute;
372 top: 0;
373 left: 0;
374 right: 0;
375 z-index: 9;
376 margin: 0 auto; }
377 @media (max-width: 767.98px) {
378 header {
379 padding: 1em 0;
380 position: absolute; } }
381 header .colorlib-navbar-brand {
382 float: left; }
383 header .colorlib-navbar-brand .colorlib-logo {
384 font-size: 12px;
385 color: #fff;
386 letter-spacing: 5px;
387 font-weight: 600;
388 position: relative;
389 display: inline-block;
390 margin-bottom: 0;
391 line-height: 1.5;
392 font-family: "Poppins", Arial, sans-serif;
393 text-transform: uppercase; }
394 header .colorlib-navbar-brand .colorlib-logo span {
395 font-size: 11px;
396 display: block;
397 font-weight: 300;
398 color: rgba(255, 255, 255, 0.8);
399 letter-spacing: 7px; }
400 header .colorlib-navbar-brand .colorlib-logo i {
401 color: #fec771;
402 position: absolute;
403 top: -18px;
404 bottom: 0;
405 left: 7px;
406 font-size: 48px; }
407 header .colorlib-navbar-brand .colorlib-logo:hover {
408 text-decoration: none !important; }
409 header .colorlib-navbar-brand .colorlib-logo:active, header .colorlib-navbar-brand .colorlib-logo:focus {
410 outline: none;
411 text-decoration: none; }
412
413 .colorlib-nav-toggle {
414 cursor: pointer;
415 text-decoration: none; }
416 .colorlib-nav-toggle.active i::before, .colorlib-nav-toggle.active i::after {
417 background: #000; }
418 .colorlib-nav-toggle.dark.active i::before, .colorlib-nav-toggle.dark.active i::after {
419 background: #000; }
420 .colorlib-nav-toggle:hover, .colorlib-nav-toggle:focus, .colorlib-nav-toggle:active {
421 outline: none;
422 border-bottom: none !important; }
423 .colorlib-nav-toggle i {
424 position: relative;
425 display: inline-block;
426 width: 20px;
427 height: 2px;
428 color: #000;
429 font: bold 14px/.4 Helvetica;
430 text-transform: uppercase;
431 text-indent: -55px;
432 background: #fff;
433 -webkit-transition: all .2s ease-out;
434 -o-transition: all .2s ease-out;
435 transition: all .2s ease-out; }
436 .menu-show .colorlib-nav-toggle i {
437 background: #fff;
438 color: #fff; }
439 .colorlib-nav-toggle i::before, .colorlib-nav-toggle i::after {
440 content: '';
441 width: 30px;
442 height: 2px;
443 background: #fff;
444 position: absolute;
445 left: 0;
446 -webkit-transition: 0.2s;
447 -o-transition: 0.2s;
448 transition: 0.2s; }
449 .menu-show .colorlib-nav-toggle i::before, .menu-show .colorlib-nav-toggle i::after {
450 background: #fff; }
451 @media (prefers-reduced-motion: reduce) {
452 .colorlib-nav-toggle i::before, .colorlib-nav-toggle i::after {
453 -webkit-transition: none;
454 -o-transition: none;
455 transition: none; } }
456 .colorlib-nav-toggle.dark i {
457 position: relative;
458 color: #fff;
459 background: #fff;
460 -webkit-transition: all .2s ease-out;
461 -o-transition: all .2s ease-out;
462 transition: all .2s ease-out; }
463 .colorlib-nav-toggle.dark i::before, .colorlib-nav-toggle.dark i::after {
464 background: #fff;
465 -webkit-transition: 0.2s;
466 -o-transition: 0.2s;
467 transition: 0.2s; }
468 @media (prefers-reduced-motion: reduce) {
469 .colorlib-nav-toggle.dark i::before, .colorlib-nav-toggle.dark i::after {
470 -webkit-transition: none;
471 -o-transition: none;
472 transition: none; } }
473
474 .colorlib-nav-toggle i::before {
475 top: -7px; }
476
477 .colorlib-nav-toggle i::after {
478 bottom: -7px; }
479
480 .colorlib-nav-toggle:hover i::before {
481 top: -10px; }
482
483 .colorlib-nav-toggle:hover i::after {
484 bottom: -10px; }
485
486 .colorlib-nav-toggle.active i {
487 background: transparent; }
488
489 .colorlib-nav-toggle.active i::before {
490 top: 0;
491 -webkit-transform: rotateZ(45deg);
492 -moz-transform: rotateZ(45deg);
493 -ms-transform: rotateZ(45deg);
494 -o-transform: rotateZ(45deg);
495 transform: rotateZ(45deg); }
496
497 .colorlib-nav-toggle.active i::after {
498 bottom: 0;
499 -webkit-transform: rotateZ(-45deg);
500 -moz-transform: rotateZ(-45deg);
501 -ms-transform: rotateZ(-45deg);
502 -o-transform: rotateZ(-45deg);
503 transform: rotateZ(-45deg); }
504
505 .colorlib-nav-toggle {
506 float: right;
507 z-index: 1003;
508 position: relative;
509 top: 0;
510 right: 0;
511 display: block;
512 margin: 0 auto;
513 cursor: pointer;
514 margin-top: 0; }
515 @media (max-width: 767.98px) {
516 .colorlib-nav-toggle {
517 right: 10px; } }
518
519 .hero-wrap {
520 background: #202020; }
521 .hero-wrap .slider-text .desc h1 {
522 font-size: 6vw;
523 font-weight: 700;
524 color: #fff;
525 text-transform: uppercase; }
526 .hero-wrap .slider-text .desc h3 {
527 color: rgba(255, 255, 255, 0.8);
528 font-size: 18px; }
529.row {
530 display: -ms-flexbox;
531 display: flex;
532 -ms-flex-wrap: wrap;
533 flex-wrap: wrap;
534 /* margin-right: -15px; */
535 /* margin-left: -15px; */
536}
537(function($) {
538
539 "use strict";
540
541 var fullHeight = function() {
542
543 $('.js-fullheight').css('height', $(window).height());
544 $(window).resize(function() {
545 $('.js-fullheight').css('height', $(window).height());
546 });
547
548 };
549 fullHeight();
550
551 var burgerMenu = function() {
552
553 $('.js-colorlib-nav-toggle').on('click', function(event) {
554 event.preventDefault();
555 var $this = $(this);
556 if ($('body').hasClass('menu-show')) {
557 $('body').removeClass('menu-show');
558 $('#colorlib-main-nav > .js-colorlib-nav-toggle').removeClass('show');
559 } else {
560 $('body').addClass('menu-show');
561 setTimeout(function() {
562 $('#colorlib-main-nav > .js-colorlib-nav-toggle').addClass('show');
563 }, 900);
564 }
565 })
566 };
567 burgerMenu();
568
569
570})(jQuery);
1<!doctype html>
2<html lang="de">
3 <head>
4 <title>VR</title>
5 <!-- Required meta tags -->
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8
9 <!-- Bootstrap CSS -->
10 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
11 <link rel="stylesheet" href="style.css">
12 </head>
13 <body>
14 <nav id="colorlib-main-nav" role="navigation">
15 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle active"><i></i></a>
16 <div class="js-fullheight colorlib-table">
17 <div class="img" style="background-image: url(images/bg_3.jpg);"></div>
18 <div class="colorlib-table-cell js-fullheight">
19 <div class="row no-gutters">
20 <div class="col-md-12 text-center">
21 <h1 class="mb-4"><a href="index.html" class="logo">Company Logo</a></h1>
22 <ul>
23 <li class="active"><a href="index.html"><span>Home</span></a></li>
24 <li><a href="about.html"><span>About</span></a></li>
25 <li><a href="blog.html"><span>Blog</span></a></li>
26 <li><a href="contact.html"><span>Contact</span></a></li>
27 </ul>
28 </div>
29 </div>
30 </div>
31 </div>
32 </nav>
33
34 <div class="header h-100">
35 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle"><i></i></a>
36 <h1 id="h-100" class="introduction h-100">Virtual Reality</h1>
37
38 </div>
39
40 <div class="h-100">
41 <h2 class="center">Was ist Virtual Reality (VR)</h2>
42 <p class="center">Eine virtuelle Welt oder ein Computerspiel, in das der Nutzer mit Hilfe eines VR-Headsets vollständig eintauchen kann</p>
43 </div>
44
45
46 <div id="vr-headset-kategorien" class="">
47 <!--Show each one as a full screen information - Picture or animation embeded at the left side - Text about it right-->
48 <div id="standalone" class="row">
49 <!---->
50 <div class="vr-left_side container col-lg-6">
51 <div class="sketchfab-embed-wrapper"> <iframe title="Quest 2 Headset - FanArt" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/ee496aa030bf4f37a52b445196796af3/embed?autospin=1&autostart=1&ui_hint=0"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/quest-2-headset-fanart-ee496aa030bf4f37a52b445196796af3?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Quest 2 Headset - FanArt </a> by <a href="https://sketchfab.com/josevillotguisan?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> joseVG </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
52 </div>
53
54 <div class="vr-right_side container col-lg-6">
55 <h3>Standalone</h3>
56
57 <p>Standalone VR-Headsets ben&ouml;tigen nur WLAN und Strom. In der VR-Brille ist ein eigener Prozessor eingebaut. Damit ist dieser Art super f&uuml;r Anf&auml;nger geeignet</p>
58
59 <p>
60 Vorteile:<br />
61 Kein guter PC ben&ouml;tigt<br />
62 Niedriger Einstiegspreis trotz guter Hardware<br/>
63 Gut optimierbar, da es fĂźr das Heaset nur einen Prozessor gibt</p>
64
65 <p>Nachteile:<br />
66 Je nach Headset schlechte Performance bei fordernden Spielen</p>
67 </div>
68
69 </div>
70
71 <div id="pc" class="row">
72 <div class="vr-left_side container col-lg-6">
73 <div class="sketchfab-embed-wrapper"> <iframe title="HTC Vive" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/4cee0970fe60444ead77d41fbb052a33/embed?autospin=1&autostart=1&ui_hint=0"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/htc-vive-4cee0970fe60444ead77d41fbb052a33?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> HTC Vive </a> by <a href="https://sketchfab.com/EternalRealm?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Eternal Realm </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
74 </div>
75
76 <div class="vr-right_side container col-lg-6">
77 <h3>PC-VR</h3>
78 <p>PC-VR Headsets funktionieren nur zusammen mit einem PC. Sie werden &uuml;ber ein langes Kabel verbunden. Mit einem passenden PC kann ein PC-VR Headset ein extrem sch&ouml;nes Bild liefern. Der Einstiegspreis ist jedoch sehr hoch, daher sind sie vor allem f&uuml;r Enthusiasten geeignet</p>
79
80 <p>Vorteile:<br />
81 Hohe Aufl&ouml;sung<br />
82 Wenig Lags</p>
83
84 <p>Nachteile:<br />
85 Hoher Einstiegspreis</p>
86 </div>
87 </div>
88
89 <div id="fulldive" class="row">
90 <div class="vr-left_side container col-lg-6">
91 <div class="sketchfab-embed-wrapper"> <iframe title="neuraLink" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/6a157c614d0641c2a2d2c7c7628fb01b/embed?autospin=1&autostart=1"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/neuralink-6a157c614d0641c2a2d2c7c7628fb01b?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> neuraLink </a> by <a href="https://sketchfab.com/rfarencibia?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> rfarencibia </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
92 </div>
93
94 <div class="vr-right_side container col-lg-6">
95 <h3>Full-Dive VR</h3>
96 <p>Tauche komplett in die VR-Welt ein. Full-Dive VR-Headsets befinden sich bereits in Entwicklung. Bei diesem Ansatz wird keine VR-Brille verwendet, die wie ein Monitor funktioniert sondern Full-Dive VR-Headsets greifen direkt auf die Seh-, Tast-, und weitere Nerven zu. Daher ist dies auch die umstrittenste Technologie</p>
97
98 <p>Vorteile:<br />
99 Unvergleichliche Immersion</p>
100
101 <p>Nachteile:<br />
102 Sicherheit - Z.B. In der VR-Welt einsperren - Unwahrscheinlich aber m&ouml;glich</p>
103 </div>
104 </div>
105
106 </div>
107
108
109
110
111 <!-- Optional JavaScript -->
112 <!-- jQuery first, then Popper.js, then Bootstrap JS -->
113 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
114 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
115 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
116 <script>
117 (function($) {
118
119 "use strict";
120
121 var fullHeight = function() {
122
123 $('.js-fullheight').css('height', $(window).height());
124 $(window).resize(function(){
125 $('.js-fullheight').css('height', $(window).height());
126 });
127
128 };
129 fullHeight();
130
131 var burgerMenu = function() {
132
133 $('.js-colorlib-nav-toggle').on('click', function(event) {
134 event.preventDefault();
135 var $this = $(this);
136 if( $('body').hasClass('menu-show') ) {
137 $('body').removeClass('menu-show');
138 $('#colorlib-main-nav > .js-colorlib-nav-toggle').removeClass('show');
139 } else {
140 $('body').addClass('menu-show');
141 setTimeout(function(){
142 $('#colorlib-main-nav > .js-colorlib-nav-toggle').addClass('show');
143 }, 900);
144 }
145 })
146 };
147 burgerMenu();
148
149
150 })(jQuery);
151 </script>
152 </body>
153</html>
154html, body {
155 background-color: black;
156
157 color: white;
158 height: 100%;
159 min-height: 100%;
160
161}
162
163#h-100{
164 /*height: 100%;
165 min-height: 100%;*/
166
167 /*padding-top: 30%;
168 padding-bottom: 30%;*/
169
170 text-align: center;
171}
172
173.introduction {
174 background-image: url("beat-saber-intro.jpg");
175 background-repeat: no-repeat;
176 background-attachment: fixed;
177 background-position: center;
178 background-size: cover;
179}
180
181.row{
182 padding-bottom: 10%;
183}
184
185.sketchfab-embed-wrapper{
186 height: 100%;
187 margin-bottom: 200px;
188}
189
190iframe{
191 height: 100%;
192 width: 100%;
193}
194
195header {
196 height: 100%;
197 min-height: 100%;
198}
199
200.center{
201 text-align: center;
202}
203
204/* Menu*/
205.img {
206 background-size: cover;
207 background-repeat: no-repeat;
208 background-position: center center; }
209
210 #colorlib-main-nav {
211 position: absolute;
212 top: 0;
213 bottom: 0;
214 right: 0;
215 padding: 0;
216 width: 100%;
217 height: 100%;
218 background: rgba(0, 0, 0, 0.99);
219 z-index: 1002;
220 text-align: center;
221 visibility: hidden;
222 opacity: 0;
223 -webkit-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
224 -moz-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
225 -ms-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
226 -o-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
227 transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
228 -webkit-transform: scale(0.1);
229 -moz-transform: scale(0);
230 -ms-transform: scale(0);
231 -o-transform: scale(0);
232 transform: scale(0);
233 overflow-y: scroll; }
234 #colorlib-main-nav .colorlib-table {
235 display: table;
236 width: 100%;
237 height: 100%; }
238 #colorlib-main-nav .colorlib-table .img {
239 position: absolute;
240 top: 0;
241 left: 0;
242 bottom: 0;
243 height: 100%;
244 width: 100%;
245 opacity: 1; }
246 #colorlib-main-nav .colorlib-table .img:after {
247 position: absolute;
248 top: 0;
249 left: 0;
250 bottom: 0;
251 right: 0;
252 content: '';
253 background: rgba(0, 0, 0, 0.3); }
254 #colorlib-main-nav .colorlib-table .colorlib-table-cell {
255 display: table-cell;
256 vertical-align: middle; }
257 #colorlib-main-nav .colorlib-nav-toggle {
258 position: absolute;
259 top: 40px;
260 right: 40px;
261 padding: 20px;
262 height: 44px;
263 width: 44px;
264 line-height: 0;
265 padding: 0 !important;
266 visibility: hidden;
267 opacity: 0;
268 -webkit-transition: 0.3s;
269 -o-transition: 0.3s;
270 transition: 0.3s; }
271 @media (prefers-reduced-motion: reduce) {
272 #colorlib-main-nav .colorlib-nav-toggle {
273 -webkit-transition: none;
274 -o-transition: none;
275 transition: none; } }
276 #colorlib-main-nav .colorlib-nav-toggle i {
277 top: 18px !important;
278 left: 0 !important;
279 margin: 0 !important;
280 padding: 0 !important;
281 line-height: 0;
282 text-indent: 0; }
283 #colorlib-main-nav .colorlib-nav-toggle.show {
284 visibility: visible;
285 opacity: 1; }
286 #colorlib-main-nav .colorlib-nav-toggle:hover i::before, #colorlib-main-nav .colorlib-nav-toggle:hover i::after {
287 content: '';
288 width: 40px;
289 height: 2px;
290 background: #fff;
291 position: absolute;
292 left: 0; }
293 .menu-show #colorlib-main-nav {
294 visibility: visible;
295 opacity: 1;
296 -webkit-transform: scale(1);
297 -moz-transform: scale(1);
298 -ms-transform: scale(1);
299 -o-transform: scale(1);
300 transform: scale(1); }
301 #colorlib-main-nav .logo {
302 font-size: 40px;
303 color: #fff;
304 text-transform: uppercase;
305 letter-spacing: 2px;
306 font-weight: 700;
307 position: relative;
308 display: inline-block;
309 margin-bottom: 0;
310 line-height: 1.5;
311 font-family: "Poppins", Arial, sans-serif; }
312 #colorlib-main-nav .logo span {
313 font-size: 14px;
314 display: block;
315 font-weight: 300;
316 color: rgba(255, 255, 255, 0.8);
317 letter-spacing: 8px; }
318 #colorlib-main-nav ul {
319 padding: 0;
320 margin: 0;
321 display: block; }
322 @media (max-width: 767.98px) {
323 #colorlib-main-nav ul {
324 padding: 20px 0 0 0; } }
325 #colorlib-main-nav ul li {
326 padding: 0;
327 margin: 0;
328 list-style: none;
329 font-weight: 600;
330 font-size: 14px;
331 letter-spacing: 5px;
332 text-transform: uppercase; }
333 #colorlib-main-nav ul li a {
334 display: block;
335 color: white;
336 padding: 5px 0; }
337 #colorlib-main-nav ul li a span {
338 color: white;
339 position: relative;
340 padding: 0 10px; }
341 #colorlib-main-nav ul li a span small {
342 position: absolute;
343 bottom: 7px;
344 left: -30px;
345 font-size: 16px;
346 color: rgba(255, 255, 255, 0.3);
347 border-bottom: 1px solid rgba(255, 255, 255, 0.3); }
348 #colorlib-main-nav ul li a:hover, #colorlib-main-nav ul li a:active, #colorlib-main-nav ul li a:focus {
349 outline: none;
350 text-decoration: none; }
351 #colorlib-main-nav ul li a:hover span:before, #colorlib-main-nav ul li a:active span:before, #colorlib-main-nav ul li a:focus span:before {
352 visibility: visible;
353 -webkit-transform: scaleX(1);
354 -moz-transform: scaleX(1);
355 -ms-transform: scaleX(1);
356 -o-transform: scaleX(1);
357 transform: scaleX(1); }
358 #colorlib-main-nav ul li.active a span {
359 color: #f8b500; }
360 #colorlib-main-nav ul li.active a span:before {
361 background: #fec771;
362 visibility: visible;
363 -webkit-transform: scaleX(1);
364 -moz-transform: scaleX(1);
365 -ms-transform: scaleX(1);
366 -o-transform: scaleX(1);
367 transform: scaleX(1); }
368
369 header {
370 padding: 2em 0;
371 position: absolute;
372 top: 0;
373 left: 0;
374 right: 0;
375 z-index: 9;
376 margin: 0 auto; }
377 @media (max-width: 767.98px) {
378 header {
379 padding: 1em 0;
380 position: absolute; } }
381 header .colorlib-navbar-brand {
382 float: left; }
383 header .colorlib-navbar-brand .colorlib-logo {
384 font-size: 12px;
385 color: #fff;
386 letter-spacing: 5px;
387 font-weight: 600;
388 position: relative;
389 display: inline-block;
390 margin-bottom: 0;
391 line-height: 1.5;
392 font-family: "Poppins", Arial, sans-serif;
393 text-transform: uppercase; }
394 header .colorlib-navbar-brand .colorlib-logo span {
395 font-size: 11px;
396 display: block;
397 font-weight: 300;
398 color: rgba(255, 255, 255, 0.8);
399 letter-spacing: 7px; }
400 header .colorlib-navbar-brand .colorlib-logo i {
401 color: #fec771;
402 position: absolute;
403 top: -18px;
404 bottom: 0;
405 left: 7px;
406 font-size: 48px; }
407 header .colorlib-navbar-brand .colorlib-logo:hover {
408 text-decoration: none !important; }
409 header .colorlib-navbar-brand .colorlib-logo:active, header .colorlib-navbar-brand .colorlib-logo:focus {
410 outline: none;
411 text-decoration: none; }
412
413 .colorlib-nav-toggle {
414 cursor: pointer;
415 text-decoration: none; }
416 .colorlib-nav-toggle.active i::before, .colorlib-nav-toggle.active i::after {
417 background: #000; }
418 .colorlib-nav-toggle.dark.active i::before, .colorlib-nav-toggle.dark.active i::after {
419 background: #000; }
420 .colorlib-nav-toggle:hover, .colorlib-nav-toggle:focus, .colorlib-nav-toggle:active {
421 outline: none;
422 border-bottom: none !important; }
423 .colorlib-nav-toggle i {
424 position: relative;
425 display: inline-block;
426 width: 20px;
427 height: 2px;
428 color: #000;
429 font: bold 14px/.4 Helvetica;
430 text-transform: uppercase;
431 text-indent: -55px;
432 background: #fff;
433 -webkit-transition: all .2s ease-out;
434 -o-transition: all .2s ease-out;
435 transition: all .2s ease-out; }
436 .menu-show .colorlib-nav-toggle i {
437 background: #fff;
438 color: #fff; }
439 .colorlib-nav-toggle i::before, .colorlib-nav-toggle i::after {
440 content: '';
441 width: 30px;
442 height: 2px;
443 background: #fff;
444 position: absolute;
445 left: 0;
446 -webkit-transition: 0.2s;
447 -o-transition: 0.2s;
448 transition: 0.2s; }
449 .menu-show .colorlib-nav-toggle i::before, .menu-show .colorlib-nav-toggle i::after {
450 background: #fff; }
451 @media (prefers-reduced-motion: reduce) {
452 .colorlib-nav-toggle i::before, .colorlib-nav-toggle i::after {
453 -webkit-transition: none;
454 -o-transition: none;
455 transition: none; } }
456 .colorlib-nav-toggle.dark i {
457 position: relative;
458 color: #fff;
459 background: #fff;
460 -webkit-transition: all .2s ease-out;
461 -o-transition: all .2s ease-out;
462 transition: all .2s ease-out; }
463 .colorlib-nav-toggle.dark i::before, .colorlib-nav-toggle.dark i::after {
464 background: #fff;
465 -webkit-transition: 0.2s;
466 -o-transition: 0.2s;
467 transition: 0.2s; }
468 @media (prefers-reduced-motion: reduce) {
469 .colorlib-nav-toggle.dark i::before, .colorlib-nav-toggle.dark i::after {
470 -webkit-transition: none;
471 -o-transition: none;
472 transition: none; } }
473
474 .colorlib-nav-toggle i::before {
475 top: -7px; }
476
477 .colorlib-nav-toggle i::after {
478 bottom: -7px; }
479
480 .colorlib-nav-toggle:hover i::before {
481 top: -10px; }
482
483 .colorlib-nav-toggle:hover i::after {
484 bottom: -10px; }
485
486 .colorlib-nav-toggle.active i {
487 background: transparent; }
488
489 .colorlib-nav-toggle.active i::before {
490 top: 0;
491 -webkit-transform: rotateZ(45deg);
492 -moz-transform: rotateZ(45deg);
493 -ms-transform: rotateZ(45deg);
494 -o-transform: rotateZ(45deg);
495 transform: rotateZ(45deg); }
496
497 .colorlib-nav-toggle.active i::after {
498 bottom: 0;
499 -webkit-transform: rotateZ(-45deg);
500 -moz-transform: rotateZ(-45deg);
501 -ms-transform: rotateZ(-45deg);
502 -o-transform: rotateZ(-45deg);
503 transform: rotateZ(-45deg); }
504
505 .colorlib-nav-toggle {
506 float: right;
507 z-index: 1003;
508 position: relative;
509 top: 0;
510 right: 0;
511 display: block;
512 margin: 0 auto;
513 cursor: pointer;
514 margin-top: 0; }
515 @media (max-width: 767.98px) {
516 .colorlib-nav-toggle {
517 right: 10px; } }
518
519 .hero-wrap {
520 background: #202020; }
521 .hero-wrap .slider-text .desc h1 {
522 font-size: 6vw;
523 font-weight: 700;
524 color: #fff;
525 text-transform: uppercase; }
526 .hero-wrap .slider-text .desc h3 {
527 color: rgba(255, 255, 255, 0.8);
528 font-size: 18px; }
529.row {
530 display: -ms-flexbox;
531 display: flex;
532 -ms-flex-wrap: wrap;
533 flex-wrap: wrap;
534 /* margin-right: -15px; */
535 /* margin-left: -15px; */
536}
537(function($) {
538
539 "use strict";
540
541 var fullHeight = function() {
542
543 $('.js-fullheight').css('height', $(window).height());
544 $(window).resize(function() {
545 $('.js-fullheight').css('height', $(window).height());
546 });
547
548 };
549 fullHeight();
550
551 var burgerMenu = function() {
552
553 $('.js-colorlib-nav-toggle').on('click', function(event) {
554 event.preventDefault();
555 var $this = $(this);
556 if ($('body').hasClass('menu-show')) {
557 $('body').removeClass('menu-show');
558 $('#colorlib-main-nav > .js-colorlib-nav-toggle').removeClass('show');
559 } else {
560 $('body').addClass('menu-show');
561 setTimeout(function() {
562 $('#colorlib-main-nav > .js-colorlib-nav-toggle').addClass('show');
563 }, 900);
564 }
565 })
566 };
567 burgerMenu();
568
569
570})(jQuery);html,
571body {
572 background-color: black;
573 color: white;
574 height: 100%;
575 min-height: 100%;
576 overflow-x: hidden;
577}
578
579#h-100 {
580 /*height: 100%;
581 min-height: 100%;*/
582 /*padding-top: 30%;
583 padding-bottom: 30%;*/
584 text-align: center;
585}
586
587.introduction {
588 background-image: url("beat-saber-intro.jpg");
589 background-repeat: no-repeat;
590 background-attachment: fixed;
591 background-position: center;
592 background-size: cover;
593}
594
595.row {
596 padding-bottom: 10%;
597}
598
599.sketchfab-embed-wrapper {
600 height: 100%;
601 margin-bottom: 200px;
602}
603
604iframe {
605 height: 100%;
606 width: 100%;
607}
608
609header {
610 height: 100%;
611 min-height: 100%;
612}
613
614.center {
615 text-align: center;
616}
617
618
619/* Menu*/
620
621.img {
622 background-size: cover;
623 background-repeat: no-repeat;
624 background-position: center center;
625}
626
627#colorlib-main-nav {
628 position: absolute;
629 top: 0;
630 bottom: 0;
631 right: 0;
632 padding: 0;
633 width: 100%;
634 height: 100%;
635 background: rgba(0, 0, 0, 0.99);
636 z-index: 1002;
637 text-align: center;
638 visibility: hidden;
639 opacity: 0;
640 -webkit-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
641 -moz-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
642 -ms-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
643 -o-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
644 transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
645 -webkit-transform: scale(0.1);
646 -moz-transform: scale(0);
647 -ms-transform: scale(0);
648 -o-transform: scale(0);
649 transform: scale(0);
650 overflow-y: scroll;
651}
652
653#colorlib-main-nav .colorlib-table {
654 display: table;
655 width: 100%;
656 height: 100%;
657}
658
659#colorlib-main-nav .colorlib-table .img {
660 position: absolute;
661 top: 0;
662 left: 0;
663 bottom: 0;
664 height: 100%;
665 width: 100%;
666 opacity: 1;
667}
668
669#colorlib-main-nav .colorlib-table .img:after {
670 position: absolute;
671 top: 0;
672 left: 0;
673 bottom: 0;
674 right: 0;
675 content: '';
676 background: rgba(0, 0, 0, 0.3);
677}
678
679#colorlib-main-nav .colorlib-table .colorlib-table-cell {
680 display: table-cell;
681 vertical-align: middle;
682}
683
684#colorlib-main-nav .colorlib-nav-toggle {
685 position: absolute;
686 top: 40px;
687 right: 40px;
688 padding: 20px;
689 height: 44px;
690 width: 44px;
691 line-height: 0;
692 padding: 0 !important;
693 visibility: hidden;
694 opacity: 0;
695 -webkit-transition: 0.3s;
696 -o-transition: 0.3s;
697 transition: 0.3s;
698}
699
700@media (prefers-reduced-motion: reduce) {
701 #colorlib-main-nav .colorlib-nav-toggle {
702 -webkit-transition: none;
703 -o-transition: none;
704 transition: none;
705 }
706}
707
708#colorlib-main-nav .colorlib-nav-toggle i {
709 top: 18px !important;
710 left: 0 !important;
711 margin: 0 !important;
712 padding: 0 !important;
713 line-height: 0;
714 text-indent: 0;
715}
716
717#colorlib-main-nav .colorlib-nav-toggle.show {
718 visibility: visible;
719 opacity: 1;
720}
721
722#colorlib-main-nav .colorlib-nav-toggle:hover i::before,
723#colorlib-main-nav .colorlib-nav-toggle:hover i::after {
724 content: '';
725 width: 40px;
726 height: 2px;
727 background: #fff;
728 position: absolute;
729 left: 0;
730}
731
732.menu-show #colorlib-main-nav {
733 visibility: visible;
734 opacity: 1;
735 -webkit-transform: scale(1);
736 -moz-transform: scale(1);
737 -ms-transform: scale(1);
738 -o-transform: scale(1);
739 transform: scale(1);
740}
741
742#colorlib-main-nav .logo {
743 font-size: 40px;
744 color: #fff;
745 text-transform: uppercase;
746 letter-spacing: 2px;
747 font-weight: 700;
748 position: relative;
749 display: inline-block;
750 margin-bottom: 0;
751 line-height: 1.5;
752 font-family: "Poppins", Arial, sans-serif;
753}
754
755#colorlib-main-nav .logo span {
756 font-size: 14px;
757 display: block;
758 font-weight: 300;
759 color: rgba(255, 255, 255, 0.8);
760 letter-spacing: 8px;
761}
762
763#colorlib-main-nav ul {
764 padding: 0;
765 margin: 0;
766 display: block;
767}
768
769@media (max-width: 767.98px) {
770 #colorlib-main-nav ul {
771 padding: 20px 0 0 0;
772 }
773}
774
775#colorlib-main-nav ul li {
776 padding: 0;
777 margin: 0;
778 list-style: none;
779 font-weight: 600;
780 font-size: 14px;
781 letter-spacing: 5px;
782 text-transform: uppercase;
783}
784
785#colorlib-main-nav ul li a {
786 display: block;
787 color: white;
788 padding: 5px 0;
789}
790
791#colorlib-main-nav ul li a span {
792 color: white;
793 position: relative;
794 padding: 0 10px;
795}
796
797#colorlib-main-nav ul li a span small {
798 position: absolute;
799 bottom: 7px;
800 left: -30px;
801 font-size: 16px;
802 color: rgba(255, 255, 255, 0.3);
803 border-bottom: 1px solid rgba(255, 255, 255, 0.3);
804}
805
806#colorlib-main-nav ul li a:hover,
807#colorlib-main-nav ul li a:active,
808#colorlib-main-nav ul li a:focus {
809 outline: none;
810 text-decoration: none;
811}
812
813#colorlib-main-nav ul li a:hover span:before,
814#colorlib-main-nav ul li a:active span:before,
815#colorlib-main-nav ul li a:focus span:before {
816 visibility: visible;
817 -webkit-transform: scaleX(1);
818 -moz-transform: scaleX(1);
819 -ms-transform: scaleX(1);
820 -o-transform: scaleX(1);
821 transform: scaleX(1);
822}
823
824#colorlib-main-nav ul li.active a span {
825 color: #f8b500;
826}
827
828#colorlib-main-nav ul li.active a span:before {
829 background: #fec771;
830 visibility: visible;
831 -webkit-transform: scaleX(1);
832 -moz-transform: scaleX(1);
833 -ms-transform: scaleX(1);
834 -o-transform: scaleX(1);
835 transform: scaleX(1);
836}
837
838header {
839 padding: 2em 0;
840 position: absolute;
841 top: 0;
842 left: 0;
843 right: 0;
844 z-index: 9;
845 margin: 0 auto;
846}
847
848@media (max-width: 767.98px) {
849 header {
850 padding: 1em 0;
851 position: absolute;
852 }
853}
854
855header .colorlib-navbar-brand {
856 float: left;
857}
858
859header .colorlib-navbar-brand .colorlib-logo {
860 font-size: 12px;
861 color: #fff;
862 letter-spacing: 5px;
863 font-weight: 600;
864 position: relative;
865 display: inline-block;
866 margin-bottom: 0;
867 line-height: 1.5;
868 font-family: "Poppins", Arial, sans-serif;
869 text-transform: uppercase;
870}
871
872header .colorlib-navbar-brand .colorlib-logo span {
873 font-size: 11px;
874 display: block;
875 font-weight: 300;
876 color: rgba(255, 255, 255, 0.8);
877 letter-spacing: 7px;
878}
879
880header .colorlib-navbar-brand .colorlib-logo i {
881 color: #fec771;
882 position: absolute;
883 top: -18px;
884 bottom: 0;
885 left: 7px;
886 font-size: 48px;
887}
888
889header .colorlib-navbar-brand .colorlib-logo:hover {
890 text-decoration: none !important;
891}
892
893header .colorlib-navbar-brand .colorlib-logo:active,
894header .colorlib-navbar-brand .colorlib-logo:focus {
895 outline: none;
896 text-decoration: none;
897}
898
899.colorlib-nav-toggle {
900 cursor: pointer;
901 text-decoration: none;
902}
903
904.colorlib-nav-toggle.active i::before,
905.colorlib-nav-toggle.active i::after {
906 background: #000;
907}
908
909.colorlib-nav-toggle.dark.active i::before,
910.colorlib-nav-toggle.dark.active i::after {
911 background: #000;
912}
913
914.colorlib-nav-toggle:hover,
915.colorlib-nav-toggle:focus,
916.colorlib-nav-toggle:active {
917 outline: none;
918 border-bottom: none !important;
919}
920
921.colorlib-nav-toggle i {
922 position: relative;
923 display: inline-block;
924 width: 20px;
925 height: 2px;
926 color: #000;
927 font: bold 14px/.4 Helvetica;
928 text-transform: uppercase;
929 text-indent: -55px;
930 background: #fff;
931 -webkit-transition: all .2s ease-out;
932 -o-transition: all .2s ease-out;
933 transition: all .2s ease-out;
934}
935
936.menu-show .colorlib-nav-toggle i {
937 background: #fff;
938 color: #fff;
939}
940
941.colorlib-nav-toggle i::before,
942.colorlib-nav-toggle i::after {
943 content: '';
944 width: 30px;
945 height: 2px;
946 background: #fff;
947 position: absolute;
948 left: 0;
949 -webkit-transition: 0.2s;
950 -o-transition: 0.2s;
951 transition: 0.2s;
952}
953
954.menu-show .colorlib-nav-toggle i::before,
955.menu-show .colorlib-nav-toggle i::after {
956 background: #fff;
957}
958
959@media (prefers-reduced-motion: reduce) {
960 .colorlib-nav-toggle i::before,
961 .colorlib-nav-toggle i::after {
962 -webkit-transition: none;
963 -o-transition: none;
964 transition: none;
965 }
966}
967
968.colorlib-nav-toggle.dark i {
969 position: relative;
970 color: #fff;
971 background: #fff;
972 -webkit-transition: all .2s ease-out;
973 -o-transition: all .2s ease-out;
974 transition: all .2s ease-out;
975}
976
977.colorlib-nav-toggle.dark i::before,
978.colorlib-nav-toggle.dark i::after {
979 background: #fff;
980 -webkit-transition: 0.2s;
981 -o-transition: 0.2s;
982 transition: 0.2s;
983}
984
985@media (prefers-reduced-motion: reduce) {
986 .colorlib-nav-toggle.dark i::before,
987 .colorlib-nav-toggle.dark i::after {
988 -webkit-transition: none;
989 -o-transition: none;
990 transition: none;
991 }
992}
993
994.colorlib-nav-toggle i::before {
995 top: -7px;
996}
997
998.colorlib-nav-toggle i::after {
999 bottom: -7px;
1000}
1001
1002.colorlib-nav-toggle:hover i::before {
1003 top: -10px;
1004}
1005
1006.colorlib-nav-toggle:hover i::after {
1007 bottom: -10px;
1008}
1009
1010.colorlib-nav-toggle.active i {
1011 background: transparent;
1012}
1013
1014.colorlib-nav-toggle.active i::before {
1015 top: 0;
1016 -webkit-transform: rotateZ(45deg);
1017 -moz-transform: rotateZ(45deg);
1018 -ms-transform: rotateZ(45deg);
1019 -o-transform: rotateZ(45deg);
1020 transform: rotateZ(45deg);
1021}
1022
1023.colorlib-nav-toggle.active i::after {
1024 bottom: 0;
1025 -webkit-transform: rotateZ(-45deg);
1026 -moz-transform: rotateZ(-45deg);
1027 -ms-transform: rotateZ(-45deg);
1028 -o-transform: rotateZ(-45deg);
1029 transform: rotateZ(-45deg);
1030}
1031
1032.colorlib-nav-toggle {
1033 float: right;
1034 z-index: 1003;
1035 position: relative;
1036 top: 0;
1037 right: 0;
1038 display: block;
1039 margin: 0 auto;
1040 cursor: pointer;
1041 margin-top: 0;
1042}
1043
1044@media (max-width: 767.98px) {
1045 .colorlib-nav-toggle {
1046 right: 10px;
1047 }
1048}
1049
1050.hero-wrap {
1051 background: #202020;
1052}
1053
1054.hero-wrap .slider-text .desc h1 {
1055 font-size: 6vw;
1056 font-weight: 700;
1057 color: #fff;
1058 text-transform: uppercase;
1059}
1060
1061.hero-wrap .slider-text .desc h3 {
1062 color: rgba(255, 255, 255, 0.8);
1063 font-size: 18px;
1064}
1<!doctype html>
2<html lang="de">
3 <head>
4 <title>VR</title>
5 <!-- Required meta tags -->
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8
9 <!-- Bootstrap CSS -->
10 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
11 <link rel="stylesheet" href="style.css">
12 </head>
13 <body>
14 <nav id="colorlib-main-nav" role="navigation">
15 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle active"><i></i></a>
16 <div class="js-fullheight colorlib-table">
17 <div class="img" style="background-image: url(images/bg_3.jpg);"></div>
18 <div class="colorlib-table-cell js-fullheight">
19 <div class="row no-gutters">
20 <div class="col-md-12 text-center">
21 <h1 class="mb-4"><a href="index.html" class="logo">Company Logo</a></h1>
22 <ul>
23 <li class="active"><a href="index.html"><span>Home</span></a></li>
24 <li><a href="about.html"><span>About</span></a></li>
25 <li><a href="blog.html"><span>Blog</span></a></li>
26 <li><a href="contact.html"><span>Contact</span></a></li>
27 </ul>
28 </div>
29 </div>
30 </div>
31 </div>
32 </nav>
33
34 <div class="header h-100">
35 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle"><i></i></a>
36 <h1 id="h-100" class="introduction h-100">Virtual Reality</h1>
37
38 </div>
39
40 <div class="h-100">
41 <h2 class="center">Was ist Virtual Reality (VR)</h2>
42 <p class="center">Eine virtuelle Welt oder ein Computerspiel, in das der Nutzer mit Hilfe eines VR-Headsets vollständig eintauchen kann</p>
43 </div>
44
45
46 <div id="vr-headset-kategorien" class="">
47 <!--Show each one as a full screen information - Picture or animation embeded at the left side - Text about it right-->
48 <div id="standalone" class="row">
49 <!---->
50 <div class="vr-left_side container col-lg-6">
51 <div class="sketchfab-embed-wrapper"> <iframe title="Quest 2 Headset - FanArt" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/ee496aa030bf4f37a52b445196796af3/embed?autospin=1&autostart=1&ui_hint=0"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/quest-2-headset-fanart-ee496aa030bf4f37a52b445196796af3?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Quest 2 Headset - FanArt </a> by <a href="https://sketchfab.com/josevillotguisan?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> joseVG </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
52 </div>
53
54 <div class="vr-right_side container col-lg-6">
55 <h3>Standalone</h3>
56
57 <p>Standalone VR-Headsets ben&ouml;tigen nur WLAN und Strom. In der VR-Brille ist ein eigener Prozessor eingebaut. Damit ist dieser Art super f&uuml;r Anf&auml;nger geeignet</p>
58
59 <p>
60 Vorteile:<br />
61 Kein guter PC ben&ouml;tigt<br />
62 Niedriger Einstiegspreis trotz guter Hardware<br/>
63 Gut optimierbar, da es fĂźr das Heaset nur einen Prozessor gibt</p>
64
65 <p>Nachteile:<br />
66 Je nach Headset schlechte Performance bei fordernden Spielen</p>
67 </div>
68
69 </div>
70
71 <div id="pc" class="row">
72 <div class="vr-left_side container col-lg-6">
73 <div class="sketchfab-embed-wrapper"> <iframe title="HTC Vive" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/4cee0970fe60444ead77d41fbb052a33/embed?autospin=1&autostart=1&ui_hint=0"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/htc-vive-4cee0970fe60444ead77d41fbb052a33?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> HTC Vive </a> by <a href="https://sketchfab.com/EternalRealm?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Eternal Realm </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
74 </div>
75
76 <div class="vr-right_side container col-lg-6">
77 <h3>PC-VR</h3>
78 <p>PC-VR Headsets funktionieren nur zusammen mit einem PC. Sie werden &uuml;ber ein langes Kabel verbunden. Mit einem passenden PC kann ein PC-VR Headset ein extrem sch&ouml;nes Bild liefern. Der Einstiegspreis ist jedoch sehr hoch, daher sind sie vor allem f&uuml;r Enthusiasten geeignet</p>
79
80 <p>Vorteile:<br />
81 Hohe Aufl&ouml;sung<br />
82 Wenig Lags</p>
83
84 <p>Nachteile:<br />
85 Hoher Einstiegspreis</p>
86 </div>
87 </div>
88
89 <div id="fulldive" class="row">
90 <div class="vr-left_side container col-lg-6">
91 <div class="sketchfab-embed-wrapper"> <iframe title="neuraLink" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/6a157c614d0641c2a2d2c7c7628fb01b/embed?autospin=1&autostart=1"> </iframe> <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/neuralink-6a157c614d0641c2a2d2c7c7628fb01b?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> neuraLink </a> by <a href="https://sketchfab.com/rfarencibia?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> rfarencibia </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p></div>
92 </div>
93
94 <div class="vr-right_side container col-lg-6">
95 <h3>Full-Dive VR</h3>
96 <p>Tauche komplett in die VR-Welt ein. Full-Dive VR-Headsets befinden sich bereits in Entwicklung. Bei diesem Ansatz wird keine VR-Brille verwendet, die wie ein Monitor funktioniert sondern Full-Dive VR-Headsets greifen direkt auf die Seh-, Tast-, und weitere Nerven zu. Daher ist dies auch die umstrittenste Technologie</p>
97
98 <p>Vorteile:<br />
99 Unvergleichliche Immersion</p>
100
101 <p>Nachteile:<br />
102 Sicherheit - Z.B. In der VR-Welt einsperren - Unwahrscheinlich aber m&ouml;glich</p>
103 </div>
104 </div>
105
106 </div>
107
108
109
110
111 <!-- Optional JavaScript -->
112 <!-- jQuery first, then Popper.js, then Bootstrap JS -->
113 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
114 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
115 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
116 <script>
117 (function($) {
118
119 "use strict";
120
121 var fullHeight = function() {
122
123 $('.js-fullheight').css('height', $(window).height());
124 $(window).resize(function(){
125 $('.js-fullheight').css('height', $(window).height());
126 });
127
128 };
129 fullHeight();
130
131 var burgerMenu = function() {
132
133 $('.js-colorlib-nav-toggle').on('click', function(event) {
134 event.preventDefault();
135 var $this = $(this);
136 if( $('body').hasClass('menu-show') ) {
137 $('body').removeClass('menu-show');
138 $('#colorlib-main-nav > .js-colorlib-nav-toggle').removeClass('show');
139 } else {
140 $('body').addClass('menu-show');
141 setTimeout(function(){
142 $('#colorlib-main-nav > .js-colorlib-nav-toggle').addClass('show');
143 }, 900);
144 }
145 })
146 };
147 burgerMenu();
148
149
150 })(jQuery);
151 </script>
152 </body>
153</html>
154html, body {
155 background-color: black;
156
157 color: white;
158 height: 100%;
159 min-height: 100%;
160
161}
162
163#h-100{
164 /*height: 100%;
165 min-height: 100%;*/
166
167 /*padding-top: 30%;
168 padding-bottom: 30%;*/
169
170 text-align: center;
171}
172
173.introduction {
174 background-image: url("beat-saber-intro.jpg");
175 background-repeat: no-repeat;
176 background-attachment: fixed;
177 background-position: center;
178 background-size: cover;
179}
180
181.row{
182 padding-bottom: 10%;
183}
184
185.sketchfab-embed-wrapper{
186 height: 100%;
187 margin-bottom: 200px;
188}
189
190iframe{
191 height: 100%;
192 width: 100%;
193}
194
195header {
196 height: 100%;
197 min-height: 100%;
198}
199
200.center{
201 text-align: center;
202}
203
204/* Menu*/
205.img {
206 background-size: cover;
207 background-repeat: no-repeat;
208 background-position: center center; }
209
210 #colorlib-main-nav {
211 position: absolute;
212 top: 0;
213 bottom: 0;
214 right: 0;
215 padding: 0;
216 width: 100%;
217 height: 100%;
218 background: rgba(0, 0, 0, 0.99);
219 z-index: 1002;
220 text-align: center;
221 visibility: hidden;
222 opacity: 0;
223 -webkit-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
224 -moz-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
225 -ms-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
226 -o-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
227 transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
228 -webkit-transform: scale(0.1);
229 -moz-transform: scale(0);
230 -ms-transform: scale(0);
231 -o-transform: scale(0);
232 transform: scale(0);
233 overflow-y: scroll; }
234 #colorlib-main-nav .colorlib-table {
235 display: table;
236 width: 100%;
237 height: 100%; }
238 #colorlib-main-nav .colorlib-table .img {
239 position: absolute;
240 top: 0;
241 left: 0;
242 bottom: 0;
243 height: 100%;
244 width: 100%;
245 opacity: 1; }
246 #colorlib-main-nav .colorlib-table .img:after {
247 position: absolute;
248 top: 0;
249 left: 0;
250 bottom: 0;
251 right: 0;
252 content: '';
253 background: rgba(0, 0, 0, 0.3); }
254 #colorlib-main-nav .colorlib-table .colorlib-table-cell {
255 display: table-cell;
256 vertical-align: middle; }
257 #colorlib-main-nav .colorlib-nav-toggle {
258 position: absolute;
259 top: 40px;
260 right: 40px;
261 padding: 20px;
262 height: 44px;
263 width: 44px;
264 line-height: 0;
265 padding: 0 !important;
266 visibility: hidden;
267 opacity: 0;
268 -webkit-transition: 0.3s;
269 -o-transition: 0.3s;
270 transition: 0.3s; }
271 @media (prefers-reduced-motion: reduce) {
272 #colorlib-main-nav .colorlib-nav-toggle {
273 -webkit-transition: none;
274 -o-transition: none;
275 transition: none; } }
276 #colorlib-main-nav .colorlib-nav-toggle i {
277 top: 18px !important;
278 left: 0 !important;
279 margin: 0 !important;
280 padding: 0 !important;
281 line-height: 0;
282 text-indent: 0; }
283 #colorlib-main-nav .colorlib-nav-toggle.show {
284 visibility: visible;
285 opacity: 1; }
286 #colorlib-main-nav .colorlib-nav-toggle:hover i::before, #colorlib-main-nav .colorlib-nav-toggle:hover i::after {
287 content: '';
288 width: 40px;
289 height: 2px;
290 background: #fff;
291 position: absolute;
292 left: 0; }
293 .menu-show #colorlib-main-nav {
294 visibility: visible;
295 opacity: 1;
296 -webkit-transform: scale(1);
297 -moz-transform: scale(1);
298 -ms-transform: scale(1);
299 -o-transform: scale(1);
300 transform: scale(1); }
301 #colorlib-main-nav .logo {
302 font-size: 40px;
303 color: #fff;
304 text-transform: uppercase;
305 letter-spacing: 2px;
306 font-weight: 700;
307 position: relative;
308 display: inline-block;
309 margin-bottom: 0;
310 line-height: 1.5;
311 font-family: "Poppins", Arial, sans-serif; }
312 #colorlib-main-nav .logo span {
313 font-size: 14px;
314 display: block;
315 font-weight: 300;
316 color: rgba(255, 255, 255, 0.8);
317 letter-spacing: 8px; }
318 #colorlib-main-nav ul {
319 padding: 0;
320 margin: 0;
321 display: block; }
322 @media (max-width: 767.98px) {
323 #colorlib-main-nav ul {
324 padding: 20px 0 0 0; } }
325 #colorlib-main-nav ul li {
326 padding: 0;
327 margin: 0;
328 list-style: none;
329 font-weight: 600;
330 font-size: 14px;
331 letter-spacing: 5px;
332 text-transform: uppercase; }
333 #colorlib-main-nav ul li a {
334 display: block;
335 color: white;
336 padding: 5px 0; }
337 #colorlib-main-nav ul li a span {
338 color: white;
339 position: relative;
340 padding: 0 10px; }
341 #colorlib-main-nav ul li a span small {
342 position: absolute;
343 bottom: 7px;
344 left: -30px;
345 font-size: 16px;
346 color: rgba(255, 255, 255, 0.3);
347 border-bottom: 1px solid rgba(255, 255, 255, 0.3); }
348 #colorlib-main-nav ul li a:hover, #colorlib-main-nav ul li a:active, #colorlib-main-nav ul li a:focus {
349 outline: none;
350 text-decoration: none; }
351 #colorlib-main-nav ul li a:hover span:before, #colorlib-main-nav ul li a:active span:before, #colorlib-main-nav ul li a:focus span:before {
352 visibility: visible;
353 -webkit-transform: scaleX(1);
354 -moz-transform: scaleX(1);
355 -ms-transform: scaleX(1);
356 -o-transform: scaleX(1);
357 transform: scaleX(1); }
358 #colorlib-main-nav ul li.active a span {
359 color: #f8b500; }
360 #colorlib-main-nav ul li.active a span:before {
361 background: #fec771;
362 visibility: visible;
363 -webkit-transform: scaleX(1);
364 -moz-transform: scaleX(1);
365 -ms-transform: scaleX(1);
366 -o-transform: scaleX(1);
367 transform: scaleX(1); }
368
369 header {
370 padding: 2em 0;
371 position: absolute;
372 top: 0;
373 left: 0;
374 right: 0;
375 z-index: 9;
376 margin: 0 auto; }
377 @media (max-width: 767.98px) {
378 header {
379 padding: 1em 0;
380 position: absolute; } }
381 header .colorlib-navbar-brand {
382 float: left; }
383 header .colorlib-navbar-brand .colorlib-logo {
384 font-size: 12px;
385 color: #fff;
386 letter-spacing: 5px;
387 font-weight: 600;
388 position: relative;
389 display: inline-block;
390 margin-bottom: 0;
391 line-height: 1.5;
392 font-family: "Poppins", Arial, sans-serif;
393 text-transform: uppercase; }
394 header .colorlib-navbar-brand .colorlib-logo span {
395 font-size: 11px;
396 display: block;
397 font-weight: 300;
398 color: rgba(255, 255, 255, 0.8);
399 letter-spacing: 7px; }
400 header .colorlib-navbar-brand .colorlib-logo i {
401 color: #fec771;
402 position: absolute;
403 top: -18px;
404 bottom: 0;
405 left: 7px;
406 font-size: 48px; }
407 header .colorlib-navbar-brand .colorlib-logo:hover {
408 text-decoration: none !important; }
409 header .colorlib-navbar-brand .colorlib-logo:active, header .colorlib-navbar-brand .colorlib-logo:focus {
410 outline: none;
411 text-decoration: none; }
412
413 .colorlib-nav-toggle {
414 cursor: pointer;
415 text-decoration: none; }
416 .colorlib-nav-toggle.active i::before, .colorlib-nav-toggle.active i::after {
417 background: #000; }
418 .colorlib-nav-toggle.dark.active i::before, .colorlib-nav-toggle.dark.active i::after {
419 background: #000; }
420 .colorlib-nav-toggle:hover, .colorlib-nav-toggle:focus, .colorlib-nav-toggle:active {
421 outline: none;
422 border-bottom: none !important; }
423 .colorlib-nav-toggle i {
424 position: relative;
425 display: inline-block;
426 width: 20px;
427 height: 2px;
428 color: #000;
429 font: bold 14px/.4 Helvetica;
430 text-transform: uppercase;
431 text-indent: -55px;
432 background: #fff;
433 -webkit-transition: all .2s ease-out;
434 -o-transition: all .2s ease-out;
435 transition: all .2s ease-out; }
436 .menu-show .colorlib-nav-toggle i {
437 background: #fff;
438 color: #fff; }
439 .colorlib-nav-toggle i::before, .colorlib-nav-toggle i::after {
440 content: '';
441 width: 30px;
442 height: 2px;
443 background: #fff;
444 position: absolute;
445 left: 0;
446 -webkit-transition: 0.2s;
447 -o-transition: 0.2s;
448 transition: 0.2s; }
449 .menu-show .colorlib-nav-toggle i::before, .menu-show .colorlib-nav-toggle i::after {
450 background: #fff; }
451 @media (prefers-reduced-motion: reduce) {
452 .colorlib-nav-toggle i::before, .colorlib-nav-toggle i::after {
453 -webkit-transition: none;
454 -o-transition: none;
455 transition: none; } }
456 .colorlib-nav-toggle.dark i {
457 position: relative;
458 color: #fff;
459 background: #fff;
460 -webkit-transition: all .2s ease-out;
461 -o-transition: all .2s ease-out;
462 transition: all .2s ease-out; }
463 .colorlib-nav-toggle.dark i::before, .colorlib-nav-toggle.dark i::after {
464 background: #fff;
465 -webkit-transition: 0.2s;
466 -o-transition: 0.2s;
467 transition: 0.2s; }
468 @media (prefers-reduced-motion: reduce) {
469 .colorlib-nav-toggle.dark i::before, .colorlib-nav-toggle.dark i::after {
470 -webkit-transition: none;
471 -o-transition: none;
472 transition: none; } }
473
474 .colorlib-nav-toggle i::before {
475 top: -7px; }
476
477 .colorlib-nav-toggle i::after {
478 bottom: -7px; }
479
480 .colorlib-nav-toggle:hover i::before {
481 top: -10px; }
482
483 .colorlib-nav-toggle:hover i::after {
484 bottom: -10px; }
485
486 .colorlib-nav-toggle.active i {
487 background: transparent; }
488
489 .colorlib-nav-toggle.active i::before {
490 top: 0;
491 -webkit-transform: rotateZ(45deg);
492 -moz-transform: rotateZ(45deg);
493 -ms-transform: rotateZ(45deg);
494 -o-transform: rotateZ(45deg);
495 transform: rotateZ(45deg); }
496
497 .colorlib-nav-toggle.active i::after {
498 bottom: 0;
499 -webkit-transform: rotateZ(-45deg);
500 -moz-transform: rotateZ(-45deg);
501 -ms-transform: rotateZ(-45deg);
502 -o-transform: rotateZ(-45deg);
503 transform: rotateZ(-45deg); }
504
505 .colorlib-nav-toggle {
506 float: right;
507 z-index: 1003;
508 position: relative;
509 top: 0;
510 right: 0;
511 display: block;
512 margin: 0 auto;
513 cursor: pointer;
514 margin-top: 0; }
515 @media (max-width: 767.98px) {
516 .colorlib-nav-toggle {
517 right: 10px; } }
518
519 .hero-wrap {
520 background: #202020; }
521 .hero-wrap .slider-text .desc h1 {
522 font-size: 6vw;
523 font-weight: 700;
524 color: #fff;
525 text-transform: uppercase; }
526 .hero-wrap .slider-text .desc h3 {
527 color: rgba(255, 255, 255, 0.8);
528 font-size: 18px; }
529.row {
530 display: -ms-flexbox;
531 display: flex;
532 -ms-flex-wrap: wrap;
533 flex-wrap: wrap;
534 /* margin-right: -15px; */
535 /* margin-left: -15px; */
536}
537(function($) {
538
539 "use strict";
540
541 var fullHeight = function() {
542
543 $('.js-fullheight').css('height', $(window).height());
544 $(window).resize(function() {
545 $('.js-fullheight').css('height', $(window).height());
546 });
547
548 };
549 fullHeight();
550
551 var burgerMenu = function() {
552
553 $('.js-colorlib-nav-toggle').on('click', function(event) {
554 event.preventDefault();
555 var $this = $(this);
556 if ($('body').hasClass('menu-show')) {
557 $('body').removeClass('menu-show');
558 $('#colorlib-main-nav > .js-colorlib-nav-toggle').removeClass('show');
559 } else {
560 $('body').addClass('menu-show');
561 setTimeout(function() {
562 $('#colorlib-main-nav > .js-colorlib-nav-toggle').addClass('show');
563 }, 900);
564 }
565 })
566 };
567 burgerMenu();
568
569
570})(jQuery);html,
571body {
572 background-color: black;
573 color: white;
574 height: 100%;
575 min-height: 100%;
576 overflow-x: hidden;
577}
578
579#h-100 {
580 /*height: 100%;
581 min-height: 100%;*/
582 /*padding-top: 30%;
583 padding-bottom: 30%;*/
584 text-align: center;
585}
586
587.introduction {
588 background-image: url("beat-saber-intro.jpg");
589 background-repeat: no-repeat;
590 background-attachment: fixed;
591 background-position: center;
592 background-size: cover;
593}
594
595.row {
596 padding-bottom: 10%;
597}
598
599.sketchfab-embed-wrapper {
600 height: 100%;
601 margin-bottom: 200px;
602}
603
604iframe {
605 height: 100%;
606 width: 100%;
607}
608
609header {
610 height: 100%;
611 min-height: 100%;
612}
613
614.center {
615 text-align: center;
616}
617
618
619/* Menu*/
620
621.img {
622 background-size: cover;
623 background-repeat: no-repeat;
624 background-position: center center;
625}
626
627#colorlib-main-nav {
628 position: absolute;
629 top: 0;
630 bottom: 0;
631 right: 0;
632 padding: 0;
633 width: 100%;
634 height: 100%;
635 background: rgba(0, 0, 0, 0.99);
636 z-index: 1002;
637 text-align: center;
638 visibility: hidden;
639 opacity: 0;
640 -webkit-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
641 -moz-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
642 -ms-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
643 -o-transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
644 transition: all 0.8s cubic-bezier(0.175, 0.885, 0.32, 1.275);
645 -webkit-transform: scale(0.1);
646 -moz-transform: scale(0);
647 -ms-transform: scale(0);
648 -o-transform: scale(0);
649 transform: scale(0);
650 overflow-y: scroll;
651}
652
653#colorlib-main-nav .colorlib-table {
654 display: table;
655 width: 100%;
656 height: 100%;
657}
658
659#colorlib-main-nav .colorlib-table .img {
660 position: absolute;
661 top: 0;
662 left: 0;
663 bottom: 0;
664 height: 100%;
665 width: 100%;
666 opacity: 1;
667}
668
669#colorlib-main-nav .colorlib-table .img:after {
670 position: absolute;
671 top: 0;
672 left: 0;
673 bottom: 0;
674 right: 0;
675 content: '';
676 background: rgba(0, 0, 0, 0.3);
677}
678
679#colorlib-main-nav .colorlib-table .colorlib-table-cell {
680 display: table-cell;
681 vertical-align: middle;
682}
683
684#colorlib-main-nav .colorlib-nav-toggle {
685 position: absolute;
686 top: 40px;
687 right: 40px;
688 padding: 20px;
689 height: 44px;
690 width: 44px;
691 line-height: 0;
692 padding: 0 !important;
693 visibility: hidden;
694 opacity: 0;
695 -webkit-transition: 0.3s;
696 -o-transition: 0.3s;
697 transition: 0.3s;
698}
699
700@media (prefers-reduced-motion: reduce) {
701 #colorlib-main-nav .colorlib-nav-toggle {
702 -webkit-transition: none;
703 -o-transition: none;
704 transition: none;
705 }
706}
707
708#colorlib-main-nav .colorlib-nav-toggle i {
709 top: 18px !important;
710 left: 0 !important;
711 margin: 0 !important;
712 padding: 0 !important;
713 line-height: 0;
714 text-indent: 0;
715}
716
717#colorlib-main-nav .colorlib-nav-toggle.show {
718 visibility: visible;
719 opacity: 1;
720}
721
722#colorlib-main-nav .colorlib-nav-toggle:hover i::before,
723#colorlib-main-nav .colorlib-nav-toggle:hover i::after {
724 content: '';
725 width: 40px;
726 height: 2px;
727 background: #fff;
728 position: absolute;
729 left: 0;
730}
731
732.menu-show #colorlib-main-nav {
733 visibility: visible;
734 opacity: 1;
735 -webkit-transform: scale(1);
736 -moz-transform: scale(1);
737 -ms-transform: scale(1);
738 -o-transform: scale(1);
739 transform: scale(1);
740}
741
742#colorlib-main-nav .logo {
743 font-size: 40px;
744 color: #fff;
745 text-transform: uppercase;
746 letter-spacing: 2px;
747 font-weight: 700;
748 position: relative;
749 display: inline-block;
750 margin-bottom: 0;
751 line-height: 1.5;
752 font-family: "Poppins", Arial, sans-serif;
753}
754
755#colorlib-main-nav .logo span {
756 font-size: 14px;
757 display: block;
758 font-weight: 300;
759 color: rgba(255, 255, 255, 0.8);
760 letter-spacing: 8px;
761}
762
763#colorlib-main-nav ul {
764 padding: 0;
765 margin: 0;
766 display: block;
767}
768
769@media (max-width: 767.98px) {
770 #colorlib-main-nav ul {
771 padding: 20px 0 0 0;
772 }
773}
774
775#colorlib-main-nav ul li {
776 padding: 0;
777 margin: 0;
778 list-style: none;
779 font-weight: 600;
780 font-size: 14px;
781 letter-spacing: 5px;
782 text-transform: uppercase;
783}
784
785#colorlib-main-nav ul li a {
786 display: block;
787 color: white;
788 padding: 5px 0;
789}
790
791#colorlib-main-nav ul li a span {
792 color: white;
793 position: relative;
794 padding: 0 10px;
795}
796
797#colorlib-main-nav ul li a span small {
798 position: absolute;
799 bottom: 7px;
800 left: -30px;
801 font-size: 16px;
802 color: rgba(255, 255, 255, 0.3);
803 border-bottom: 1px solid rgba(255, 255, 255, 0.3);
804}
805
806#colorlib-main-nav ul li a:hover,
807#colorlib-main-nav ul li a:active,
808#colorlib-main-nav ul li a:focus {
809 outline: none;
810 text-decoration: none;
811}
812
813#colorlib-main-nav ul li a:hover span:before,
814#colorlib-main-nav ul li a:active span:before,
815#colorlib-main-nav ul li a:focus span:before {
816 visibility: visible;
817 -webkit-transform: scaleX(1);
818 -moz-transform: scaleX(1);
819 -ms-transform: scaleX(1);
820 -o-transform: scaleX(1);
821 transform: scaleX(1);
822}
823
824#colorlib-main-nav ul li.active a span {
825 color: #f8b500;
826}
827
828#colorlib-main-nav ul li.active a span:before {
829 background: #fec771;
830 visibility: visible;
831 -webkit-transform: scaleX(1);
832 -moz-transform: scaleX(1);
833 -ms-transform: scaleX(1);
834 -o-transform: scaleX(1);
835 transform: scaleX(1);
836}
837
838header {
839 padding: 2em 0;
840 position: absolute;
841 top: 0;
842 left: 0;
843 right: 0;
844 z-index: 9;
845 margin: 0 auto;
846}
847
848@media (max-width: 767.98px) {
849 header {
850 padding: 1em 0;
851 position: absolute;
852 }
853}
854
855header .colorlib-navbar-brand {
856 float: left;
857}
858
859header .colorlib-navbar-brand .colorlib-logo {
860 font-size: 12px;
861 color: #fff;
862 letter-spacing: 5px;
863 font-weight: 600;
864 position: relative;
865 display: inline-block;
866 margin-bottom: 0;
867 line-height: 1.5;
868 font-family: "Poppins", Arial, sans-serif;
869 text-transform: uppercase;
870}
871
872header .colorlib-navbar-brand .colorlib-logo span {
873 font-size: 11px;
874 display: block;
875 font-weight: 300;
876 color: rgba(255, 255, 255, 0.8);
877 letter-spacing: 7px;
878}
879
880header .colorlib-navbar-brand .colorlib-logo i {
881 color: #fec771;
882 position: absolute;
883 top: -18px;
884 bottom: 0;
885 left: 7px;
886 font-size: 48px;
887}
888
889header .colorlib-navbar-brand .colorlib-logo:hover {
890 text-decoration: none !important;
891}
892
893header .colorlib-navbar-brand .colorlib-logo:active,
894header .colorlib-navbar-brand .colorlib-logo:focus {
895 outline: none;
896 text-decoration: none;
897}
898
899.colorlib-nav-toggle {
900 cursor: pointer;
901 text-decoration: none;
902}
903
904.colorlib-nav-toggle.active i::before,
905.colorlib-nav-toggle.active i::after {
906 background: #000;
907}
908
909.colorlib-nav-toggle.dark.active i::before,
910.colorlib-nav-toggle.dark.active i::after {
911 background: #000;
912}
913
914.colorlib-nav-toggle:hover,
915.colorlib-nav-toggle:focus,
916.colorlib-nav-toggle:active {
917 outline: none;
918 border-bottom: none !important;
919}
920
921.colorlib-nav-toggle i {
922 position: relative;
923 display: inline-block;
924 width: 20px;
925 height: 2px;
926 color: #000;
927 font: bold 14px/.4 Helvetica;
928 text-transform: uppercase;
929 text-indent: -55px;
930 background: #fff;
931 -webkit-transition: all .2s ease-out;
932 -o-transition: all .2s ease-out;
933 transition: all .2s ease-out;
934}
935
936.menu-show .colorlib-nav-toggle i {
937 background: #fff;
938 color: #fff;
939}
940
941.colorlib-nav-toggle i::before,
942.colorlib-nav-toggle i::after {
943 content: '';
944 width: 30px;
945 height: 2px;
946 background: #fff;
947 position: absolute;
948 left: 0;
949 -webkit-transition: 0.2s;
950 -o-transition: 0.2s;
951 transition: 0.2s;
952}
953
954.menu-show .colorlib-nav-toggle i::before,
955.menu-show .colorlib-nav-toggle i::after {
956 background: #fff;
957}
958
959@media (prefers-reduced-motion: reduce) {
960 .colorlib-nav-toggle i::before,
961 .colorlib-nav-toggle i::after {
962 -webkit-transition: none;
963 -o-transition: none;
964 transition: none;
965 }
966}
967
968.colorlib-nav-toggle.dark i {
969 position: relative;
970 color: #fff;
971 background: #fff;
972 -webkit-transition: all .2s ease-out;
973 -o-transition: all .2s ease-out;
974 transition: all .2s ease-out;
975}
976
977.colorlib-nav-toggle.dark i::before,
978.colorlib-nav-toggle.dark i::after {
979 background: #fff;
980 -webkit-transition: 0.2s;
981 -o-transition: 0.2s;
982 transition: 0.2s;
983}
984
985@media (prefers-reduced-motion: reduce) {
986 .colorlib-nav-toggle.dark i::before,
987 .colorlib-nav-toggle.dark i::after {
988 -webkit-transition: none;
989 -o-transition: none;
990 transition: none;
991 }
992}
993
994.colorlib-nav-toggle i::before {
995 top: -7px;
996}
997
998.colorlib-nav-toggle i::after {
999 bottom: -7px;
1000}
1001
1002.colorlib-nav-toggle:hover i::before {
1003 top: -10px;
1004}
1005
1006.colorlib-nav-toggle:hover i::after {
1007 bottom: -10px;
1008}
1009
1010.colorlib-nav-toggle.active i {
1011 background: transparent;
1012}
1013
1014.colorlib-nav-toggle.active i::before {
1015 top: 0;
1016 -webkit-transform: rotateZ(45deg);
1017 -moz-transform: rotateZ(45deg);
1018 -ms-transform: rotateZ(45deg);
1019 -o-transform: rotateZ(45deg);
1020 transform: rotateZ(45deg);
1021}
1022
1023.colorlib-nav-toggle.active i::after {
1024 bottom: 0;
1025 -webkit-transform: rotateZ(-45deg);
1026 -moz-transform: rotateZ(-45deg);
1027 -ms-transform: rotateZ(-45deg);
1028 -o-transform: rotateZ(-45deg);
1029 transform: rotateZ(-45deg);
1030}
1031
1032.colorlib-nav-toggle {
1033 float: right;
1034 z-index: 1003;
1035 position: relative;
1036 top: 0;
1037 right: 0;
1038 display: block;
1039 margin: 0 auto;
1040 cursor: pointer;
1041 margin-top: 0;
1042}
1043
1044@media (max-width: 767.98px) {
1045 .colorlib-nav-toggle {
1046 right: 10px;
1047 }
1048}
1049
1050.hero-wrap {
1051 background: #202020;
1052}
1053
1054.hero-wrap .slider-text .desc h1 {
1055 font-size: 6vw;
1056 font-weight: 700;
1057 color: #fff;
1058 text-transform: uppercase;
1059}
1060
1061.hero-wrap .slider-text .desc h3 {
1062 color: rgba(255, 255, 255, 0.8);
1063 font-size: 18px;
1064}<!-- Bootstrap CSS -->
1065<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
1066
1067<nav id="colorlib-main-nav" role="navigation">
1068 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle active"><i></i></a>
1069 <div class="js-fullheight colorlib-table">
1070 <div class="img" style="background-image: url(images/bg_3.jpg);"></div>
1071 <div class="colorlib-table-cell js-fullheight">
1072 <div class="row no-gutters">
1073 <div class="col-md-12 text-center">
1074 <h1 class="mb-4"><a href="index.html" class="logo">Company Logo</a></h1>
1075 <ul>
1076 <li class="active"><a href="index.html"><span>Home</span></a></li>
1077 <li><a href="about.html"><span>About</span></a></li>
1078 <li><a href="blog.html"><span>Blog</span></a></li>
1079 <li><a href="contact.html"><span>Contact</span></a></li>
1080 </ul>
1081 </div>
1082 </div>
1083 </div>
1084 </div>
1085</nav>
1086
1087<div class="header h-100">
1088 <a href="#" class="js-colorlib-nav-toggle colorlib-nav-toggle"><i></i></a>
1089 <h1 id="h-100" class="introduction h-100">Virtual Reality</h1>
1090
1091</div>
1092
1093<div class="h-100">
1094 <h2 class="center">Was ist Virtual Reality (VR)</h2>
1095 <p class="center">Eine virtuelle Welt oder ein Computerspiel, in das der Nutzer mit Hilfe eines VR-Headsets vollständig eintauchen kann</p>
1096</div>
1097
1098
1099<div id="vr-headset-kategorien" class="">
1100 <!--Show each one as a full screen information - Picture or animation embeded at the left side - Text about it right-->
1101 <div id="standalone" class="row">
1102 <!---->
1103 <div class="vr-left_side container col-lg-6">
1104 <div class="sketchfab-embed-wrapper"> <iframe title="Quest 2 Headset - FanArt" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share
1105 src="https://sketchfab.com/models/ee496aa030bf4f37a52b445196796af3/embed?autospin=1&autostart=1&ui_hint=0"> </iframe>
1106 <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/quest-2-headset-fanart-ee496aa030bf4f37a52b445196796af3?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Quest 2 Headset - FanArt </a> by <a href="https://sketchfab.com/josevillotguisan?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3" target="_blank" style="font-weight: bold; color: #1CAAD9;"> joseVG </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=ee496aa030bf4f37a52b445196796af3"
1107 target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p>
1108 </div>
1109 </div>
1110
1111 <div class="vr-right_side container col-lg-6">
1112 <h3>Standalone</h3>
1113
1114 <p>Standalone VR-Headsets ben&ouml;tigen nur WLAN und Strom. In der VR-Brille ist ein eigener Prozessor eingebaut. Damit ist dieser Art super f&uuml;r Anf&auml;nger geeignet</p>
1115
1116 <p>
1117 Vorteile:<br /> Kein guter PC ben&ouml;tigt<br /> Niedriger Einstiegspreis trotz guter Hardware<br/> Gut optimierbar, da es fĂźr das Heaset nur einen Prozessor gibt</p>
1118
1119 <p>Nachteile:<br /> Je nach Headset schlechte Performance bei fordernden Spielen</p>
1120 </div>
1121
1122 </div>
1123
1124 <div id="pc" class="row">
1125 <div class="vr-left_side container col-lg-6">
1126 <div class="sketchfab-embed-wrapper"> <iframe title="HTC Vive" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/4cee0970fe60444ead77d41fbb052a33/embed?autospin=1&autostart=1&ui_hint=0"> </iframe>
1127 <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/htc-vive-4cee0970fe60444ead77d41fbb052a33?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> HTC Vive </a> by <a href="https://sketchfab.com/EternalRealm?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33" target="_blank" style="font-weight: bold; color: #1CAAD9;"> Eternal Realm </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=4cee0970fe60444ead77d41fbb052a33"
1128 target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p>
1129 </div>
1130 </div>
1131
1132 <div class="vr-right_side container col-lg-6">
1133 <h3>PC-VR</h3>
1134 <p>PC-VR Headsets funktionieren nur zusammen mit einem PC. Sie werden &uuml;ber ein langes Kabel verbunden. Mit einem passenden PC kann ein PC-VR Headset ein extrem sch&ouml;nes Bild liefern. Der Einstiegspreis ist jedoch sehr hoch, daher sind sie
1135 vor allem f&uuml;r Enthusiasten geeignet</p>
1136
1137 <p>Vorteile:<br /> Hohe Aufl&ouml;sung<br /> Wenig Lags</p>
1138
1139 <p>Nachteile:<br /> Hoher Einstiegspreis</p>
1140 </div>
1141 </div>
1142
1143 <div id="fulldive" class="row">
1144 <div class="vr-left_side container col-lg-6">
1145 <div class="sketchfab-embed-wrapper"> <iframe title="neuraLink" frameborder="0" allowfullscreen mozallowfullscreen="true" webkitallowfullscreen="true" allow="fullscreen; autoplay; vr" xr-spatial-tracking execution-while-out-of-viewport execution-while-not-rendered web-share src="https://sketchfab.com/models/6a157c614d0641c2a2d2c7c7628fb01b/embed?autospin=1&autostart=1"> </iframe>
1146 <p style="font-size: 13px; font-weight: normal; margin: 5px; color: #4A4A4A;"> <a href="https://sketchfab.com/3d-models/neuralink-6a157c614d0641c2a2d2c7c7628fb01b?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> neuraLink </a> by <a href="https://sketchfab.com/rfarencibia?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b" target="_blank" style="font-weight: bold; color: #1CAAD9;"> rfarencibia </a> on <a href="https://sketchfab.com?utm_medium=embed&utm_campaign=share-popup&utm_content=6a157c614d0641c2a2d2c7c7628fb01b"
1147 target="_blank" style="font-weight: bold; color: #1CAAD9;">Sketchfab</a></p>
1148 </div>
1149 </div>
1150
1151 <div class="vr-right_side container col-lg-6">
1152 <h3>Full-Dive VR</h3>
1153 <p>Tauche komplett in die VR-Welt ein. Full-Dive VR-Headsets befinden sich bereits in Entwicklung. Bei diesem Ansatz wird keine VR-Brille verwendet, die wie ein Monitor funktioniert sondern Full-Dive VR-Headsets greifen direkt auf die Seh-, Tast-,
1154 und weitere Nerven zu. Daher ist dies auch die umstrittenste Technologie</p>
1155
1156 <p>Vorteile:<br /> Unvergleichliche Immersion</p>
1157
1158 <p>Nachteile:<br /> Sicherheit - Z.B. In der VR-Welt einsperren - Unwahrscheinlich aber m&ouml;glich</p>
1159 </div>
1160 </div>
1161
1162</div>
1163
1164
1165
1166
1167<!-- Optional JavaScript -->
1168<!-- jQuery first, then Popper.js, then Bootstrap JS -->
1169<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
1170<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
1171<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
QUESTION
Unity Gameobject not visible in Hololens 2
Asked 2021-Apr-23 at 18:36I am trying to build a HoloLens 2 app using unity.
I added an 3D object from blender, it works fine with the Remote Holographic app, I can interact with it and move around using the Hololens 2 device. But I am unable to get it in the app, the app build then it shows nothing just an empty scene.
The steps I do to build the app are:
- add the MRTK v2 foundation package
- file >> build settings >> switch to Universal Windows Platform.
- Player setting >> Player >> XR settings >> Virtual Reality support
- switch the Target device to Hololens and Architecture to ARM64
- add the Open Scenes to build settings.
- Mixed Realty Toolkit >> Utilities >> Build Window >> build Appx
I have Unity 2019.4.19f1 and MRTK 2.5.4
ANSWER
Answered 2021-Feb-25 at 10:29To rule out the possibility that it is due to Unity's configuration, check your settings with the tutorial (if you haven't already done so).
What I notice is that x64 is selected for the architecture in the tutorial. I don't think that's the reason, but it's worth a test.
If everything else is identical, check whether it works with the simple cube (analogous to the tutorial here).
Cheers
QUESTION
Why does my webpage look different upon resizing the browser window VS on mobile?
Asked 2021-Apr-02 at 04:45This is what my webpage looks like when resizing the browser window
This is what my webpage looks like on mobile
As you can see, everything looks messed up on mobile, but it actually looks alright when resizing my browser window. How come? Is there an easy fix to this? Here's my code. I'm kinda lost when it comes to CSS, and I'm just looking for a quick-fix to this.
1 body {
2 background-image: url("https://lumiere-a.akamaihd.net/v1/images/sa_pixar_virtualbg_coco_16x9_9ccd7110.jpeg");
3}
4
5.header {
6
7}
8
9#heading {
10 text-align: center;
11 font-family: 'Montserrat', sans-serif;
12 color: white;
13}
14
15#logo {
16 display: block;
17 margin-left: auto;
18 margin-right: auto;
19}
20
21.container {
22 border-radius: 5px;
23 background-color: #f2f2f2;
24 padding: 20px;
25 width: 400px;
26 min-height: 350px;
27 margin: 0 auto;
28}
29
30select, input[type=text] {
31 width: 100%;
32 padding: 12px 20px;
33 margin: 8px 0;
34 display: inline-block;
35 border: 1px solid #ccc;
36 border-radius: 4px;
37 box-sizing: border-box;
38}
39
40input[type=submit] {
41 width: 100%;
42 background-color: #4CAF50;
43 color: white;
44 padding: 14px 20px;
45 margin: 8px 0;
46 border: none;
47 border-radius: 4px;
48 cursor: pointer;
49}
50
51input[type=submit]:hover {
52 background-color: #45a049;
53}
54
55label {
56 font-family: 'Spinnaker', sans-serif;
57}
58
59#deviceSelector select {
60 width: 50%;
61 padding: 16px 20px;
62 border: none;
63 border-radius: 4px;
64 background-color: #DDDDDD;
65}
1 body {
2 background-image: url("https://lumiere-a.akamaihd.net/v1/images/sa_pixar_virtualbg_coco_16x9_9ccd7110.jpeg");
3}
4
5.header {
6
7}
8
9#heading {
10 text-align: center;
11 font-family: 'Montserrat', sans-serif;
12 color: white;
13}
14
15#logo {
16 display: block;
17 margin-left: auto;
18 margin-right: auto;
19}
20
21.container {
22 border-radius: 5px;
23 background-color: #f2f2f2;
24 padding: 20px;
25 width: 400px;
26 min-height: 350px;
27 margin: 0 auto;
28}
29
30select, input[type=text] {
31 width: 100%;
32 padding: 12px 20px;
33 margin: 8px 0;
34 display: inline-block;
35 border: 1px solid #ccc;
36 border-radius: 4px;
37 box-sizing: border-box;
38}
39
40input[type=submit] {
41 width: 100%;
42 background-color: #4CAF50;
43 color: white;
44 padding: 14px 20px;
45 margin: 8px 0;
46 border: none;
47 border-radius: 4px;
48 cursor: pointer;
49}
50
51input[type=submit]:hover {
52 background-color: #45a049;
53}
54
55label {
56 font-family: 'Spinnaker', sans-serif;
57}
58
59#deviceSelector select {
60 width: 50%;
61 padding: 16px 20px;
62 border: none;
63 border-radius: 4px;
64 background-color: #DDDDDD;
65}<div class="header">
66 <img src="logo.png" id="logo">
67 <h1 id="heading">Tidsbokning</h1>
68</div>
69<div class='container'>
70 <form action='' method='post' id='firstForm' autocomplete='off'>
71 <label for='people'>Välj antal personer</label>
72 <select id='people' name='people'>
73 <option value='1'>1</option>
74 <option value='2'>2</option>
75 <option value='3'>3</option>
76 <option value='4'>4</option>
77 <option value='5'>5</option>
78 <option value='6'>6</option>
79 <option value='7'>7</option>
80 <option value='8'>8</option>
81 <option value='9'>9</option>
82 <option value='10'>10</option>
83 </select>
84 <div id='deviceSelector'>
85 <label for='device1'>Välj enhet (person 1)</label><br>
86 <select id='device1' name='device1'>
87 <option value='VR'>Virtual Reality</option>
88 <option value='RacingSim'>Racing Simulator</option>
89 <option value='PC'>Dator</option>
90 <option value='Switch'>Nintendo Switch</option>
91 </select><br>
92 </div>
93 <label for='time'>Välj tid</label>
94 <select id='time' name='time'>
95 <option value='30'>30 min</option>
96 <option value='60'>1h</option>
97 <option value='90'>1h 30min</option>
98 <option value='120'>2h</option>
99 <option value='150'>2h 30 min</option>
100 <option value='180'>3h</option>
101 <option value='210'>3h 30 min</option>
102 <option value='240'>4h</option>
103 <option value='270'>4h 30 min</option>
104 <option value='300'>5h</option>
105 </select>
106 <label for='priceTotal'>Pris</label>
107 <input type='text' id='priceTotal' name='priceTotal' value='50 kr' disabled>
108 <input type='submit' name='submit' value='Fortsätt'>
109 </form>
110</div>
ANSWER
Answered 2021-Apr-02 at 04:31Just change .container
width in mobile using media query
1 body {
2 background-image: url("https://lumiere-a.akamaihd.net/v1/images/sa_pixar_virtualbg_coco_16x9_9ccd7110.jpeg");
3}
4
5.header {
6
7}
8
9#heading {
10 text-align: center;
11 font-family: 'Montserrat', sans-serif;
12 color: white;
13}
14
15#logo {
16 display: block;
17 margin-left: auto;
18 margin-right: auto;
19}
20
21.container {
22 border-radius: 5px;
23 background-color: #f2f2f2;
24 padding: 20px;
25 width: 400px;
26 min-height: 350px;
27 margin: 0 auto;
28}
29
30select, input[type=text] {
31 width: 100%;
32 padding: 12px 20px;
33 margin: 8px 0;
34 display: inline-block;
35 border: 1px solid #ccc;
36 border-radius: 4px;
37 box-sizing: border-box;
38}
39
40input[type=submit] {
41 width: 100%;
42 background-color: #4CAF50;
43 color: white;
44 padding: 14px 20px;
45 margin: 8px 0;
46 border: none;
47 border-radius: 4px;
48 cursor: pointer;
49}
50
51input[type=submit]:hover {
52 background-color: #45a049;
53}
54
55label {
56 font-family: 'Spinnaker', sans-serif;
57}
58
59#deviceSelector select {
60 width: 50%;
61 padding: 16px 20px;
62 border: none;
63 border-radius: 4px;
64 background-color: #DDDDDD;
65}<div class="header">
66 <img src="logo.png" id="logo">
67 <h1 id="heading">Tidsbokning</h1>
68</div>
69<div class='container'>
70 <form action='' method='post' id='firstForm' autocomplete='off'>
71 <label for='people'>Välj antal personer</label>
72 <select id='people' name='people'>
73 <option value='1'>1</option>
74 <option value='2'>2</option>
75 <option value='3'>3</option>
76 <option value='4'>4</option>
77 <option value='5'>5</option>
78 <option value='6'>6</option>
79 <option value='7'>7</option>
80 <option value='8'>8</option>
81 <option value='9'>9</option>
82 <option value='10'>10</option>
83 </select>
84 <div id='deviceSelector'>
85 <label for='device1'>Välj enhet (person 1)</label><br>
86 <select id='device1' name='device1'>
87 <option value='VR'>Virtual Reality</option>
88 <option value='RacingSim'>Racing Simulator</option>
89 <option value='PC'>Dator</option>
90 <option value='Switch'>Nintendo Switch</option>
91 </select><br>
92 </div>
93 <label for='time'>Välj tid</label>
94 <select id='time' name='time'>
95 <option value='30'>30 min</option>
96 <option value='60'>1h</option>
97 <option value='90'>1h 30min</option>
98 <option value='120'>2h</option>
99 <option value='150'>2h 30 min</option>
100 <option value='180'>3h</option>
101 <option value='210'>3h 30 min</option>
102 <option value='240'>4h</option>
103 <option value='270'>4h 30 min</option>
104 <option value='300'>5h</option>
105 </select>
106 <label for='priceTotal'>Pris</label>
107 <input type='text' id='priceTotal' name='priceTotal' value='50 kr' disabled>
108 <input type='submit' name='submit' value='Fortsätt'>
109 </form>
110</div>@media screen and (max-width: 480px) {
111 .container {width: 300px;}
112}
113
1 body {
2 background-image: url("https://lumiere-a.akamaihd.net/v1/images/sa_pixar_virtualbg_coco_16x9_9ccd7110.jpeg");
3}
4
5.header {
6
7}
8
9#heading {
10 text-align: center;
11 font-family: 'Montserrat', sans-serif;
12 color: white;
13}
14
15#logo {
16 display: block;
17 margin-left: auto;
18 margin-right: auto;
19}
20
21.container {
22 border-radius: 5px;
23 background-color: #f2f2f2;
24 padding: 20px;
25 width: 400px;
26 min-height: 350px;
27 margin: 0 auto;
28}
29
30select, input[type=text] {
31 width: 100%;
32 padding: 12px 20px;
33 margin: 8px 0;
34 display: inline-block;
35 border: 1px solid #ccc;
36 border-radius: 4px;
37 box-sizing: border-box;
38}
39
40input[type=submit] {
41 width: 100%;
42 background-color: #4CAF50;
43 color: white;
44 padding: 14px 20px;
45 margin: 8px 0;
46 border: none;
47 border-radius: 4px;
48 cursor: pointer;
49}
50
51input[type=submit]:hover {
52 background-color: #45a049;
53}
54
55label {
56 font-family: 'Spinnaker', sans-serif;
57}
58
59#deviceSelector select {
60 width: 50%;
61 padding: 16px 20px;
62 border: none;
63 border-radius: 4px;
64 background-color: #DDDDDD;
65}<div class="header">
66 <img src="logo.png" id="logo">
67 <h1 id="heading">Tidsbokning</h1>
68</div>
69<div class='container'>
70 <form action='' method='post' id='firstForm' autocomplete='off'>
71 <label for='people'>Välj antal personer</label>
72 <select id='people' name='people'>
73 <option value='1'>1</option>
74 <option value='2'>2</option>
75 <option value='3'>3</option>
76 <option value='4'>4</option>
77 <option value='5'>5</option>
78 <option value='6'>6</option>
79 <option value='7'>7</option>
80 <option value='8'>8</option>
81 <option value='9'>9</option>
82 <option value='10'>10</option>
83 </select>
84 <div id='deviceSelector'>
85 <label for='device1'>Välj enhet (person 1)</label><br>
86 <select id='device1' name='device1'>
87 <option value='VR'>Virtual Reality</option>
88 <option value='RacingSim'>Racing Simulator</option>
89 <option value='PC'>Dator</option>
90 <option value='Switch'>Nintendo Switch</option>
91 </select><br>
92 </div>
93 <label for='time'>Välj tid</label>
94 <select id='time' name='time'>
95 <option value='30'>30 min</option>
96 <option value='60'>1h</option>
97 <option value='90'>1h 30min</option>
98 <option value='120'>2h</option>
99 <option value='150'>2h 30 min</option>
100 <option value='180'>3h</option>
101 <option value='210'>3h 30 min</option>
102 <option value='240'>4h</option>
103 <option value='270'>4h 30 min</option>
104 <option value='300'>5h</option>
105 </select>
106 <label for='priceTotal'>Pris</label>
107 <input type='text' id='priceTotal' name='priceTotal' value='50 kr' disabled>
108 <input type='submit' name='submit' value='Fortsätt'>
109 </form>
110</div>@media screen and (max-width: 480px) {
111 .container {width: 300px;}
112}
113body {
114 background-image:url("https://lumiere-a.akamaihd.net/v1/images/sa_pixar_virtualbg_coco_16x9_9ccd7110.jpeg");
115}
116
117.header {
118
119}
120
121#heading {
122 text-align: center;
123 font-family: 'Montserrat', sans-serif;
124 color: white;
125}
126
127#logo {
128 display: block;
129 margin-left: auto;
130 margin-right: auto;
131}
132
133.container {
134 border-radius: 5px;
135 background-color: #f2f2f2;
136 padding: 20px;
137 width: 400px;
138 min-height: 350px;
139 margin: 0 auto;
140}
141
142@media screen and (max-width: 480px) {
143 .container {width: 300px;}
144 }
145
146select, input[type=text] {
147 width: 100%;
148 padding: 12px 20px;
149 margin: 8px 0;
150 display: inline-block;
151 border: 1px solid #ccc;
152 border-radius: 4px;
153 box-sizing: border-box;
154}
155
156input[type=submit] {
157 width: 100%;
158 background-color: #4CAF50;
159 color: white;
160 padding: 14px 20px;
161 margin: 8px 0;
162 border: none;
163 border-radius: 4px;
164 cursor: pointer;
165}
166
167input[type=submit]:hover {
168 background-color: #45a049;
169}
170
171label {
172 font-family: 'Spinnaker', sans-serif;
173}
174
175#deviceSelector select {
176 width: 50%;
177 padding: 16px 20px;
178 border: none;
179 border-radius: 4px;
180 background-color: #DDDDDD;
181}
1 body {
2 background-image: url("https://lumiere-a.akamaihd.net/v1/images/sa_pixar_virtualbg_coco_16x9_9ccd7110.jpeg");
3}
4
5.header {
6
7}
8
9#heading {
10 text-align: center;
11 font-family: 'Montserrat', sans-serif;
12 color: white;
13}
14
15#logo {
16 display: block;
17 margin-left: auto;
18 margin-right: auto;
19}
20
21.container {
22 border-radius: 5px;
23 background-color: #f2f2f2;
24 padding: 20px;
25 width: 400px;
26 min-height: 350px;
27 margin: 0 auto;
28}
29
30select, input[type=text] {
31 width: 100%;
32 padding: 12px 20px;
33 margin: 8px 0;
34 display: inline-block;
35 border: 1px solid #ccc;
36 border-radius: 4px;
37 box-sizing: border-box;
38}
39
40input[type=submit] {
41 width: 100%;
42 background-color: #4CAF50;
43 color: white;
44 padding: 14px 20px;
45 margin: 8px 0;
46 border: none;
47 border-radius: 4px;
48 cursor: pointer;
49}
50
51input[type=submit]:hover {
52 background-color: #45a049;
53}
54
55label {
56 font-family: 'Spinnaker', sans-serif;
57}
58
59#deviceSelector select {
60 width: 50%;
61 padding: 16px 20px;
62 border: none;
63 border-radius: 4px;
64 background-color: #DDDDDD;
65}<div class="header">
66 <img src="logo.png" id="logo">
67 <h1 id="heading">Tidsbokning</h1>
68</div>
69<div class='container'>
70 <form action='' method='post' id='firstForm' autocomplete='off'>
71 <label for='people'>Välj antal personer</label>
72 <select id='people' name='people'>
73 <option value='1'>1</option>
74 <option value='2'>2</option>
75 <option value='3'>3</option>
76 <option value='4'>4</option>
77 <option value='5'>5</option>
78 <option value='6'>6</option>
79 <option value='7'>7</option>
80 <option value='8'>8</option>
81 <option value='9'>9</option>
82 <option value='10'>10</option>
83 </select>
84 <div id='deviceSelector'>
85 <label for='device1'>Välj enhet (person 1)</label><br>
86 <select id='device1' name='device1'>
87 <option value='VR'>Virtual Reality</option>
88 <option value='RacingSim'>Racing Simulator</option>
89 <option value='PC'>Dator</option>
90 <option value='Switch'>Nintendo Switch</option>
91 </select><br>
92 </div>
93 <label for='time'>Välj tid</label>
94 <select id='time' name='time'>
95 <option value='30'>30 min</option>
96 <option value='60'>1h</option>
97 <option value='90'>1h 30min</option>
98 <option value='120'>2h</option>
99 <option value='150'>2h 30 min</option>
100 <option value='180'>3h</option>
101 <option value='210'>3h 30 min</option>
102 <option value='240'>4h</option>
103 <option value='270'>4h 30 min</option>
104 <option value='300'>5h</option>
105 </select>
106 <label for='priceTotal'>Pris</label>
107 <input type='text' id='priceTotal' name='priceTotal' value='50 kr' disabled>
108 <input type='submit' name='submit' value='Fortsätt'>
109 </form>
110</div>@media screen and (max-width: 480px) {
111 .container {width: 300px;}
112}
113body {
114 background-image:url("https://lumiere-a.akamaihd.net/v1/images/sa_pixar_virtualbg_coco_16x9_9ccd7110.jpeg");
115}
116
117.header {
118
119}
120
121#heading {
122 text-align: center;
123 font-family: 'Montserrat', sans-serif;
124 color: white;
125}
126
127#logo {
128 display: block;
129 margin-left: auto;
130 margin-right: auto;
131}
132
133.container {
134 border-radius: 5px;
135 background-color: #f2f2f2;
136 padding: 20px;
137 width: 400px;
138 min-height: 350px;
139 margin: 0 auto;
140}
141
142@media screen and (max-width: 480px) {
143 .container {width: 300px;}
144 }
145
146select, input[type=text] {
147 width: 100%;
148 padding: 12px 20px;
149 margin: 8px 0;
150 display: inline-block;
151 border: 1px solid #ccc;
152 border-radius: 4px;
153 box-sizing: border-box;
154}
155
156input[type=submit] {
157 width: 100%;
158 background-color: #4CAF50;
159 color: white;
160 padding: 14px 20px;
161 margin: 8px 0;
162 border: none;
163 border-radius: 4px;
164 cursor: pointer;
165}
166
167input[type=submit]:hover {
168 background-color: #45a049;
169}
170
171label {
172 font-family: 'Spinnaker', sans-serif;
173}
174
175#deviceSelector select {
176 width: 50%;
177 padding: 16px 20px;
178 border: none;
179 border-radius: 4px;
180 background-color: #DDDDDD;
181}<div class="header">
182 <img src="logo.png" id="logo">
183 <h1 id="heading">Tidsbokning</h1>
184</div>
185<div class='container'>
186 <form action='' method='post' id='firstForm' autocomplete='off'>
187 <label for='people'>Välj antal personer</label>
188 <select id='people' name='people'>
189 <option value='1'>1</option>
190 <option value='2'>2</option>
191 <option value='3'>3</option>
192 <option value='4'>4</option>
193 <option value='5'>5</option>
194 <option value='6'>6</option>
195 <option value='7'>7</option>
196 <option value='8'>8</option>
197 <option value='9'>9</option>
198 <option value='10'>10</option>
199 </select>
200 <div id='deviceSelector'>
201 <label for='device1'>Välj enhet (person 1)</label><br>
202 <select id='device1' name='device1'>
203 <option value='VR'>Virtual Reality</option>
204 <option value='RacingSim'>Racing Simulator</option>
205 <option value='PC'>Dator</option>
206 <option value='Switch'>Nintendo Switch</option>
207 </select><br>
208 </div>
209 <label for='time'>Välj tid</label>
210 <select id='time' name='time'>
211 <option value='30'>30 min</option>
212 <option value='60'>1h</option>
213 <option value='90'>1h 30min</option>
214 <option value='120'>2h</option>
215 <option value='150'>2h 30 min</option>
216 <option value='180'>3h</option>
217 <option value='210'>3h 30 min</option>
218 <option value='240'>4h</option>
219 <option value='270'>4h 30 min</option>
220 <option value='300'>5h</option>
221 </select>
222 <label for='priceTotal'>Pris</label>
223 <input type='text' id='priceTotal' name='priceTotal' value='50 kr' disabled>
224 <input type='submit' name='submit' value='Fortsätt'>
225 </form>
226</div>
QUESTION
NoClassDefFoundError in OSGi although it is exported and imported
Asked 2021-Mar-23 at 21:20I tried to create a basic virtual reality IDE based on Karaf.
I have 3 maven-projects:
- VRServer who connect to a native-component for rendering.
- VR Component Toolkit for VR-HMI-Widgets (Having a VRFrame who extends from VRComponent) as a Multi-Module-Maven-Project.
- The VR IDE project read/write files and execute lowlevel commands.
I installed all of them into Karaf:
1karaf@root()> bundle:list
2START LEVEL 100 , List Threshold: 50
3 ID | State | Lvl | Version | Name
4----+--------+-----+--------------------+---------------------------------------------------------------------------
5 31 | Active | 80 | 4.3.0 | Apache Karaf :: OSGi Services :: Event
6 54 | Active | 80 | 1.3.2 | Apache Aries SPI Fly Dynamic Weaving Bundle
7 55 | Active | 80 | 9.0.0 | org.objectweb.asm
8 56 | Active | 80 | 9.0.0 | org.objectweb.asm.commons
9 57 | Active | 80 | 9.0.0 | org.objectweb.asm.tree
10 58 | Active | 80 | 9.0.0 | org.objectweb.asm.tree.analysis
11 59 | Active | 80 | 9.0.0 | org.objectweb.asm.util
12 60 | Active | 80 | 2.0.17 | OpenWebBeans Core
13 61 | Active | 80 | 2.0.17 | SPI definition
14 62 | Active | 80 | 1.1.3 | Apache Aries CDI - CDI Component Runtime (CCR)
15 63 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI classes for Portable Extensions
16 64 | Active | 80 | 1.1.3 | Apache Aries CDI - Container using Apache OpenWebBeans
17 65 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI
18 66 | Active | 80 | 1.0.12 | Apache Felix Converter
19 67 | Active | 80 | 1.2.0 | Apache Geronimo JSR-330 Spec 1.0
20 68 | Active | 80 | 1.1.0 | Apache Geronimo Expression Language Spec 2.2
21 69 | Active | 80 | 1.2.0 | Apache Geronimo Interceptor Spec 1.2
22 70 | Active | 80 | 1.2.0 | Apache Geronimo JCDI Spec 2.0
23 71 | Active | 80 | 1.3.0.3 | Apache ServiceMix :: Specs :: Annotation API 1.3
24 72 | Active | 80 | 4.17.0 | Apache XBean :: ASM shaded (repackaged)
25 73 | Active | 80 | 4.17.0 | Apache XBean OSGI Bundle Utilities
26 74 | Active | 80 | 4.17.0 | Apache XBean :: Finder shaded (repackaged)
27 75 | Active | 80 | 1.0.1.201505202024 | org.osgi:org.osgi.namespace.extender
28 76 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.implementation
29 77 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.service
30 78 | Active | 80 | 1.0.0.201810101357 | org.osgi:org.osgi.service.cdi
31 79 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.function
32 80 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.promise
33 81 | Active | 80 | 4.3.1.SNAPSHOT | Apache Karaf :: OSGi Services :: Event
34134 | Active | 80 | 1.0.0 | Virtual reality server
35135 | Active | 80 | 0.0.1.SNAPSHOT | VRComponent
36136 | Active | 80 | 0.0.1.SNAPSHOT | VRFrame
37142 | Active | 80 | 0.0.1.SNAPSHOT | Virtual reality integrated development environment (VRIDE)
38karaf@root()>
39
But when I tried to start the VRIDE bundle, I get this exception:
1karaf@root()> bundle:list
2START LEVEL 100 , List Threshold: 50
3 ID | State | Lvl | Version | Name
4----+--------+-----+--------------------+---------------------------------------------------------------------------
5 31 | Active | 80 | 4.3.0 | Apache Karaf :: OSGi Services :: Event
6 54 | Active | 80 | 1.3.2 | Apache Aries SPI Fly Dynamic Weaving Bundle
7 55 | Active | 80 | 9.0.0 | org.objectweb.asm
8 56 | Active | 80 | 9.0.0 | org.objectweb.asm.commons
9 57 | Active | 80 | 9.0.0 | org.objectweb.asm.tree
10 58 | Active | 80 | 9.0.0 | org.objectweb.asm.tree.analysis
11 59 | Active | 80 | 9.0.0 | org.objectweb.asm.util
12 60 | Active | 80 | 2.0.17 | OpenWebBeans Core
13 61 | Active | 80 | 2.0.17 | SPI definition
14 62 | Active | 80 | 1.1.3 | Apache Aries CDI - CDI Component Runtime (CCR)
15 63 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI classes for Portable Extensions
16 64 | Active | 80 | 1.1.3 | Apache Aries CDI - Container using Apache OpenWebBeans
17 65 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI
18 66 | Active | 80 | 1.0.12 | Apache Felix Converter
19 67 | Active | 80 | 1.2.0 | Apache Geronimo JSR-330 Spec 1.0
20 68 | Active | 80 | 1.1.0 | Apache Geronimo Expression Language Spec 2.2
21 69 | Active | 80 | 1.2.0 | Apache Geronimo Interceptor Spec 1.2
22 70 | Active | 80 | 1.2.0 | Apache Geronimo JCDI Spec 2.0
23 71 | Active | 80 | 1.3.0.3 | Apache ServiceMix :: Specs :: Annotation API 1.3
24 72 | Active | 80 | 4.17.0 | Apache XBean :: ASM shaded (repackaged)
25 73 | Active | 80 | 4.17.0 | Apache XBean OSGI Bundle Utilities
26 74 | Active | 80 | 4.17.0 | Apache XBean :: Finder shaded (repackaged)
27 75 | Active | 80 | 1.0.1.201505202024 | org.osgi:org.osgi.namespace.extender
28 76 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.implementation
29 77 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.service
30 78 | Active | 80 | 1.0.0.201810101357 | org.osgi:org.osgi.service.cdi
31 79 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.function
32 80 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.promise
33 81 | Active | 80 | 4.3.1.SNAPSHOT | Apache Karaf :: OSGi Services :: Event
34134 | Active | 80 | 1.0.0 | Virtual reality server
35135 | Active | 80 | 0.0.1.SNAPSHOT | VRComponent
36136 | Active | 80 | 0.0.1.SNAPSHOT | VRFrame
37142 | Active | 80 | 0.0.1.SNAPSHOT | Virtual reality integrated development environment (VRIDE)
38karaf@root()>
3910:00:42.193 WARN [fileinstall-C:\Program Files\apache-karaf-4.3.0/deploy] Error while creating extension
40java.lang.NoClassDefFoundError: Lde/e_nexus/vr/tk/VRFrame;
41 at java.lang.Class.getDeclaredFields0(Native Method) ~[?:1.8.0_232]
42 at java.lang.Class.privateGetDeclaredFields(Class.java:2611) ~[?:1.8.0_232]
43 at java.lang.Class.getDeclaredFields(Class.java:1944) ~[?:1.8.0_232]
44 at org.apache.aries.cdi.container.internal.util.Reflection.allFields(Reflection.java:47) ~[!/:1.1.3]
45 at org.apache.aries.cdi.container.internal.annotated.AnnotatedTypeImpl.<init>(AnnotatedTypeImpl.java:42) ~[!/:1.1.3]
46 at org.apache.aries.cdi.container.internal.container.Discovery.lambda$discover$8(Discovery.java:133) ~[!/:1.1.3]
47 at java.util.HashMap$Values.forEach(HashMap.java:981) ~[?:1.8.0_232]
48
This is the Java-Class I tried to load:
1karaf@root()> bundle:list
2START LEVEL 100 , List Threshold: 50
3 ID | State | Lvl | Version | Name
4----+--------+-----+--------------------+---------------------------------------------------------------------------
5 31 | Active | 80 | 4.3.0 | Apache Karaf :: OSGi Services :: Event
6 54 | Active | 80 | 1.3.2 | Apache Aries SPI Fly Dynamic Weaving Bundle
7 55 | Active | 80 | 9.0.0 | org.objectweb.asm
8 56 | Active | 80 | 9.0.0 | org.objectweb.asm.commons
9 57 | Active | 80 | 9.0.0 | org.objectweb.asm.tree
10 58 | Active | 80 | 9.0.0 | org.objectweb.asm.tree.analysis
11 59 | Active | 80 | 9.0.0 | org.objectweb.asm.util
12 60 | Active | 80 | 2.0.17 | OpenWebBeans Core
13 61 | Active | 80 | 2.0.17 | SPI definition
14 62 | Active | 80 | 1.1.3 | Apache Aries CDI - CDI Component Runtime (CCR)
15 63 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI classes for Portable Extensions
16 64 | Active | 80 | 1.1.3 | Apache Aries CDI - Container using Apache OpenWebBeans
17 65 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI
18 66 | Active | 80 | 1.0.12 | Apache Felix Converter
19 67 | Active | 80 | 1.2.0 | Apache Geronimo JSR-330 Spec 1.0
20 68 | Active | 80 | 1.1.0 | Apache Geronimo Expression Language Spec 2.2
21 69 | Active | 80 | 1.2.0 | Apache Geronimo Interceptor Spec 1.2
22 70 | Active | 80 | 1.2.0 | Apache Geronimo JCDI Spec 2.0
23 71 | Active | 80 | 1.3.0.3 | Apache ServiceMix :: Specs :: Annotation API 1.3
24 72 | Active | 80 | 4.17.0 | Apache XBean :: ASM shaded (repackaged)
25 73 | Active | 80 | 4.17.0 | Apache XBean OSGI Bundle Utilities
26 74 | Active | 80 | 4.17.0 | Apache XBean :: Finder shaded (repackaged)
27 75 | Active | 80 | 1.0.1.201505202024 | org.osgi:org.osgi.namespace.extender
28 76 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.implementation
29 77 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.service
30 78 | Active | 80 | 1.0.0.201810101357 | org.osgi:org.osgi.service.cdi
31 79 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.function
32 80 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.promise
33 81 | Active | 80 | 4.3.1.SNAPSHOT | Apache Karaf :: OSGi Services :: Event
34134 | Active | 80 | 1.0.0 | Virtual reality server
35135 | Active | 80 | 0.0.1.SNAPSHOT | VRComponent
36136 | Active | 80 | 0.0.1.SNAPSHOT | VRFrame
37142 | Active | 80 | 0.0.1.SNAPSHOT | Virtual reality integrated development environment (VRIDE)
38karaf@root()>
3910:00:42.193 WARN [fileinstall-C:\Program Files\apache-karaf-4.3.0/deploy] Error while creating extension
40java.lang.NoClassDefFoundError: Lde/e_nexus/vr/tk/VRFrame;
41 at java.lang.Class.getDeclaredFields0(Native Method) ~[?:1.8.0_232]
42 at java.lang.Class.privateGetDeclaredFields(Class.java:2611) ~[?:1.8.0_232]
43 at java.lang.Class.getDeclaredFields(Class.java:1944) ~[?:1.8.0_232]
44 at org.apache.aries.cdi.container.internal.util.Reflection.allFields(Reflection.java:47) ~[!/:1.1.3]
45 at org.apache.aries.cdi.container.internal.annotated.AnnotatedTypeImpl.<init>(AnnotatedTypeImpl.java:42) ~[!/:1.1.3]
46 at org.apache.aries.cdi.container.internal.container.Discovery.lambda$discover$8(Discovery.java:133) ~[!/:1.1.3]
47 at java.util.HashMap$Values.forEach(HashMap.java:981) ~[?:1.8.0_232]
48package de.e_nexus.desktop.vr.ide;
49
50import java.util.logging.Logger;
51
52import javax.annotation.PostConstruct;
53import javax.annotation.PreDestroy;
54import javax.enterprise.context.ApplicationScoped;
55import javax.inject.Inject;
56
57import org.osgi.service.cdi.annotations.Reference;
58import org.osgi.service.cdi.annotations.Service;
59
60import de.e_nexus.vr.server.ClientKeyboardScancode;
61import de.e_nexus.vr.server.VRClientHelmetAndControllerListener;
62import de.e_nexus.vr.server.VRClientKeyboardListener;
63import de.e_nexus.vr.server.VRServer;
64import de.e_nexus.vr.server.listeners.VRClientRequestAppInfo;
65import de.e_nexus.vr.server.listeners.VRClientStatusListener;
66import de.e_nexus.vr.server.listeners.interaction.HelmetAndControllerInfo;
67import de.e_nexus.vr.server.osgi.inter.VRServerService;
68import de.e_nexus.vr.tk.VRFrame;
69
70@ApplicationScoped
71@Service
72public class StartIDE implements VRClientStatusListener, VRClientRequestAppInfo, VRClientHelmetAndControllerListener, VRClientKeyboardListener {
73 /**
74 * The logger for this class.
75 */
76 private static final Logger LOG = Logger.getLogger(StartIDE.class.getCanonicalName());
77
78 private final static Object lock = new Object();
79
80 private VRServer vrServer;
81
82 public void notifyStatus(boolean connected) {
83 if (!connected) {
84 synchronized (lock) {
85 lock.notify();
86 }
87 }
88 }
89
90 @Reference
91 @Inject
92 private VRServerService vrServerService;
93
94 private VRFrame applicationFrame;
95
96 @PostConstruct
97 public void initialize() {
98 LOG.fine("Starting VR IDE");
99 vrServer = vrServerService.getVRServer();
100 applicationFrame = new VRFrame(vrServer, "test");
101
102 LOG.info(getLatin1Title() + " started successfully!");
103 }
104
105 @PreDestroy
106 public void teardown() {
107 applicationFrame.remove();
108 LOG.info("Stoped " + getLatin1Title() + " successfully!");
109 vrServer = null;
110 }
111
112 public VRServer getVrServer() {
113 return vrServer;
114 }
115
116 @Override
117 public void notify(HelmetAndControllerInfo haci) {
118
119 }
120
121 @Override
122 public String getLatin1Title() {
123 return "VR IDE";
124 }
125
126 @Override
127 public void notifyKeyboardEvent(ClientKeyboardScancode[] downs, ClientKeyboardScancode[] ups, long incomingTime) {
128 System.out.println("me");
129 }
130}
131
1karaf@root()> bundle:list
2START LEVEL 100 , List Threshold: 50
3 ID | State | Lvl | Version | Name
4----+--------+-----+--------------------+---------------------------------------------------------------------------
5 31 | Active | 80 | 4.3.0 | Apache Karaf :: OSGi Services :: Event
6 54 | Active | 80 | 1.3.2 | Apache Aries SPI Fly Dynamic Weaving Bundle
7 55 | Active | 80 | 9.0.0 | org.objectweb.asm
8 56 | Active | 80 | 9.0.0 | org.objectweb.asm.commons
9 57 | Active | 80 | 9.0.0 | org.objectweb.asm.tree
10 58 | Active | 80 | 9.0.0 | org.objectweb.asm.tree.analysis
11 59 | Active | 80 | 9.0.0 | org.objectweb.asm.util
12 60 | Active | 80 | 2.0.17 | OpenWebBeans Core
13 61 | Active | 80 | 2.0.17 | SPI definition
14 62 | Active | 80 | 1.1.3 | Apache Aries CDI - CDI Component Runtime (CCR)
15 63 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI classes for Portable Extensions
16 64 | Active | 80 | 1.1.3 | Apache Aries CDI - Container using Apache OpenWebBeans
17 65 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI
18 66 | Active | 80 | 1.0.12 | Apache Felix Converter
19 67 | Active | 80 | 1.2.0 | Apache Geronimo JSR-330 Spec 1.0
20 68 | Active | 80 | 1.1.0 | Apache Geronimo Expression Language Spec 2.2
21 69 | Active | 80 | 1.2.0 | Apache Geronimo Interceptor Spec 1.2
22 70 | Active | 80 | 1.2.0 | Apache Geronimo JCDI Spec 2.0
23 71 | Active | 80 | 1.3.0.3 | Apache ServiceMix :: Specs :: Annotation API 1.3
24 72 | Active | 80 | 4.17.0 | Apache XBean :: ASM shaded (repackaged)
25 73 | Active | 80 | 4.17.0 | Apache XBean OSGI Bundle Utilities
26 74 | Active | 80 | 4.17.0 | Apache XBean :: Finder shaded (repackaged)
27 75 | Active | 80 | 1.0.1.201505202024 | org.osgi:org.osgi.namespace.extender
28 76 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.implementation
29 77 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.service
30 78 | Active | 80 | 1.0.0.201810101357 | org.osgi:org.osgi.service.cdi
31 79 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.function
32 80 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.promise
33 81 | Active | 80 | 4.3.1.SNAPSHOT | Apache Karaf :: OSGi Services :: Event
34134 | Active | 80 | 1.0.0 | Virtual reality server
35135 | Active | 80 | 0.0.1.SNAPSHOT | VRComponent
36136 | Active | 80 | 0.0.1.SNAPSHOT | VRFrame
37142 | Active | 80 | 0.0.1.SNAPSHOT | Virtual reality integrated development environment (VRIDE)
38karaf@root()>
3910:00:42.193 WARN [fileinstall-C:\Program Files\apache-karaf-4.3.0/deploy] Error while creating extension
40java.lang.NoClassDefFoundError: Lde/e_nexus/vr/tk/VRFrame;
41 at java.lang.Class.getDeclaredFields0(Native Method) ~[?:1.8.0_232]
42 at java.lang.Class.privateGetDeclaredFields(Class.java:2611) ~[?:1.8.0_232]
43 at java.lang.Class.getDeclaredFields(Class.java:1944) ~[?:1.8.0_232]
44 at org.apache.aries.cdi.container.internal.util.Reflection.allFields(Reflection.java:47) ~[!/:1.1.3]
45 at org.apache.aries.cdi.container.internal.annotated.AnnotatedTypeImpl.<init>(AnnotatedTypeImpl.java:42) ~[!/:1.1.3]
46 at org.apache.aries.cdi.container.internal.container.Discovery.lambda$discover$8(Discovery.java:133) ~[!/:1.1.3]
47 at java.util.HashMap$Values.forEach(HashMap.java:981) ~[?:1.8.0_232]
48package de.e_nexus.desktop.vr.ide;
49
50import java.util.logging.Logger;
51
52import javax.annotation.PostConstruct;
53import javax.annotation.PreDestroy;
54import javax.enterprise.context.ApplicationScoped;
55import javax.inject.Inject;
56
57import org.osgi.service.cdi.annotations.Reference;
58import org.osgi.service.cdi.annotations.Service;
59
60import de.e_nexus.vr.server.ClientKeyboardScancode;
61import de.e_nexus.vr.server.VRClientHelmetAndControllerListener;
62import de.e_nexus.vr.server.VRClientKeyboardListener;
63import de.e_nexus.vr.server.VRServer;
64import de.e_nexus.vr.server.listeners.VRClientRequestAppInfo;
65import de.e_nexus.vr.server.listeners.VRClientStatusListener;
66import de.e_nexus.vr.server.listeners.interaction.HelmetAndControllerInfo;
67import de.e_nexus.vr.server.osgi.inter.VRServerService;
68import de.e_nexus.vr.tk.VRFrame;
69
70@ApplicationScoped
71@Service
72public class StartIDE implements VRClientStatusListener, VRClientRequestAppInfo, VRClientHelmetAndControllerListener, VRClientKeyboardListener {
73 /**
74 * The logger for this class.
75 */
76 private static final Logger LOG = Logger.getLogger(StartIDE.class.getCanonicalName());
77
78 private final static Object lock = new Object();
79
80 private VRServer vrServer;
81
82 public void notifyStatus(boolean connected) {
83 if (!connected) {
84 synchronized (lock) {
85 lock.notify();
86 }
87 }
88 }
89
90 @Reference
91 @Inject
92 private VRServerService vrServerService;
93
94 private VRFrame applicationFrame;
95
96 @PostConstruct
97 public void initialize() {
98 LOG.fine("Starting VR IDE");
99 vrServer = vrServerService.getVRServer();
100 applicationFrame = new VRFrame(vrServer, "test");
101
102 LOG.info(getLatin1Title() + " started successfully!");
103 }
104
105 @PreDestroy
106 public void teardown() {
107 applicationFrame.remove();
108 LOG.info("Stoped " + getLatin1Title() + " successfully!");
109 vrServer = null;
110 }
111
112 public VRServer getVrServer() {
113 return vrServer;
114 }
115
116 @Override
117 public void notify(HelmetAndControllerInfo haci) {
118
119 }
120
121 @Override
122 public String getLatin1Title() {
123 return "VR IDE";
124 }
125
126 @Override
127 public void notifyKeyboardEvent(ClientKeyboardScancode[] downs, ClientKeyboardScancode[] ups, long incomingTime) {
128 System.out.println("me");
129 }
130}
131java.lang.NoClassDefFoundError: Lde/e_nexus/vr/tk/VRFrame;
132 at java.lang.Class.getDeclaredFields0(Native Method) ~[?:1.8.0_232]
133 at java.lang.Class.privateGetDeclaredFields(Class.java:2611) ~[?:1.8.0_232]
134 at java.lang.Class.getDeclaredFields(Class.java:1944) ~[?:1.8.0_232]
135 at org.apache.aries.cdi.container.internal.util.Reflection.allFields(Reflection.java:47) ~[!/:1.1.3]
136 at org.apache.aries.cdi.container.internal.annotated.AnnotatedTypeImpl.<init>(AnnotatedTypeImpl.java:42) ~[!/:1.1.3]
137 at org.apache.aries.cdi.container.internal.container.Discovery.lambda$discover$8(Discovery.java:133) ~[!/:1.1.3]
138 at java.util.HashMap$Values.forEach(HashMap.java:981) ~[?:1.8.0_232]
139 at org.apache.aries.cdi.container.internal.container.Discovery.discover(Discovery.java:130) ~[!/:1.1.3]
140 at org.apache.aries.cdi.container.internal.container.ContainerState.<init>(ContainerState.java:178) ~[!/:1.1.3]
141 at org.apache.aries.cdi.container.internal.Activator.doCreateExtension(Activator.java:209) [!/:1.1.3]
142 at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:242) [!/:1.1.3]
143 at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:227) [!/:1.1.3]
144 at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:488) [osgi.core-7.0.0.jar:?]
145 at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:420) [osgi.core-7.0.0.jar:?]
146 at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) [osgi.core-7.0.0.jar:?]
147 at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450) [osgi.core-7.0.0.jar:?]
148 at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915) [org.apache.felix.framework-6.0.3.jar:?]
149 at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834) [org.apache.felix.framework-6.0.3.jar:?]
150 at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516) [org.apache.felix.framework-6.0.3.jar:?]
151 at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4817) [org.apache.felix.framework-6.0.3.jar:?]
152 at org.apache.felix.framework.Felix.startBundle(Felix.java:2336) [org.apache.felix.framework-6.0.3.jar:?]
153 at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) [org.apache.felix.framework-6.0.3.jar:?]
154 at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1260) [!/:3.6.8]
155 at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1233) [!/:3.6.8]
156 at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:520) [!/:3.6.8]
157 at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365) [!/:3.6.8]
158 at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316) [!/:3.6.8]
159Caused by: java.lang.ClassNotFoundException: de.e_nexus.vr.tk.VRFrame not found by de.e-nexus.component [87]
160 at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1597) ~[?:?]
161 at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79) ~[?:?]
162 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982) ~[?:?]
163 at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232]
164 at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1375) ~[?:?]
165 at org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1618) ~[?:?]
166 at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1548) ~[?:?]
167 at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79) ~[?:?]
168 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982) ~[?:?]
169 at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232]
170 ... 27 more
171
ANSWER
Answered 2021-Jan-07 at 13:13The main problem in the project is <extensions>true</extensions>
in maven-bundle-plugin. You need to have it in your pom.xml. example code
1karaf@root()> bundle:list
2START LEVEL 100 , List Threshold: 50
3 ID | State | Lvl | Version | Name
4----+--------+-----+--------------------+---------------------------------------------------------------------------
5 31 | Active | 80 | 4.3.0 | Apache Karaf :: OSGi Services :: Event
6 54 | Active | 80 | 1.3.2 | Apache Aries SPI Fly Dynamic Weaving Bundle
7 55 | Active | 80 | 9.0.0 | org.objectweb.asm
8 56 | Active | 80 | 9.0.0 | org.objectweb.asm.commons
9 57 | Active | 80 | 9.0.0 | org.objectweb.asm.tree
10 58 | Active | 80 | 9.0.0 | org.objectweb.asm.tree.analysis
11 59 | Active | 80 | 9.0.0 | org.objectweb.asm.util
12 60 | Active | 80 | 2.0.17 | OpenWebBeans Core
13 61 | Active | 80 | 2.0.17 | SPI definition
14 62 | Active | 80 | 1.1.3 | Apache Aries CDI - CDI Component Runtime (CCR)
15 63 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI classes for Portable Extensions
16 64 | Active | 80 | 1.1.3 | Apache Aries CDI - Container using Apache OpenWebBeans
17 65 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI
18 66 | Active | 80 | 1.0.12 | Apache Felix Converter
19 67 | Active | 80 | 1.2.0 | Apache Geronimo JSR-330 Spec 1.0
20 68 | Active | 80 | 1.1.0 | Apache Geronimo Expression Language Spec 2.2
21 69 | Active | 80 | 1.2.0 | Apache Geronimo Interceptor Spec 1.2
22 70 | Active | 80 | 1.2.0 | Apache Geronimo JCDI Spec 2.0
23 71 | Active | 80 | 1.3.0.3 | Apache ServiceMix :: Specs :: Annotation API 1.3
24 72 | Active | 80 | 4.17.0 | Apache XBean :: ASM shaded (repackaged)
25 73 | Active | 80 | 4.17.0 | Apache XBean OSGI Bundle Utilities
26 74 | Active | 80 | 4.17.0 | Apache XBean :: Finder shaded (repackaged)
27 75 | Active | 80 | 1.0.1.201505202024 | org.osgi:org.osgi.namespace.extender
28 76 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.implementation
29 77 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.service
30 78 | Active | 80 | 1.0.0.201810101357 | org.osgi:org.osgi.service.cdi
31 79 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.function
32 80 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.promise
33 81 | Active | 80 | 4.3.1.SNAPSHOT | Apache Karaf :: OSGi Services :: Event
34134 | Active | 80 | 1.0.0 | Virtual reality server
35135 | Active | 80 | 0.0.1.SNAPSHOT | VRComponent
36136 | Active | 80 | 0.0.1.SNAPSHOT | VRFrame
37142 | Active | 80 | 0.0.1.SNAPSHOT | Virtual reality integrated development environment (VRIDE)
38karaf@root()>
3910:00:42.193 WARN [fileinstall-C:\Program Files\apache-karaf-4.3.0/deploy] Error while creating extension
40java.lang.NoClassDefFoundError: Lde/e_nexus/vr/tk/VRFrame;
41 at java.lang.Class.getDeclaredFields0(Native Method) ~[?:1.8.0_232]
42 at java.lang.Class.privateGetDeclaredFields(Class.java:2611) ~[?:1.8.0_232]
43 at java.lang.Class.getDeclaredFields(Class.java:1944) ~[?:1.8.0_232]
44 at org.apache.aries.cdi.container.internal.util.Reflection.allFields(Reflection.java:47) ~[!/:1.1.3]
45 at org.apache.aries.cdi.container.internal.annotated.AnnotatedTypeImpl.<init>(AnnotatedTypeImpl.java:42) ~[!/:1.1.3]
46 at org.apache.aries.cdi.container.internal.container.Discovery.lambda$discover$8(Discovery.java:133) ~[!/:1.1.3]
47 at java.util.HashMap$Values.forEach(HashMap.java:981) ~[?:1.8.0_232]
48package de.e_nexus.desktop.vr.ide;
49
50import java.util.logging.Logger;
51
52import javax.annotation.PostConstruct;
53import javax.annotation.PreDestroy;
54import javax.enterprise.context.ApplicationScoped;
55import javax.inject.Inject;
56
57import org.osgi.service.cdi.annotations.Reference;
58import org.osgi.service.cdi.annotations.Service;
59
60import de.e_nexus.vr.server.ClientKeyboardScancode;
61import de.e_nexus.vr.server.VRClientHelmetAndControllerListener;
62import de.e_nexus.vr.server.VRClientKeyboardListener;
63import de.e_nexus.vr.server.VRServer;
64import de.e_nexus.vr.server.listeners.VRClientRequestAppInfo;
65import de.e_nexus.vr.server.listeners.VRClientStatusListener;
66import de.e_nexus.vr.server.listeners.interaction.HelmetAndControllerInfo;
67import de.e_nexus.vr.server.osgi.inter.VRServerService;
68import de.e_nexus.vr.tk.VRFrame;
69
70@ApplicationScoped
71@Service
72public class StartIDE implements VRClientStatusListener, VRClientRequestAppInfo, VRClientHelmetAndControllerListener, VRClientKeyboardListener {
73 /**
74 * The logger for this class.
75 */
76 private static final Logger LOG = Logger.getLogger(StartIDE.class.getCanonicalName());
77
78 private final static Object lock = new Object();
79
80 private VRServer vrServer;
81
82 public void notifyStatus(boolean connected) {
83 if (!connected) {
84 synchronized (lock) {
85 lock.notify();
86 }
87 }
88 }
89
90 @Reference
91 @Inject
92 private VRServerService vrServerService;
93
94 private VRFrame applicationFrame;
95
96 @PostConstruct
97 public void initialize() {
98 LOG.fine("Starting VR IDE");
99 vrServer = vrServerService.getVRServer();
100 applicationFrame = new VRFrame(vrServer, "test");
101
102 LOG.info(getLatin1Title() + " started successfully!");
103 }
104
105 @PreDestroy
106 public void teardown() {
107 applicationFrame.remove();
108 LOG.info("Stoped " + getLatin1Title() + " successfully!");
109 vrServer = null;
110 }
111
112 public VRServer getVrServer() {
113 return vrServer;
114 }
115
116 @Override
117 public void notify(HelmetAndControllerInfo haci) {
118
119 }
120
121 @Override
122 public String getLatin1Title() {
123 return "VR IDE";
124 }
125
126 @Override
127 public void notifyKeyboardEvent(ClientKeyboardScancode[] downs, ClientKeyboardScancode[] ups, long incomingTime) {
128 System.out.println("me");
129 }
130}
131java.lang.NoClassDefFoundError: Lde/e_nexus/vr/tk/VRFrame;
132 at java.lang.Class.getDeclaredFields0(Native Method) ~[?:1.8.0_232]
133 at java.lang.Class.privateGetDeclaredFields(Class.java:2611) ~[?:1.8.0_232]
134 at java.lang.Class.getDeclaredFields(Class.java:1944) ~[?:1.8.0_232]
135 at org.apache.aries.cdi.container.internal.util.Reflection.allFields(Reflection.java:47) ~[!/:1.1.3]
136 at org.apache.aries.cdi.container.internal.annotated.AnnotatedTypeImpl.<init>(AnnotatedTypeImpl.java:42) ~[!/:1.1.3]
137 at org.apache.aries.cdi.container.internal.container.Discovery.lambda$discover$8(Discovery.java:133) ~[!/:1.1.3]
138 at java.util.HashMap$Values.forEach(HashMap.java:981) ~[?:1.8.0_232]
139 at org.apache.aries.cdi.container.internal.container.Discovery.discover(Discovery.java:130) ~[!/:1.1.3]
140 at org.apache.aries.cdi.container.internal.container.ContainerState.<init>(ContainerState.java:178) ~[!/:1.1.3]
141 at org.apache.aries.cdi.container.internal.Activator.doCreateExtension(Activator.java:209) [!/:1.1.3]
142 at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:242) [!/:1.1.3]
143 at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:227) [!/:1.1.3]
144 at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:488) [osgi.core-7.0.0.jar:?]
145 at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:420) [osgi.core-7.0.0.jar:?]
146 at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) [osgi.core-7.0.0.jar:?]
147 at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450) [osgi.core-7.0.0.jar:?]
148 at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915) [org.apache.felix.framework-6.0.3.jar:?]
149 at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834) [org.apache.felix.framework-6.0.3.jar:?]
150 at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516) [org.apache.felix.framework-6.0.3.jar:?]
151 at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4817) [org.apache.felix.framework-6.0.3.jar:?]
152 at org.apache.felix.framework.Felix.startBundle(Felix.java:2336) [org.apache.felix.framework-6.0.3.jar:?]
153 at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) [org.apache.felix.framework-6.0.3.jar:?]
154 at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1260) [!/:3.6.8]
155 at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1233) [!/:3.6.8]
156 at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:520) [!/:3.6.8]
157 at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365) [!/:3.6.8]
158 at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316) [!/:3.6.8]
159Caused by: java.lang.ClassNotFoundException: de.e_nexus.vr.tk.VRFrame not found by de.e-nexus.component [87]
160 at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1597) ~[?:?]
161 at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79) ~[?:?]
162 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982) ~[?:?]
163 at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232]
164 at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1375) ~[?:?]
165 at org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1618) ~[?:?]
166 at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1548) ~[?:?]
167 at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79) ~[?:?]
168 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982) ~[?:?]
169 at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232]
170 ... 27 more
171<plugin>
172 <groupId>org.apache.felix</groupId>
173 <artifactId>maven-bundle-plugin</artifactId>
174 <version>5.1.1</version>
175 <extensions>true</extensions>
176 <configuration>
177 <instructions>
178 <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
179 <Bundle-Version>${project.version}</Bundle-Version>
180 <Bundle-Activator>${Bundle-Activator}</Bundle-Activator>
181 <Export-Package>
182 de.*;version=${project.version}
183 </Export-Package>
184 <Import-Package>
185 *
186 </Import-Package>
187 </instructions>
188 </configuration>
189</plugin>
190
And packaging should be bundle like <packaging>bundle</packaging>
for the OSGI bundles. You can see how package created from this command
1karaf@root()> bundle:list
2START LEVEL 100 , List Threshold: 50
3 ID | State | Lvl | Version | Name
4----+--------+-----+--------------------+---------------------------------------------------------------------------
5 31 | Active | 80 | 4.3.0 | Apache Karaf :: OSGi Services :: Event
6 54 | Active | 80 | 1.3.2 | Apache Aries SPI Fly Dynamic Weaving Bundle
7 55 | Active | 80 | 9.0.0 | org.objectweb.asm
8 56 | Active | 80 | 9.0.0 | org.objectweb.asm.commons
9 57 | Active | 80 | 9.0.0 | org.objectweb.asm.tree
10 58 | Active | 80 | 9.0.0 | org.objectweb.asm.tree.analysis
11 59 | Active | 80 | 9.0.0 | org.objectweb.asm.util
12 60 | Active | 80 | 2.0.17 | OpenWebBeans Core
13 61 | Active | 80 | 2.0.17 | SPI definition
14 62 | Active | 80 | 1.1.3 | Apache Aries CDI - CDI Component Runtime (CCR)
15 63 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI classes for Portable Extensions
16 64 | Active | 80 | 1.1.3 | Apache Aries CDI - Container using Apache OpenWebBeans
17 65 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI
18 66 | Active | 80 | 1.0.12 | Apache Felix Converter
19 67 | Active | 80 | 1.2.0 | Apache Geronimo JSR-330 Spec 1.0
20 68 | Active | 80 | 1.1.0 | Apache Geronimo Expression Language Spec 2.2
21 69 | Active | 80 | 1.2.0 | Apache Geronimo Interceptor Spec 1.2
22 70 | Active | 80 | 1.2.0 | Apache Geronimo JCDI Spec 2.0
23 71 | Active | 80 | 1.3.0.3 | Apache ServiceMix :: Specs :: Annotation API 1.3
24 72 | Active | 80 | 4.17.0 | Apache XBean :: ASM shaded (repackaged)
25 73 | Active | 80 | 4.17.0 | Apache XBean OSGI Bundle Utilities
26 74 | Active | 80 | 4.17.0 | Apache XBean :: Finder shaded (repackaged)
27 75 | Active | 80 | 1.0.1.201505202024 | org.osgi:org.osgi.namespace.extender
28 76 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.implementation
29 77 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.service
30 78 | Active | 80 | 1.0.0.201810101357 | org.osgi:org.osgi.service.cdi
31 79 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.function
32 80 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.promise
33 81 | Active | 80 | 4.3.1.SNAPSHOT | Apache Karaf :: OSGi Services :: Event
34134 | Active | 80 | 1.0.0 | Virtual reality server
35135 | Active | 80 | 0.0.1.SNAPSHOT | VRComponent
36136 | Active | 80 | 0.0.1.SNAPSHOT | VRFrame
37142 | Active | 80 | 0.0.1.SNAPSHOT | Virtual reality integrated development environment (VRIDE)
38karaf@root()>
3910:00:42.193 WARN [fileinstall-C:\Program Files\apache-karaf-4.3.0/deploy] Error while creating extension
40java.lang.NoClassDefFoundError: Lde/e_nexus/vr/tk/VRFrame;
41 at java.lang.Class.getDeclaredFields0(Native Method) ~[?:1.8.0_232]
42 at java.lang.Class.privateGetDeclaredFields(Class.java:2611) ~[?:1.8.0_232]
43 at java.lang.Class.getDeclaredFields(Class.java:1944) ~[?:1.8.0_232]
44 at org.apache.aries.cdi.container.internal.util.Reflection.allFields(Reflection.java:47) ~[!/:1.1.3]
45 at org.apache.aries.cdi.container.internal.annotated.AnnotatedTypeImpl.<init>(AnnotatedTypeImpl.java:42) ~[!/:1.1.3]
46 at org.apache.aries.cdi.container.internal.container.Discovery.lambda$discover$8(Discovery.java:133) ~[!/:1.1.3]
47 at java.util.HashMap$Values.forEach(HashMap.java:981) ~[?:1.8.0_232]
48package de.e_nexus.desktop.vr.ide;
49
50import java.util.logging.Logger;
51
52import javax.annotation.PostConstruct;
53import javax.annotation.PreDestroy;
54import javax.enterprise.context.ApplicationScoped;
55import javax.inject.Inject;
56
57import org.osgi.service.cdi.annotations.Reference;
58import org.osgi.service.cdi.annotations.Service;
59
60import de.e_nexus.vr.server.ClientKeyboardScancode;
61import de.e_nexus.vr.server.VRClientHelmetAndControllerListener;
62import de.e_nexus.vr.server.VRClientKeyboardListener;
63import de.e_nexus.vr.server.VRServer;
64import de.e_nexus.vr.server.listeners.VRClientRequestAppInfo;
65import de.e_nexus.vr.server.listeners.VRClientStatusListener;
66import de.e_nexus.vr.server.listeners.interaction.HelmetAndControllerInfo;
67import de.e_nexus.vr.server.osgi.inter.VRServerService;
68import de.e_nexus.vr.tk.VRFrame;
69
70@ApplicationScoped
71@Service
72public class StartIDE implements VRClientStatusListener, VRClientRequestAppInfo, VRClientHelmetAndControllerListener, VRClientKeyboardListener {
73 /**
74 * The logger for this class.
75 */
76 private static final Logger LOG = Logger.getLogger(StartIDE.class.getCanonicalName());
77
78 private final static Object lock = new Object();
79
80 private VRServer vrServer;
81
82 public void notifyStatus(boolean connected) {
83 if (!connected) {
84 synchronized (lock) {
85 lock.notify();
86 }
87 }
88 }
89
90 @Reference
91 @Inject
92 private VRServerService vrServerService;
93
94 private VRFrame applicationFrame;
95
96 @PostConstruct
97 public void initialize() {
98 LOG.fine("Starting VR IDE");
99 vrServer = vrServerService.getVRServer();
100 applicationFrame = new VRFrame(vrServer, "test");
101
102 LOG.info(getLatin1Title() + " started successfully!");
103 }
104
105 @PreDestroy
106 public void teardown() {
107 applicationFrame.remove();
108 LOG.info("Stoped " + getLatin1Title() + " successfully!");
109 vrServer = null;
110 }
111
112 public VRServer getVrServer() {
113 return vrServer;
114 }
115
116 @Override
117 public void notify(HelmetAndControllerInfo haci) {
118
119 }
120
121 @Override
122 public String getLatin1Title() {
123 return "VR IDE";
124 }
125
126 @Override
127 public void notifyKeyboardEvent(ClientKeyboardScancode[] downs, ClientKeyboardScancode[] ups, long incomingTime) {
128 System.out.println("me");
129 }
130}
131java.lang.NoClassDefFoundError: Lde/e_nexus/vr/tk/VRFrame;
132 at java.lang.Class.getDeclaredFields0(Native Method) ~[?:1.8.0_232]
133 at java.lang.Class.privateGetDeclaredFields(Class.java:2611) ~[?:1.8.0_232]
134 at java.lang.Class.getDeclaredFields(Class.java:1944) ~[?:1.8.0_232]
135 at org.apache.aries.cdi.container.internal.util.Reflection.allFields(Reflection.java:47) ~[!/:1.1.3]
136 at org.apache.aries.cdi.container.internal.annotated.AnnotatedTypeImpl.<init>(AnnotatedTypeImpl.java:42) ~[!/:1.1.3]
137 at org.apache.aries.cdi.container.internal.container.Discovery.lambda$discover$8(Discovery.java:133) ~[!/:1.1.3]
138 at java.util.HashMap$Values.forEach(HashMap.java:981) ~[?:1.8.0_232]
139 at org.apache.aries.cdi.container.internal.container.Discovery.discover(Discovery.java:130) ~[!/:1.1.3]
140 at org.apache.aries.cdi.container.internal.container.ContainerState.<init>(ContainerState.java:178) ~[!/:1.1.3]
141 at org.apache.aries.cdi.container.internal.Activator.doCreateExtension(Activator.java:209) [!/:1.1.3]
142 at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:242) [!/:1.1.3]
143 at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:227) [!/:1.1.3]
144 at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:488) [osgi.core-7.0.0.jar:?]
145 at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:420) [osgi.core-7.0.0.jar:?]
146 at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) [osgi.core-7.0.0.jar:?]
147 at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450) [osgi.core-7.0.0.jar:?]
148 at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915) [org.apache.felix.framework-6.0.3.jar:?]
149 at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834) [org.apache.felix.framework-6.0.3.jar:?]
150 at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516) [org.apache.felix.framework-6.0.3.jar:?]
151 at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4817) [org.apache.felix.framework-6.0.3.jar:?]
152 at org.apache.felix.framework.Felix.startBundle(Felix.java:2336) [org.apache.felix.framework-6.0.3.jar:?]
153 at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) [org.apache.felix.framework-6.0.3.jar:?]
154 at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1260) [!/:3.6.8]
155 at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1233) [!/:3.6.8]
156 at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:520) [!/:3.6.8]
157 at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365) [!/:3.6.8]
158 at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316) [!/:3.6.8]
159Caused by: java.lang.ClassNotFoundException: de.e_nexus.vr.tk.VRFrame not found by de.e-nexus.component [87]
160 at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1597) ~[?:?]
161 at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79) ~[?:?]
162 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982) ~[?:?]
163 at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232]
164 at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1375) ~[?:?]
165 at org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1618) ~[?:?]
166 at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1548) ~[?:?]
167 at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79) ~[?:?]
168 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982) ~[?:?]
169 at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232]
170 ... 27 more
171<plugin>
172 <groupId>org.apache.felix</groupId>
173 <artifactId>maven-bundle-plugin</artifactId>
174 <version>5.1.1</version>
175 <extensions>true</extensions>
176 <configuration>
177 <instructions>
178 <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
179 <Bundle-Version>${project.version}</Bundle-Version>
180 <Bundle-Activator>${Bundle-Activator}</Bundle-Activator>
181 <Export-Package>
182 de.*;version=${project.version}
183 </Export-Package>
184 <Import-Package>
185 *
186 </Import-Package>
187 </instructions>
188 </configuration>
189</plugin>
190mvn archetype:generate \
191 -DarchetypeGroupId=org.apache.karaf.archetypes \
192 -DarchetypeArtifactId=karaf-bundle-archetype \
193 -DarchetypeVersion=4.3.0 \
194 -DgroupId=io.github.ozkanpakdil \
195 -DartifactId=myfirstbundle \
196 -Dversion=1.0-SNAPSHOT \
197 -Dpackage=io.github.ozkanpakdil
198
https://karaf.apache.org/manual/latest/#_creating_bundles is explaining nicely. Other then that I highly suggest have namespaces without underscore. Instead of "e_nexus" have enexus and for <groupId>de.e-nexus</groupId>
have <groupId>de.enexus</groupId>
. Last but not least instead of <artifactId>vr.server</artifactId>
have <artifactId>vrserver</artifactId>
, I am suggesting these because OSGI is already complicated enviroenment, having simple and easy names will make easier to catch errors and maintain the code. Also it will prevent problems in case you move to another OS, you never know how these behaves between OSes.
There were some warnings related to same namespace is in different jars, I changed the code in "frame" and "component" modules accordingly. Below is the log from local, I can see that VR-Client log, I think it started working as expected.
1karaf@root()> bundle:list
2START LEVEL 100 , List Threshold: 50
3 ID | State | Lvl | Version | Name
4----+--------+-----+--------------------+---------------------------------------------------------------------------
5 31 | Active | 80 | 4.3.0 | Apache Karaf :: OSGi Services :: Event
6 54 | Active | 80 | 1.3.2 | Apache Aries SPI Fly Dynamic Weaving Bundle
7 55 | Active | 80 | 9.0.0 | org.objectweb.asm
8 56 | Active | 80 | 9.0.0 | org.objectweb.asm.commons
9 57 | Active | 80 | 9.0.0 | org.objectweb.asm.tree
10 58 | Active | 80 | 9.0.0 | org.objectweb.asm.tree.analysis
11 59 | Active | 80 | 9.0.0 | org.objectweb.asm.util
12 60 | Active | 80 | 2.0.17 | OpenWebBeans Core
13 61 | Active | 80 | 2.0.17 | SPI definition
14 62 | Active | 80 | 1.1.3 | Apache Aries CDI - CDI Component Runtime (CCR)
15 63 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI classes for Portable Extensions
16 64 | Active | 80 | 1.1.3 | Apache Aries CDI - Container using Apache OpenWebBeans
17 65 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI
18 66 | Active | 80 | 1.0.12 | Apache Felix Converter
19 67 | Active | 80 | 1.2.0 | Apache Geronimo JSR-330 Spec 1.0
20 68 | Active | 80 | 1.1.0 | Apache Geronimo Expression Language Spec 2.2
21 69 | Active | 80 | 1.2.0 | Apache Geronimo Interceptor Spec 1.2
22 70 | Active | 80 | 1.2.0 | Apache Geronimo JCDI Spec 2.0
23 71 | Active | 80 | 1.3.0.3 | Apache ServiceMix :: Specs :: Annotation API 1.3
24 72 | Active | 80 | 4.17.0 | Apache XBean :: ASM shaded (repackaged)
25 73 | Active | 80 | 4.17.0 | Apache XBean OSGI Bundle Utilities
26 74 | Active | 80 | 4.17.0 | Apache XBean :: Finder shaded (repackaged)
27 75 | Active | 80 | 1.0.1.201505202024 | org.osgi:org.osgi.namespace.extender
28 76 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.implementation
29 77 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.service
30 78 | Active | 80 | 1.0.0.201810101357 | org.osgi:org.osgi.service.cdi
31 79 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.function
32 80 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.promise
33 81 | Active | 80 | 4.3.1.SNAPSHOT | Apache Karaf :: OSGi Services :: Event
34134 | Active | 80 | 1.0.0 | Virtual reality server
35135 | Active | 80 | 0.0.1.SNAPSHOT | VRComponent
36136 | Active | 80 | 0.0.1.SNAPSHOT | VRFrame
37142 | Active | 80 | 0.0.1.SNAPSHOT | Virtual reality integrated development environment (VRIDE)
38karaf@root()>
3910:00:42.193 WARN [fileinstall-C:\Program Files\apache-karaf-4.3.0/deploy] Error while creating extension
40java.lang.NoClassDefFoundError: Lde/e_nexus/vr/tk/VRFrame;
41 at java.lang.Class.getDeclaredFields0(Native Method) ~[?:1.8.0_232]
42 at java.lang.Class.privateGetDeclaredFields(Class.java:2611) ~[?:1.8.0_232]
43 at java.lang.Class.getDeclaredFields(Class.java:1944) ~[?:1.8.0_232]
44 at org.apache.aries.cdi.container.internal.util.Reflection.allFields(Reflection.java:47) ~[!/:1.1.3]
45 at org.apache.aries.cdi.container.internal.annotated.AnnotatedTypeImpl.<init>(AnnotatedTypeImpl.java:42) ~[!/:1.1.3]
46 at org.apache.aries.cdi.container.internal.container.Discovery.lambda$discover$8(Discovery.java:133) ~[!/:1.1.3]
47 at java.util.HashMap$Values.forEach(HashMap.java:981) ~[?:1.8.0_232]
48package de.e_nexus.desktop.vr.ide;
49
50import java.util.logging.Logger;
51
52import javax.annotation.PostConstruct;
53import javax.annotation.PreDestroy;
54import javax.enterprise.context.ApplicationScoped;
55import javax.inject.Inject;
56
57import org.osgi.service.cdi.annotations.Reference;
58import org.osgi.service.cdi.annotations.Service;
59
60import de.e_nexus.vr.server.ClientKeyboardScancode;
61import de.e_nexus.vr.server.VRClientHelmetAndControllerListener;
62import de.e_nexus.vr.server.VRClientKeyboardListener;
63import de.e_nexus.vr.server.VRServer;
64import de.e_nexus.vr.server.listeners.VRClientRequestAppInfo;
65import de.e_nexus.vr.server.listeners.VRClientStatusListener;
66import de.e_nexus.vr.server.listeners.interaction.HelmetAndControllerInfo;
67import de.e_nexus.vr.server.osgi.inter.VRServerService;
68import de.e_nexus.vr.tk.VRFrame;
69
70@ApplicationScoped
71@Service
72public class StartIDE implements VRClientStatusListener, VRClientRequestAppInfo, VRClientHelmetAndControllerListener, VRClientKeyboardListener {
73 /**
74 * The logger for this class.
75 */
76 private static final Logger LOG = Logger.getLogger(StartIDE.class.getCanonicalName());
77
78 private final static Object lock = new Object();
79
80 private VRServer vrServer;
81
82 public void notifyStatus(boolean connected) {
83 if (!connected) {
84 synchronized (lock) {
85 lock.notify();
86 }
87 }
88 }
89
90 @Reference
91 @Inject
92 private VRServerService vrServerService;
93
94 private VRFrame applicationFrame;
95
96 @PostConstruct
97 public void initialize() {
98 LOG.fine("Starting VR IDE");
99 vrServer = vrServerService.getVRServer();
100 applicationFrame = new VRFrame(vrServer, "test");
101
102 LOG.info(getLatin1Title() + " started successfully!");
103 }
104
105 @PreDestroy
106 public void teardown() {
107 applicationFrame.remove();
108 LOG.info("Stoped " + getLatin1Title() + " successfully!");
109 vrServer = null;
110 }
111
112 public VRServer getVrServer() {
113 return vrServer;
114 }
115
116 @Override
117 public void notify(HelmetAndControllerInfo haci) {
118
119 }
120
121 @Override
122 public String getLatin1Title() {
123 return "VR IDE";
124 }
125
126 @Override
127 public void notifyKeyboardEvent(ClientKeyboardScancode[] downs, ClientKeyboardScancode[] ups, long incomingTime) {
128 System.out.println("me");
129 }
130}
131java.lang.NoClassDefFoundError: Lde/e_nexus/vr/tk/VRFrame;
132 at java.lang.Class.getDeclaredFields0(Native Method) ~[?:1.8.0_232]
133 at java.lang.Class.privateGetDeclaredFields(Class.java:2611) ~[?:1.8.0_232]
134 at java.lang.Class.getDeclaredFields(Class.java:1944) ~[?:1.8.0_232]
135 at org.apache.aries.cdi.container.internal.util.Reflection.allFields(Reflection.java:47) ~[!/:1.1.3]
136 at org.apache.aries.cdi.container.internal.annotated.AnnotatedTypeImpl.<init>(AnnotatedTypeImpl.java:42) ~[!/:1.1.3]
137 at org.apache.aries.cdi.container.internal.container.Discovery.lambda$discover$8(Discovery.java:133) ~[!/:1.1.3]
138 at java.util.HashMap$Values.forEach(HashMap.java:981) ~[?:1.8.0_232]
139 at org.apache.aries.cdi.container.internal.container.Discovery.discover(Discovery.java:130) ~[!/:1.1.3]
140 at org.apache.aries.cdi.container.internal.container.ContainerState.<init>(ContainerState.java:178) ~[!/:1.1.3]
141 at org.apache.aries.cdi.container.internal.Activator.doCreateExtension(Activator.java:209) [!/:1.1.3]
142 at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:242) [!/:1.1.3]
143 at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:227) [!/:1.1.3]
144 at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:488) [osgi.core-7.0.0.jar:?]
145 at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:420) [osgi.core-7.0.0.jar:?]
146 at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) [osgi.core-7.0.0.jar:?]
147 at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450) [osgi.core-7.0.0.jar:?]
148 at org.apache.felix.framework.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:915) [org.apache.felix.framework-6.0.3.jar:?]
149 at org.apache.felix.framework.EventDispatcher.fireEventImmediately(EventDispatcher.java:834) [org.apache.felix.framework-6.0.3.jar:?]
150 at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:516) [org.apache.felix.framework-6.0.3.jar:?]
151 at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4817) [org.apache.felix.framework-6.0.3.jar:?]
152 at org.apache.felix.framework.Felix.startBundle(Felix.java:2336) [org.apache.felix.framework-6.0.3.jar:?]
153 at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998) [org.apache.felix.framework-6.0.3.jar:?]
154 at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1260) [!/:3.6.8]
155 at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1233) [!/:3.6.8]
156 at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:520) [!/:3.6.8]
157 at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365) [!/:3.6.8]
158 at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316) [!/:3.6.8]
159Caused by: java.lang.ClassNotFoundException: de.e_nexus.vr.tk.VRFrame not found by de.e-nexus.component [87]
160 at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1597) ~[?:?]
161 at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79) ~[?:?]
162 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982) ~[?:?]
163 at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232]
164 at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1375) ~[?:?]
165 at org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1618) ~[?:?]
166 at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1548) ~[?:?]
167 at org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79) ~[?:?]
168 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1982) ~[?:?]
169 at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_232]
170 ... 27 more
171<plugin>
172 <groupId>org.apache.felix</groupId>
173 <artifactId>maven-bundle-plugin</artifactId>
174 <version>5.1.1</version>
175 <extensions>true</extensions>
176 <configuration>
177 <instructions>
178 <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
179 <Bundle-Version>${project.version}</Bundle-Version>
180 <Bundle-Activator>${Bundle-Activator}</Bundle-Activator>
181 <Export-Package>
182 de.*;version=${project.version}
183 </Export-Package>
184 <Import-Package>
185 *
186 </Import-Package>
187 </instructions>
188 </configuration>
189</plugin>
190mvn archetype:generate \
191 -DarchetypeGroupId=org.apache.karaf.archetypes \
192 -DarchetypeArtifactId=karaf-bundle-archetype \
193 -DarchetypeVersion=4.3.0 \
194 -DgroupId=io.github.ozkanpakdil \
195 -DartifactId=myfirstbundle \
196 -Dversion=1.0-SNAPSHOT \
197 -Dpackage=io.github.ozkanpakdil
198ozkan@DESKTOP-NF90OD6 MINGW64 /c/Program Files/apache-karaf-4.3.0/bin
199$ ./karaf
200 __ __ ____
201 / //_/____ __________ _/ __/
202 / ,< / __ `/ ___/ __ `/ /_
203 / /| |/ /_/ / / / /_/ / __/
204 /_/ |_|\__,_/_/ \__,_/_/
205
206 Apache Karaf (4.3.0)
207
208Hit '<tab>' for a list of available commands
209and '[cmd] --help' for help on a specific command.
210Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown Karaf.
211
212Start Osgi spiced VR Server ... [OK] @10:23 (You might get asked by the firewall if you like to allow java to communicate to other systems. In order to connect the local VR-Client you are requested to grant the communication.)
213karaf@root()> bundle:list
214START LEVEL 100 , List Threshold: 50
215ID | State | Lvl | Version | Name
216---+----------+-----+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------
21731 | Active | 80 | 4.3.0 | Apache Karaf :: OSGi Services :: Event
21855 | Active | 80 | 1.0.0 | Virtual reality server
21956 | Active | 80 | 0.0.1.SNAPSHOT | VRComponent
22057 | Active | 80 | 0.0.1.SNAPSHOT | VRFrame
22158 | Active | 80 | 1.3.2 | Apache Aries SPI Fly Dynamic Weaving Bundle
22259 | Active | 80 | 9.0.0 | org.objectweb.asm
22360 | Active | 80 | 9.0.0 | org.objectweb.asm.commons
22461 | Active | 80 | 9.0.0 | org.objectweb.asm.tree
22562 | Active | 80 | 9.0.0 | org.objectweb.asm.tree.analysis
22663 | Active | 80 | 9.0.0 | org.objectweb.asm.util
22764 | Active | 80 | 2.0.17 | OpenWebBeans Core
22865 | Active | 80 | 2.0.17 | SPI definition
22966 | Active | 80 | 1.1.3 | Apache Aries CDI - CDI Component Runtime (CCR)
23067 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI classes for Portable Extensions
23168 | Active | 80 | 1.1.3 | Apache Aries CDI - Container using Apache OpenWebBeans
23269 | Active | 80 | 1.1.3 | Apache Aries CDI - SPI
23370 | Active | 80 | 1.0.12 | Apache Felix Converter
23471 | Active | 80 | 1.2.0 | Apache Geronimo JSR-330 Spec 1.0
23572 | Active | 80 | 1.1.0 | Apache Geronimo Expression Language Spec 2.2
23673 | Active | 80 | 1.2.0 | Apache Geronimo Interceptor Spec 1.2
23774 | Active | 80 | 1.2.0 | Apache Geronimo JCDI Spec 2.0
23875 | Active | 80 | 1.3.0.3 | Apache ServiceMix :: Specs :: Annotation API 1.3
23976 | Active | 80 | 4.17.0 | Apache XBean :: ASM shaded (repackaged)
24077 | Active | 80 | 4.17.0 | Apache XBean OSGI Bundle Utilities
24178 | Active | 80 | 4.17.0 | Apache XBean :: Finder shaded (repackaged)
24279 | Active | 80 | 1.0.1.201505202024 | org.osgi:org.osgi.namespace.extender
24380 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.implementation
24481 | Active | 80 | 1.0.0.201505202024 | org.osgi:org.osgi.namespace.service
24582 | Active | 80 | 1.0.0.201810101357 | org.osgi:org.osgi.service.cdi
24683 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.function
24784 | Active | 80 | 1.1.0.201802012106 | org.osgi:org.osgi.util.promise
24885 | Resolved | 80 | 4.3.1.SNAPSHOT | Apache Karaf :: OSGi Services :: Event
24986 | Active | 80 | 0.0.1.SNAPSHOT | Virtual reality integrated development environment (VRIDE)
250karaf@root()> log:display
25110:23:10.508 INFO [activator-1-thread-2] Registering commands for bundle org.apache.karaf.log.core/4.3.0
25210:23:10.821 INFO [activator-1-thread-2] Deployment finished. Registering FeatureDeploymentListener
25310:23:10.821 INFO [activator-1-thread-2] Registering commands for bundle org.apache.karaf.features.command/4.3.0
25410:23:10.828 INFO [activator-1-thread-3] Registering commands for bundle org.apache.karaf.kar.core/4.3.0
25510:23:10.855 INFO [FelixStartLevel] Command registration delayed for bundle org.apache.karaf.shell.ssh/4.3.0. Missing service: [org.apache.sshd.server.SshServer]
25610:23:10.871 INFO [FelixStartLevel] Registering commands for bundle org.apache.karaf.system.core/4.3.0
25710:23:10.893 INFO [FelixStartLevel] Registering commands for bundle org.apache.karaf.event/4.3.0
25810:23:11.089 INFO [activator-1-thread-1] Registering commands for bundle org.apache.karaf.shell.ssh/4.3.0
25910:23:11.128 INFO [activator-1-thread-1] No detected/configured IoServiceFactoryFactory using Nio2ServiceFactoryFactory
26010:23:12.346 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.PackageStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@a766065 with name osgi.core:type=packageState,version=1.5,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
26110:23:12.346 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.wiring.BundleWiringStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@a766065 with name osgi.core:type=wiringState,version=1.1,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
26210:23:12.346 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.BundleStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@a766065 with name osgi.core:type=bundleState,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
26310:23:12.351 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.ServiceStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@a766065 with name osgi.core:type=serviceState,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
26410:23:12.352 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.FrameworkMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@a766065 with name osgi.core:type=framework,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
26510:23:12.353 INFO [activator-1-thread-1] Registering org.osgi.jmx.service.cm.ConfigurationAdminMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@a766065 with name osgi.compendium:service=cm,version=1.3,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
26610:23:12.388 INFO [activator-1-thread-1] Unregistering org.osgi.jmx.framework.PackageStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@a766065 with name osgi.core:type=packageState,version=1.5,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
26710:23:12.389 INFO [activator-1-thread-1] Unregistering org.osgi.jmx.framework.wiring.BundleWiringStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@a766065 with name osgi.core:type=wiringState,version=1.1,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
26810:23:12.390 INFO [activator-1-thread-1] Unregistering org.osgi.jmx.framework.BundleStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@a766065 with name osgi.core:type=bundleState,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
26910:23:12.390 INFO [activator-1-thread-1] Unregistering org.osgi.jmx.framework.ServiceStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@a766065 with name osgi.core:type=serviceState,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
27010:23:12.391 INFO [activator-1-thread-1] Unregistering org.osgi.jmx.framework.FrameworkMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@a766065 with name osgi.core:type=framework,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
27110:23:12.392 INFO [activator-1-thread-1] Unregistering org.osgi.jmx.service.cm.ConfigurationAdminMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@a766065 with name osgi.compendium:service=cm,version=1.3,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
27210:23:12.394 WARN [activator-1-thread-1] Task rejected for JMX Notification dispatch of event [org.osgi.framework.ServiceEvent[source=[javax.management.MBeanServer]]] - Dispatcher may have been shutdown
27310:23:12.420 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.PackageStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@4a85005 with name osgi.core:type=packageState,version=1.5,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
27410:23:12.421 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.wiring.BundleWiringStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@4a85005 with name osgi.core:type=wiringState,version=1.1,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
27510:23:12.422 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.BundleStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@4a85005 with name osgi.core:type=bundleState,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
27610:23:12.423 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.ServiceStateMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@4a85005 with name osgi.core:type=serviceState,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
27710:23:12.423 INFO [activator-1-thread-1] Registering org.osgi.jmx.framework.FrameworkMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@4a85005 with name osgi.core:type=framework,version=1.7,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
27810:23:12.424 INFO [activator-1-thread-1] Registering org.osgi.jmx.service.cm.ConfigurationAdminMBean to MBeanServer org.apache.karaf.management.internal.EventAdminMBeanServerWrapper@4a85005 with name osgi.compendium:service=cm,version=1.3,framework=org.apache.felix.framework,uuid=1ba06c85-21b1-4145-9726-b08a81b6cad3
279
280
281
QUESTION
Why does the mobile-version navbar pops up automatically when downsizing screen?
Asked 2020-Jul-22 at 19:23I am doing a side project about a movie website. I designed an RWD navbar as following. When I downsize the screen to the break point which is 576px, the mobile-version navbar would pop up automatically then hide. The result can be seen if running the snippet then expand and collapse the window. I guess the checkbox causes this issue but not really sure. Could someone help me with this issue, please? Thank you!
1* {
2 padding: 0;
3 margin: 0;
4 box-sizing: border-box;
5 font-family: 'Nunito', sans-serif;
6}
7
8.wrap {
9 width: 100%;
10}
11
12header {
13 height: 100px;
14 background: #000;
15 padding: 0 10px;
16 color: #fff;
17 display: flex;
18 align-items: center;
19 position: relative;
20}
21
22#checked {
23 visibility: hidden;
24 z-index: -9999;
25 position: absolute;
26}
27
28#checked:checked ~.navbar {
29 right: 0;
30}
31
32.logo {
33 height: 60%;
34 vertical-align: middle;
35}
36
37.navbar{
38 margin-left: auto;
39 font-size: 0;
40 position: fixed;
41 width: 100%;
42 height: 100vh;
43 background: #000;
44 right: -100%;
45 top: 0;
46 display: flex;
47 justify-content: center;
48 align-items: center;
49 flex-direction: column;
50 transition: .5s;
51 z-index: 999;
52}
53
54.navbar a {
55 display: block;
56 margin: 20px 0;
57 transition: .4s;
58}
59
60.navbar a:hover, .hideBtn:hover {
61 color: #3498db;
62}
63
64.navbar a,
65 .hideBtn, .showBtn {
66 font-size: 20px;
67 padding: 0 10px;
68 text-decoration: none;
69 color: #fff;
70}
71
72.showBtn {
73 position: absolute;
74 top: 37px;
75 right: 10px;
76}
77
78.showcase {
79 position: relative;
80 background: url("./image/photo-1517604931442-7e0c8ed2963c.jpg");
81 background-size: cover;
82 background-repeat: no-repeat;
83 background-position: center;
84 width: 100%;
85 height: calc(100vh - 60px);
86 display: flex;
87 justify-content: center;
88 align-items: center;
89}
90
91.showcase .mask {
92 position: absolute;
93 width: 100%;
94 height: 100%;
95 background-color: #000;
96 z-index: 1;
97 opacity: 0.5;
98}
99
100.showcase .txt,
101.showcase .slogan {
102 position: absolute;
103 color: #fff;
104 z-index: 2;
105 font-family: 'Nunito', sans-serif;
106 font-weight: bold;
107 font-size: 3em;
108}
109
110.showcase .slogan {
111 font-size: 1.2em;
112 bottom: 35%;
113}
114
115.service {
116 display: grid;
117 grid-template-rows: repeat(3, 1fr);
118 background-color: #000;
119 grid-gap:20px;
120 padding: 30px 50px;
121}
122
123.service a {
124 display: flex;
125 width: auto;
126 flex-flow: column nowrap;
127 justify-content: center;
128 align-items: center;
129 cursor: pointer;
130 text-decoration: none;
131}
132
133.service a img {
134 width: 30%;
135}
136
137.service a p {
138 color: #fff;
139 font-size: 1.5em;
140 font-weight: bolder;
141 margin: 10px;
142}
143
144.content {
145 display: grid;
146 grid-template-rows: repeat(3, 1fr);
147 grid-template-columns: 1fr;
148 grid-gap: 0px;
149}
150
151.content div {
152 width: 100%;
153 text-align: center;
154 font-size: 1.5em;
155}
156
157.content div:nth-child(even) {
158 background-color: #000;
159 color: #fff;
160}
161
162.content div img {
163 width: 100%;
164}
165
166.content div p {
167 padding: 10px;
168 }
169
170footer {
171 display: flex;
172 flex-direction: column;
173 width: 100%;
174}
175
176.contact-info {
177 display: flex;
178 flex-direction: row;
179 justify-content: space-between;
180 align-items: center;
181 padding: 20px;
182 background-color: #000;
183}
184
185.contact-txt {
186 display: flex;
187 flex-flow: column nowrap;
188 width: 50%;
189 color: #fff;
190}
191
192footer #social-media img{
193 width: 30px;
194 margin: 0 5px;
195}
196
197.copyright {
198 text-align: center;
199}
200
201@media screen and (min-width: 576px) {
202 .showBtn, .navbar .hideBtn {
203 display: none;
204 }
205 .navbar{
206 margin-left: auto;
207 font-size: 0;
208 position: relative;
209 width: auto;
210 height: 100%;
211 background: #000;
212 right: 0;
213 top: 0;
214 display: flex;
215 justify-content: flex-end;
216 align-items: center;
217 flex-direction: row;
218 transition: none;
219 z-index: 0;
220}
221 .showcase .txt {
222 font-size: 4em;
223 }
224
225 .showcase .slogan {
226 font-size: 2em;
227 }
228
229 .service {
230 display: grid;
231 grid-template-rows: 1fr;
232 grid-template-columns: repeat(3, 1fr);
233 }
234 .content {
235 display: grid;
236 grid-template-rows: repeat(3, 1fr);
237 }
238 .content div {
239 display: grid;
240 grid-template-columns: 1fr 1fr;
241 align-items: center;
242 font-size: 1.2em;
243 }
244}
1* {
2 padding: 0;
3 margin: 0;
4 box-sizing: border-box;
5 font-family: 'Nunito', sans-serif;
6}
7
8.wrap {
9 width: 100%;
10}
11
12header {
13 height: 100px;
14 background: #000;
15 padding: 0 10px;
16 color: #fff;
17 display: flex;
18 align-items: center;
19 position: relative;
20}
21
22#checked {
23 visibility: hidden;
24 z-index: -9999;
25 position: absolute;
26}
27
28#checked:checked ~.navbar {
29 right: 0;
30}
31
32.logo {
33 height: 60%;
34 vertical-align: middle;
35}
36
37.navbar{
38 margin-left: auto;
39 font-size: 0;
40 position: fixed;
41 width: 100%;
42 height: 100vh;
43 background: #000;
44 right: -100%;
45 top: 0;
46 display: flex;
47 justify-content: center;
48 align-items: center;
49 flex-direction: column;
50 transition: .5s;
51 z-index: 999;
52}
53
54.navbar a {
55 display: block;
56 margin: 20px 0;
57 transition: .4s;
58}
59
60.navbar a:hover, .hideBtn:hover {
61 color: #3498db;
62}
63
64.navbar a,
65 .hideBtn, .showBtn {
66 font-size: 20px;
67 padding: 0 10px;
68 text-decoration: none;
69 color: #fff;
70}
71
72.showBtn {
73 position: absolute;
74 top: 37px;
75 right: 10px;
76}
77
78.showcase {
79 position: relative;
80 background: url("./image/photo-1517604931442-7e0c8ed2963c.jpg");
81 background-size: cover;
82 background-repeat: no-repeat;
83 background-position: center;
84 width: 100%;
85 height: calc(100vh - 60px);
86 display: flex;
87 justify-content: center;
88 align-items: center;
89}
90
91.showcase .mask {
92 position: absolute;
93 width: 100%;
94 height: 100%;
95 background-color: #000;
96 z-index: 1;
97 opacity: 0.5;
98}
99
100.showcase .txt,
101.showcase .slogan {
102 position: absolute;
103 color: #fff;
104 z-index: 2;
105 font-family: 'Nunito', sans-serif;
106 font-weight: bold;
107 font-size: 3em;
108}
109
110.showcase .slogan {
111 font-size: 1.2em;
112 bottom: 35%;
113}
114
115.service {
116 display: grid;
117 grid-template-rows: repeat(3, 1fr);
118 background-color: #000;
119 grid-gap:20px;
120 padding: 30px 50px;
121}
122
123.service a {
124 display: flex;
125 width: auto;
126 flex-flow: column nowrap;
127 justify-content: center;
128 align-items: center;
129 cursor: pointer;
130 text-decoration: none;
131}
132
133.service a img {
134 width: 30%;
135}
136
137.service a p {
138 color: #fff;
139 font-size: 1.5em;
140 font-weight: bolder;
141 margin: 10px;
142}
143
144.content {
145 display: grid;
146 grid-template-rows: repeat(3, 1fr);
147 grid-template-columns: 1fr;
148 grid-gap: 0px;
149}
150
151.content div {
152 width: 100%;
153 text-align: center;
154 font-size: 1.5em;
155}
156
157.content div:nth-child(even) {
158 background-color: #000;
159 color: #fff;
160}
161
162.content div img {
163 width: 100%;
164}
165
166.content div p {
167 padding: 10px;
168 }
169
170footer {
171 display: flex;
172 flex-direction: column;
173 width: 100%;
174}
175
176.contact-info {
177 display: flex;
178 flex-direction: row;
179 justify-content: space-between;
180 align-items: center;
181 padding: 20px;
182 background-color: #000;
183}
184
185.contact-txt {
186 display: flex;
187 flex-flow: column nowrap;
188 width: 50%;
189 color: #fff;
190}
191
192footer #social-media img{
193 width: 30px;
194 margin: 0 5px;
195}
196
197.copyright {
198 text-align: center;
199}
200
201@media screen and (min-width: 576px) {
202 .showBtn, .navbar .hideBtn {
203 display: none;
204 }
205 .navbar{
206 margin-left: auto;
207 font-size: 0;
208 position: relative;
209 width: auto;
210 height: 100%;
211 background: #000;
212 right: 0;
213 top: 0;
214 display: flex;
215 justify-content: flex-end;
216 align-items: center;
217 flex-direction: row;
218 transition: none;
219 z-index: 0;
220}
221 .showcase .txt {
222 font-size: 4em;
223 }
224
225 .showcase .slogan {
226 font-size: 2em;
227 }
228
229 .service {
230 display: grid;
231 grid-template-rows: 1fr;
232 grid-template-columns: repeat(3, 1fr);
233 }
234 .content {
235 display: grid;
236 grid-template-rows: repeat(3, 1fr);
237 }
238 .content div {
239 display: grid;
240 grid-template-columns: 1fr 1fr;
241 align-items: center;
242 font-size: 1.2em;
243 }
244}<!DOCTYPE html>
245<html lang="en">
246
247<head>
248 <meta charset="UTF-8">
249 <meta name="viewport" content="width=device-width, initial-scale=1.0">
250 <title>Movie List</title>
251 <link rel="stylesheet" href="style.css">
252 <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@600&display=swap" rel="stylesheet">
253</head>
254
255<body>
256 <div class="wrap">
257 <header>
258 <img class="logo" src="./image/media.svg" />
259 <input type="checkbox" id="checked">
260 <label for="checked" class="showBtn">
261 <i class="fas fa-bars"></i>
262 </label>
263 <nav class="navbar">
264 <a href="#">About</a>
265 <a href="./explore.html">Explore</a>
266 <a href="#social-media">Contact us</a>
267 <label for="checked" class="hideBtn">
268 <i class="fas fa-times"></i>
269 </label>
270 </nav>
271 </header>
272
273 <div class="showcase">
274 <div class="mask"></div>
275 <h1 class="txt">HOME CINEMA</h1>
276 <h2 class="slogan">Experience Cinema at home</h2>
277 </div>
278 <div class="service">
279 <a href="#subscribe-info">
280 <img src="./image/communications.svg" alt="">
281 <p>$99 / month</p>
282 </a>
283 <a href="#vr-info">
284 <img src="./image/electronics.svg" alt="">
285 <p>Virtual Reality</p>
286 </a>
287 <a href="#unlimited-info">
288 <img src="./image/arrows.svg" alt="">
289 <p>Unlimited Watch</p>
290 </a>
291 </div>
292 <div class="content">
293 <div id="subscribe-info">
294 <img src="./image/photo-1543536448-d209d2d13a1c.jpg" alt="">
295 <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Perferendis necessitatibus ratione, ut sunt
296 voluptatibus totam a repudiandae enim nihil beatae ducimus aliquid! Et, beatae reprehenderit aspernatur est
297 hic commodi expedita.</p>
298 </div>
299 <div id="vr-info">
300 <img src="./image/pexels-photo-3391378.jpeg" alt="">
301 <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque possimus facere ipsum unde saepe maxime
302 voluptatem tempora sint pariatur at, nobis ipsam necessitatibus similique maiores, reiciendis repudiandae
303 voluptatum, cumque repellat.</p>
304 </div>
305 <div id="unlimited-info">
306 <img src="./image/pexels-photo-3912397.jpeg" alt="">
307 <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Est, nesciunt veniam, reprehenderit, fugiat nemo
308 fugit natus dicta maxime delectus ut quos et mollitia obcaecati pariatur. Rerum minima delectus sint ex?</p>
309 </div>
310 </div>
311 <footer>
312 <div class="contact-info">
313 <div class="contact-txt">
314 <p>hola@jamondetaiwan.com</p>
315 <p>+886 2771 5412</p>
316 <p>2F., No. 2, Ln. 179, Kanghu Rd., Neihu Dist., Taipei City 114, Taiwan (R.O.C.)</p>
317 </div>
318 <div id="social-media">
319 <img src="./image/fb.svg" alt="">
320 <img src="./image/ig.svg" alt="">
321 <img src="./image/youtube.svg" alt="">
322 </div>
323 </div>
324 <div class="copyright">
325 </div>
326 </footer>
327 </div>
328 <script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/js/all.min.js"></script>
329</body>
330
331</html>
ANSWER
Answered 2020-Jul-22 at 19:23This arises due to the CSS transition: .5s;
in .navbar
; when you reach the breakpoint, you are changing the right
position and CSS is animating it. To avoid this, specify the properties you want to animate or add the transition
property using JavaScript before you show the menu. For example, using jQuery:
$(".navbar").css("transition", ".5s");
Edit: I missed the CSS selector that is causing the animation and so assumed it was jQuery.
To address the issue with just HTML/CSS, you can create a copy of the navbar and use display: none;
. The following snippet should work; I have added a copy of the navbar and added the classes .navbar-big
and .navbar-small
. This allow us to use the display
property to hide the navbar we don't want to show based on the breakpoint, and set transition: right .5s;
for .navbar-small
.
1* {
2 padding: 0;
3 margin: 0;
4 box-sizing: border-box;
5 font-family: 'Nunito', sans-serif;
6}
7
8.wrap {
9 width: 100%;
10}
11
12header {
13 height: 100px;
14 background: #000;
15 padding: 0 10px;
16 color: #fff;
17 display: flex;
18 align-items: center;
19 position: relative;
20}
21
22#checked {
23 visibility: hidden;
24 z-index: -9999;
25 position: absolute;
26}
27
28#checked:checked ~.navbar {
29 right: 0;
30}
31
32.logo {
33 height: 60%;
34 vertical-align: middle;
35}
36
37.navbar{
38 margin-left: auto;
39 font-size: 0;
40 position: fixed;
41 width: 100%;
42 height: 100vh;
43 background: #000;
44 right: -100%;
45 top: 0;
46 display: flex;
47 justify-content: center;
48 align-items: center;
49 flex-direction: column;
50 transition: .5s;
51 z-index: 999;
52}
53
54.navbar a {
55 display: block;
56 margin: 20px 0;
57 transition: .4s;
58}
59
60.navbar a:hover, .hideBtn:hover {
61 color: #3498db;
62}
63
64.navbar a,
65 .hideBtn, .showBtn {
66 font-size: 20px;
67 padding: 0 10px;
68 text-decoration: none;
69 color: #fff;
70}
71
72.showBtn {
73 position: absolute;
74 top: 37px;
75 right: 10px;
76}
77
78.showcase {
79 position: relative;
80 background: url("./image/photo-1517604931442-7e0c8ed2963c.jpg");
81 background-size: cover;
82 background-repeat: no-repeat;
83 background-position: center;
84 width: 100%;
85 height: calc(100vh - 60px);
86 display: flex;
87 justify-content: center;
88 align-items: center;
89}
90
91.showcase .mask {
92 position: absolute;
93 width: 100%;
94 height: 100%;
95 background-color: #000;
96 z-index: 1;
97 opacity: 0.5;
98}
99
100.showcase .txt,
101.showcase .slogan {
102 position: absolute;
103 color: #fff;
104 z-index: 2;
105 font-family: 'Nunito', sans-serif;
106 font-weight: bold;
107 font-size: 3em;
108}
109
110.showcase .slogan {
111 font-size: 1.2em;
112 bottom: 35%;
113}
114
115.service {
116 display: grid;
117 grid-template-rows: repeat(3, 1fr);
118 background-color: #000;
119 grid-gap:20px;
120 padding: 30px 50px;
121}
122
123.service a {
124 display: flex;
125 width: auto;
126 flex-flow: column nowrap;
127 justify-content: center;
128 align-items: center;
129 cursor: pointer;
130 text-decoration: none;
131}
132
133.service a img {
134 width: 30%;
135}
136
137.service a p {
138 color: #fff;
139 font-size: 1.5em;
140 font-weight: bolder;
141 margin: 10px;
142}
143
144.content {
145 display: grid;
146 grid-template-rows: repeat(3, 1fr);
147 grid-template-columns: 1fr;
148 grid-gap: 0px;
149}
150
151.content div {
152 width: 100%;
153 text-align: center;
154 font-size: 1.5em;
155}
156
157.content div:nth-child(even) {
158 background-color: #000;
159 color: #fff;
160}
161
162.content div img {
163 width: 100%;
164}
165
166.content div p {
167 padding: 10px;
168 }
169
170footer {
171 display: flex;
172 flex-direction: column;
173 width: 100%;
174}
175
176.contact-info {
177 display: flex;
178 flex-direction: row;
179 justify-content: space-between;
180 align-items: center;
181 padding: 20px;
182 background-color: #000;
183}
184
185.contact-txt {
186 display: flex;
187 flex-flow: column nowrap;
188 width: 50%;
189 color: #fff;
190}
191
192footer #social-media img{
193 width: 30px;
194 margin: 0 5px;
195}
196
197.copyright {
198 text-align: center;
199}
200
201@media screen and (min-width: 576px) {
202 .showBtn, .navbar .hideBtn {
203 display: none;
204 }
205 .navbar{
206 margin-left: auto;
207 font-size: 0;
208 position: relative;
209 width: auto;
210 height: 100%;
211 background: #000;
212 right: 0;
213 top: 0;
214 display: flex;
215 justify-content: flex-end;
216 align-items: center;
217 flex-direction: row;
218 transition: none;
219 z-index: 0;
220}
221 .showcase .txt {
222 font-size: 4em;
223 }
224
225 .showcase .slogan {
226 font-size: 2em;
227 }
228
229 .service {
230 display: grid;
231 grid-template-rows: 1fr;
232 grid-template-columns: repeat(3, 1fr);
233 }
234 .content {
235 display: grid;
236 grid-template-rows: repeat(3, 1fr);
237 }
238 .content div {
239 display: grid;
240 grid-template-columns: 1fr 1fr;
241 align-items: center;
242 font-size: 1.2em;
243 }
244}<!DOCTYPE html>
245<html lang="en">
246
247<head>
248 <meta charset="UTF-8">
249 <meta name="viewport" content="width=device-width, initial-scale=1.0">
250 <title>Movie List</title>
251 <link rel="stylesheet" href="style.css">
252 <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@600&display=swap" rel="stylesheet">
253</head>
254
255<body>
256 <div class="wrap">
257 <header>
258 <img class="logo" src="./image/media.svg" />
259 <input type="checkbox" id="checked">
260 <label for="checked" class="showBtn">
261 <i class="fas fa-bars"></i>
262 </label>
263 <nav class="navbar">
264 <a href="#">About</a>
265 <a href="./explore.html">Explore</a>
266 <a href="#social-media">Contact us</a>
267 <label for="checked" class="hideBtn">
268 <i class="fas fa-times"></i>
269 </label>
270 </nav>
271 </header>
272
273 <div class="showcase">
274 <div class="mask"></div>
275 <h1 class="txt">HOME CINEMA</h1>
276 <h2 class="slogan">Experience Cinema at home</h2>
277 </div>
278 <div class="service">
279 <a href="#subscribe-info">
280 <img src="./image/communications.svg" alt="">
281 <p>$99 / month</p>
282 </a>
283 <a href="#vr-info">
284 <img src="./image/electronics.svg" alt="">
285 <p>Virtual Reality</p>
286 </a>
287 <a href="#unlimited-info">
288 <img src="./image/arrows.svg" alt="">
289 <p>Unlimited Watch</p>
290 </a>
291 </div>
292 <div class="content">
293 <div id="subscribe-info">
294 <img src="./image/photo-1543536448-d209d2d13a1c.jpg" alt="">
295 <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Perferendis necessitatibus ratione, ut sunt
296 voluptatibus totam a repudiandae enim nihil beatae ducimus aliquid! Et, beatae reprehenderit aspernatur est
297 hic commodi expedita.</p>
298 </div>
299 <div id="vr-info">
300 <img src="./image/pexels-photo-3391378.jpeg" alt="">
301 <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque possimus facere ipsum unde saepe maxime
302 voluptatem tempora sint pariatur at, nobis ipsam necessitatibus similique maiores, reiciendis repudiandae
303 voluptatum, cumque repellat.</p>
304 </div>
305 <div id="unlimited-info">
306 <img src="./image/pexels-photo-3912397.jpeg" alt="">
307 <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Est, nesciunt veniam, reprehenderit, fugiat nemo
308 fugit natus dicta maxime delectus ut quos et mollitia obcaecati pariatur. Rerum minima delectus sint ex?</p>
309 </div>
310 </div>
311 <footer>
312 <div class="contact-info">
313 <div class="contact-txt">
314 <p>hola@jamondetaiwan.com</p>
315 <p>+886 2771 5412</p>
316 <p>2F., No. 2, Ln. 179, Kanghu Rd., Neihu Dist., Taipei City 114, Taiwan (R.O.C.)</p>
317 </div>
318 <div id="social-media">
319 <img src="./image/fb.svg" alt="">
320 <img src="./image/ig.svg" alt="">
321 <img src="./image/youtube.svg" alt="">
322 </div>
323 </div>
324 <div class="copyright">
325 </div>
326 </footer>
327 </div>
328 <script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/js/all.min.js"></script>
329</body>
330
331</html>* {
332 padding: 0;
333 margin: 0;
334 box-sizing: border-box;
335 font-family: 'Nunito', sans-serif;
336}
337
338.wrap {
339 width: 100%;
340}
341
342header {
343 height: 100px;
344 background: #000;
345 padding: 0 10px;
346 color: #fff;
347 display: flex;
348 align-items: center;
349 position: relative;
350}
351
352#checked {
353 visibility: hidden;
354 z-index: -9999;
355 position: absolute;
356}
357
358#checked:checked ~.navbar {
359 right: 0;
360 transition: .5s;
361}
362
363.logo {
364 height: 60%;
365 vertical-align: middle;
366}
367
368.navbar {
369 margin-left: auto;
370 font-size: 0;
371 position: fixed;
372 width: 100%;
373 height: 100vh;
374 background: #000;
375 right: -100%;
376 top: 0;
377 display: flex;
378 justify-content: center;
379 align-items: center;
380 flex-direction: column;
381 z-index: 999;
382}
383
384.navbar-small {
385 transition: right .5s;
386}
387
388.navbar-big {
389 display: none;
390}
391
392.navbar a {
393 display: block;
394 margin: 20px 0;
395 transition: .4s;
396}
397
398.navbar a:hover, .hideBtn:hover {
399 color: #3498db;
400}
401
402.navbar a,
403 .hideBtn, .showBtn {
404 font-size: 20px;
405 padding: 0 10px;
406 text-decoration: none;
407 color: #fff;
408}
409
410.showBtn {
411 position: absolute;
412 top: 37px;
413 right: 10px;
414}
415
416.showcase {
417 position: relative;
418 background: url("./image/photo-1517604931442-7e0c8ed2963c.jpg");
419 background-size: cover;
420 background-repeat: no-repeat;
421 background-position: center;
422 width: 100%;
423 height: calc(100vh - 60px);
424 display: flex;
425 justify-content: center;
426 align-items: center;
427}
428
429.showcase .mask {
430 position: absolute;
431 width: 100%;
432 height: 100%;
433 background-color: #000;
434 z-index: 1;
435 opacity: 0.5;
436}
437
438.showcase .txt,
439.showcase .slogan {
440 position: absolute;
441 color: #fff;
442 z-index: 2;
443 font-family: 'Nunito', sans-serif;
444 font-weight: bold;
445 font-size: 3em;
446}
447
448.showcase .slogan {
449 font-size: 1.2em;
450 bottom: 35%;
451}
452
453.service {
454 display: grid;
455 grid-template-rows: repeat(3, 1fr);
456 background-color: #000;
457 grid-gap:20px;
458 padding: 30px 50px;
459}
460
461.service a {
462 display: flex;
463 width: auto;
464 flex-flow: column nowrap;
465 justify-content: center;
466 align-items: center;
467 cursor: pointer;
468 text-decoration: none;
469}
470
471.service a img {
472 width: 30%;
473}
474
475.service a p {
476 color: #fff;
477 font-size: 1.5em;
478 font-weight: bolder;
479 margin: 10px;
480}
481
482.content {
483 display: grid;
484 grid-template-rows: repeat(3, 1fr);
485 grid-template-columns: 1fr;
486 grid-gap: 0px;
487}
488
489.content div {
490 width: 100%;
491 text-align: center;
492 font-size: 1.5em;
493}
494
495.content div:nth-child(even) {
496 background-color: #000;
497 color: #fff;
498}
499
500.content div img {
501 width: 100%;
502}
503
504.content div p {
505 padding: 10px;
506 }
507
508footer {
509 display: flex;
510 flex-direction: column;
511 width: 100%;
512}
513
514.contact-info {
515 display: flex;
516 flex-direction: row;
517 justify-content: space-between;
518 align-items: center;
519 padding: 20px;
520 background-color: #000;
521}
522
523.contact-txt {
524 display: flex;
525 flex-flow: column nowrap;
526 width: 50%;
527 color: #fff;
528}
529
530footer #social-media img{
531 width: 30px;
532 margin: 0 5px;
533}
534
535.copyright {
536 text-align: center;
537}
538
539@media screen and (min-width: 576px) {
540 .showBtn, .navbar .hideBtn {
541 display: none;
542 }
543
544 .navbar {
545 margin-left: auto;
546 font-size: 0;
547 position: relative;
548 width: auto;
549 height: 100%;
550 background: #000;
551 right: 0;
552 top: 0;
553 display: flex;
554 justify-content: flex-end;
555 align-items: center;
556 flex-direction: row;
557 transition: none;
558 z-index: 0;
559 }
560
561 .navbar-small {
562 display: none;
563 }
564
565 .showcase .txt {
566 font-size: 4em;
567 }
568
569 .showcase .slogan {
570 font-size: 2em;
571 }
572
573 .service {
574 display: grid;
575 grid-template-rows: 1fr;
576 grid-template-columns: repeat(3, 1fr);
577 }
578 .content {
579 display: grid;
580 grid-template-rows: repeat(3, 1fr);
581 }
582 .content div {
583 display: grid;
584 grid-template-columns: 1fr 1fr;
585 align-items: center;
586 font-size: 1.2em;
587 }
588}
1* {
2 padding: 0;
3 margin: 0;
4 box-sizing: border-box;
5 font-family: 'Nunito', sans-serif;
6}
7
8.wrap {
9 width: 100%;
10}
11
12header {
13 height: 100px;
14 background: #000;
15 padding: 0 10px;
16 color: #fff;
17 display: flex;
18 align-items: center;
19 position: relative;
20}
21
22#checked {
23 visibility: hidden;
24 z-index: -9999;
25 position: absolute;
26}
27
28#checked:checked ~.navbar {
29 right: 0;
30}
31
32.logo {
33 height: 60%;
34 vertical-align: middle;
35}
36
37.navbar{
38 margin-left: auto;
39 font-size: 0;
40 position: fixed;
41 width: 100%;
42 height: 100vh;
43 background: #000;
44 right: -100%;
45 top: 0;
46 display: flex;
47 justify-content: center;
48 align-items: center;
49 flex-direction: column;
50 transition: .5s;
51 z-index: 999;
52}
53
54.navbar a {
55 display: block;
56 margin: 20px 0;
57 transition: .4s;
58}
59
60.navbar a:hover, .hideBtn:hover {
61 color: #3498db;
62}
63
64.navbar a,
65 .hideBtn, .showBtn {
66 font-size: 20px;
67 padding: 0 10px;
68 text-decoration: none;
69 color: #fff;
70}
71
72.showBtn {
73 position: absolute;
74 top: 37px;
75 right: 10px;
76}
77
78.showcase {
79 position: relative;
80 background: url("./image/photo-1517604931442-7e0c8ed2963c.jpg");
81 background-size: cover;
82 background-repeat: no-repeat;
83 background-position: center;
84 width: 100%;
85 height: calc(100vh - 60px);
86 display: flex;
87 justify-content: center;
88 align-items: center;
89}
90
91.showcase .mask {
92 position: absolute;
93 width: 100%;
94 height: 100%;
95 background-color: #000;
96 z-index: 1;
97 opacity: 0.5;
98}
99
100.showcase .txt,
101.showcase .slogan {
102 position: absolute;
103 color: #fff;
104 z-index: 2;
105 font-family: 'Nunito', sans-serif;
106 font-weight: bold;
107 font-size: 3em;
108}
109
110.showcase .slogan {
111 font-size: 1.2em;
112 bottom: 35%;
113}
114
115.service {
116 display: grid;
117 grid-template-rows: repeat(3, 1fr);
118 background-color: #000;
119 grid-gap:20px;
120 padding: 30px 50px;
121}
122
123.service a {
124 display: flex;
125 width: auto;
126 flex-flow: column nowrap;
127 justify-content: center;
128 align-items: center;
129 cursor: pointer;
130 text-decoration: none;
131}
132
133.service a img {
134 width: 30%;
135}
136
137.service a p {
138 color: #fff;
139 font-size: 1.5em;
140 font-weight: bolder;
141 margin: 10px;
142}
143
144.content {
145 display: grid;
146 grid-template-rows: repeat(3, 1fr);
147 grid-template-columns: 1fr;
148 grid-gap: 0px;
149}
150
151.content div {
152 width: 100%;
153 text-align: center;
154 font-size: 1.5em;
155}
156
157.content div:nth-child(even) {
158 background-color: #000;
159 color: #fff;
160}
161
162.content div img {
163 width: 100%;
164}
165
166.content div p {
167 padding: 10px;
168 }
169
170footer {
171 display: flex;
172 flex-direction: column;
173 width: 100%;
174}
175
176.contact-info {
177 display: flex;
178 flex-direction: row;
179 justify-content: space-between;
180 align-items: center;
181 padding: 20px;
182 background-color: #000;
183}
184
185.contact-txt {
186 display: flex;
187 flex-flow: column nowrap;
188 width: 50%;
189 color: #fff;
190}
191
192footer #social-media img{
193 width: 30px;
194 margin: 0 5px;
195}
196
197.copyright {
198 text-align: center;
199}
200
201@media screen and (min-width: 576px) {
202 .showBtn, .navbar .hideBtn {
203 display: none;
204 }
205 .navbar{
206 margin-left: auto;
207 font-size: 0;
208 position: relative;
209 width: auto;
210 height: 100%;
211 background: #000;
212 right: 0;
213 top: 0;
214 display: flex;
215 justify-content: flex-end;
216 align-items: center;
217 flex-direction: row;
218 transition: none;
219 z-index: 0;
220}
221 .showcase .txt {
222 font-size: 4em;
223 }
224
225 .showcase .slogan {
226 font-size: 2em;
227 }
228
229 .service {
230 display: grid;
231 grid-template-rows: 1fr;
232 grid-template-columns: repeat(3, 1fr);
233 }
234 .content {
235 display: grid;
236 grid-template-rows: repeat(3, 1fr);
237 }
238 .content div {
239 display: grid;
240 grid-template-columns: 1fr 1fr;
241 align-items: center;
242 font-size: 1.2em;
243 }
244}<!DOCTYPE html>
245<html lang="en">
246
247<head>
248 <meta charset="UTF-8">
249 <meta name="viewport" content="width=device-width, initial-scale=1.0">
250 <title>Movie List</title>
251 <link rel="stylesheet" href="style.css">
252 <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@600&display=swap" rel="stylesheet">
253</head>
254
255<body>
256 <div class="wrap">
257 <header>
258 <img class="logo" src="./image/media.svg" />
259 <input type="checkbox" id="checked">
260 <label for="checked" class="showBtn">
261 <i class="fas fa-bars"></i>
262 </label>
263 <nav class="navbar">
264 <a href="#">About</a>
265 <a href="./explore.html">Explore</a>
266 <a href="#social-media">Contact us</a>
267 <label for="checked" class="hideBtn">
268 <i class="fas fa-times"></i>
269 </label>
270 </nav>
271 </header>
272
273 <div class="showcase">
274 <div class="mask"></div>
275 <h1 class="txt">HOME CINEMA</h1>
276 <h2 class="slogan">Experience Cinema at home</h2>
277 </div>
278 <div class="service">
279 <a href="#subscribe-info">
280 <img src="./image/communications.svg" alt="">
281 <p>$99 / month</p>
282 </a>
283 <a href="#vr-info">
284 <img src="./image/electronics.svg" alt="">
285 <p>Virtual Reality</p>
286 </a>
287 <a href="#unlimited-info">
288 <img src="./image/arrows.svg" alt="">
289 <p>Unlimited Watch</p>
290 </a>
291 </div>
292 <div class="content">
293 <div id="subscribe-info">
294 <img src="./image/photo-1543536448-d209d2d13a1c.jpg" alt="">
295 <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Perferendis necessitatibus ratione, ut sunt
296 voluptatibus totam a repudiandae enim nihil beatae ducimus aliquid! Et, beatae reprehenderit aspernatur est
297 hic commodi expedita.</p>
298 </div>
299 <div id="vr-info">
300 <img src="./image/pexels-photo-3391378.jpeg" alt="">
301 <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque possimus facere ipsum unde saepe maxime
302 voluptatem tempora sint pariatur at, nobis ipsam necessitatibus similique maiores, reiciendis repudiandae
303 voluptatum, cumque repellat.</p>
304 </div>
305 <div id="unlimited-info">
306 <img src="./image/pexels-photo-3912397.jpeg" alt="">
307 <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Est, nesciunt veniam, reprehenderit, fugiat nemo
308 fugit natus dicta maxime delectus ut quos et mollitia obcaecati pariatur. Rerum minima delectus sint ex?</p>
309 </div>
310 </div>
311 <footer>
312 <div class="contact-info">
313 <div class="contact-txt">
314 <p>hola@jamondetaiwan.com</p>
315 <p>+886 2771 5412</p>
316 <p>2F., No. 2, Ln. 179, Kanghu Rd., Neihu Dist., Taipei City 114, Taiwan (R.O.C.)</p>
317 </div>
318 <div id="social-media">
319 <img src="./image/fb.svg" alt="">
320 <img src="./image/ig.svg" alt="">
321 <img src="./image/youtube.svg" alt="">
322 </div>
323 </div>
324 <div class="copyright">
325 </div>
326 </footer>
327 </div>
328 <script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/js/all.min.js"></script>
329</body>
330
331</html>* {
332 padding: 0;
333 margin: 0;
334 box-sizing: border-box;
335 font-family: 'Nunito', sans-serif;
336}
337
338.wrap {
339 width: 100%;
340}
341
342header {
343 height: 100px;
344 background: #000;
345 padding: 0 10px;
346 color: #fff;
347 display: flex;
348 align-items: center;
349 position: relative;
350}
351
352#checked {
353 visibility: hidden;
354 z-index: -9999;
355 position: absolute;
356}
357
358#checked:checked ~.navbar {
359 right: 0;
360 transition: .5s;
361}
362
363.logo {
364 height: 60%;
365 vertical-align: middle;
366}
367
368.navbar {
369 margin-left: auto;
370 font-size: 0;
371 position: fixed;
372 width: 100%;
373 height: 100vh;
374 background: #000;
375 right: -100%;
376 top: 0;
377 display: flex;
378 justify-content: center;
379 align-items: center;
380 flex-direction: column;
381 z-index: 999;
382}
383
384.navbar-small {
385 transition: right .5s;
386}
387
388.navbar-big {
389 display: none;
390}
391
392.navbar a {
393 display: block;
394 margin: 20px 0;
395 transition: .4s;
396}
397
398.navbar a:hover, .hideBtn:hover {
399 color: #3498db;
400}
401
402.navbar a,
403 .hideBtn, .showBtn {
404 font-size: 20px;
405 padding: 0 10px;
406 text-decoration: none;
407 color: #fff;
408}
409
410.showBtn {
411 position: absolute;
412 top: 37px;
413 right: 10px;
414}
415
416.showcase {
417 position: relative;
418 background: url("./image/photo-1517604931442-7e0c8ed2963c.jpg");
419 background-size: cover;
420 background-repeat: no-repeat;
421 background-position: center;
422 width: 100%;
423 height: calc(100vh - 60px);
424 display: flex;
425 justify-content: center;
426 align-items: center;
427}
428
429.showcase .mask {
430 position: absolute;
431 width: 100%;
432 height: 100%;
433 background-color: #000;
434 z-index: 1;
435 opacity: 0.5;
436}
437
438.showcase .txt,
439.showcase .slogan {
440 position: absolute;
441 color: #fff;
442 z-index: 2;
443 font-family: 'Nunito', sans-serif;
444 font-weight: bold;
445 font-size: 3em;
446}
447
448.showcase .slogan {
449 font-size: 1.2em;
450 bottom: 35%;
451}
452
453.service {
454 display: grid;
455 grid-template-rows: repeat(3, 1fr);
456 background-color: #000;
457 grid-gap:20px;
458 padding: 30px 50px;
459}
460
461.service a {
462 display: flex;
463 width: auto;
464 flex-flow: column nowrap;
465 justify-content: center;
466 align-items: center;
467 cursor: pointer;
468 text-decoration: none;
469}
470
471.service a img {
472 width: 30%;
473}
474
475.service a p {
476 color: #fff;
477 font-size: 1.5em;
478 font-weight: bolder;
479 margin: 10px;
480}
481
482.content {
483 display: grid;
484 grid-template-rows: repeat(3, 1fr);
485 grid-template-columns: 1fr;
486 grid-gap: 0px;
487}
488
489.content div {
490 width: 100%;
491 text-align: center;
492 font-size: 1.5em;
493}
494
495.content div:nth-child(even) {
496 background-color: #000;
497 color: #fff;
498}
499
500.content div img {
501 width: 100%;
502}
503
504.content div p {
505 padding: 10px;
506 }
507
508footer {
509 display: flex;
510 flex-direction: column;
511 width: 100%;
512}
513
514.contact-info {
515 display: flex;
516 flex-direction: row;
517 justify-content: space-between;
518 align-items: center;
519 padding: 20px;
520 background-color: #000;
521}
522
523.contact-txt {
524 display: flex;
525 flex-flow: column nowrap;
526 width: 50%;
527 color: #fff;
528}
529
530footer #social-media img{
531 width: 30px;
532 margin: 0 5px;
533}
534
535.copyright {
536 text-align: center;
537}
538
539@media screen and (min-width: 576px) {
540 .showBtn, .navbar .hideBtn {
541 display: none;
542 }
543
544 .navbar {
545 margin-left: auto;
546 font-size: 0;
547 position: relative;
548 width: auto;
549 height: 100%;
550 background: #000;
551 right: 0;
552 top: 0;
553 display: flex;
554 justify-content: flex-end;
555 align-items: center;
556 flex-direction: row;
557 transition: none;
558 z-index: 0;
559 }
560
561 .navbar-small {
562 display: none;
563 }
564
565 .showcase .txt {
566 font-size: 4em;
567 }
568
569 .showcase .slogan {
570 font-size: 2em;
571 }
572
573 .service {
574 display: grid;
575 grid-template-rows: 1fr;
576 grid-template-columns: repeat(3, 1fr);
577 }
578 .content {
579 display: grid;
580 grid-template-rows: repeat(3, 1fr);
581 }
582 .content div {
583 display: grid;
584 grid-template-columns: 1fr 1fr;
585 align-items: center;
586 font-size: 1.2em;
587 }
588}<!DOCTYPE html>
589<html lang="en">
590
591<head>
592 <meta charset="UTF-8">
593 <meta name="viewport" content="width=device-width, initial-scale=1.0">
594 <title>Movie List</title>
595 <link rel="stylesheet" href="style.css">
596 <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@600&display=swap" rel="stylesheet">
597</head>
598
599<body>
600 <div class="wrap">
601 <header>
602 <img class="logo" src="./image/media.svg" />
603 <input type="checkbox" id="checked">
604 <label for="checked" class="showBtn">
605 <i class="fas fa-bars"></i>
606 </label>
607 <nav class="navbar navbar-big">
608 <a href="#">About</a>
609 <a href="./explore.html">Explore</a>
610 <a href="#social-media">Contact us</a>
611 <label for="checked" class="hideBtn">
612 <i class="fas fa-times"></i>
613 </label>
614 </nav>
615 <nav class="navbar navbar-small">
616 <a href="#">About</a>
617 <a href="./explore.html">Explore</a>
618 <a href="#social-media">Contact us</a>
619 <label for="checked" class="hideBtn">
620 <i class="fas fa-times"></i>
621 </label>
622 </nav>
623 </header>
624
625 <div class="showcase">
626 <div class="mask"></div>
627 <h1 class="txt">HOME CINEMA</h1>
628 <h2 class="slogan">Experience Cinema at home</h2>
629 </div>
630 <div class="service">
631 <a href="#subscribe-info">
632 <img src="./image/communications.svg" alt="">
633 <p>$99 / month</p>
634 </a>
635 <a href="#vr-info">
636 <img src="./image/electronics.svg" alt="">
637 <p>Virtual Reality</p>
638 </a>
639 <a href="#unlimited-info">
640 <img src="./image/arrows.svg" alt="">
641 <p>Unlimited Watch</p>
642 </a>
643 </div>
644 <div class="content">
645 <div id="subscribe-info">
646 <img src="./image/photo-1543536448-d209d2d13a1c.jpg" alt="">
647 <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Perferendis necessitatibus ratione, ut sunt
648 voluptatibus totam a repudiandae enim nihil beatae ducimus aliquid! Et, beatae reprehenderit aspernatur est
649 hic commodi expedita.</p>
650 </div>
651 <div id="vr-info">
652 <img src="./image/pexels-photo-3391378.jpeg" alt="">
653 <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Neque possimus facere ipsum unde saepe maxime
654 voluptatem tempora sint pariatur at, nobis ipsam necessitatibus similique maiores, reiciendis repudiandae
655 voluptatum, cumque repellat.</p>
656 </div>
657 <div id="unlimited-info">
658 <img src="./image/pexels-photo-3912397.jpeg" alt="">
659 <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Est, nesciunt veniam, reprehenderit, fugiat nemo
660 fugit natus dicta maxime delectus ut quos et mollitia obcaecati pariatur. Rerum minima delectus sint ex?</p>
661 </div>
662 </div>
663 <footer>
664 <div class="contact-info">
665 <div class="contact-txt">
666 <p>hola@jamondetaiwan.com</p>
667 <p>+886 2771 5412</p>
668 <p>2F., No. 2, Ln. 179, Kanghu Rd., Neihu Dist., Taipei City 114, Taiwan (R.O.C.)</p>
669 </div>
670 <div id="social-media">
671 <img src="./image/fb.svg" alt="">
672 <img src="./image/ig.svg" alt="">
673 <img src="./image/youtube.svg" alt="">
674 </div>
675 </div>
676 <div class="copyright">
677 </div>
678 </footer>
679 </div>
680 <script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/js/all.min.js"></script>
681</body>
682
683</html>
QUESTION
count sum of values of selected radio buttons which have particular data-id
Asked 2020-Jul-16 at 14:57I have radio buttons and they have different data-id and a value assigned to each radio button. i want to count sum of values of selected radio buttons where data-id=OriginalityOfIdeas. I want to do it with jquery. I am trying to do but not able to achieve my goal.
I want to count between particular div or class.
1<div class="multisteps-form__content">
2 <div class="row ">
3 <div class="col-md-12 mt-3 align-items-center">
4 <div class="form-group">
5 <div class="custom-control custom-radio">
6 <input class="custom-control-input" type="radio" id="Q_1_rb1" name="1" value="1" data-id="OriginalityOfIdeas">
7 <label for="Q_1_rb1" class="custom-control-label font-weight-normal">The event should be organized in the same way as every year. </label>
8 </div>
9 <div class="custom-control custom-radio">
10 <input class="custom-control-input" type="radio" id="Q_1_rb2" name="1" value="3" data-id="OriginalityOfIdeas">
11 <label for="Q_1_rb2" class="custom-control-label font-weight-normal">We could introduce some Virtual Reality games. </label>
12 </div>
13 <div class="custom-control custom-radio">
14 <input class="custom-control-input" type="radio" id="Q_1_rb3" name="1" value="2" data-id="OriginalityOfIdeas">
15 <label for="Q_1_rb3" class="custom-control-label font-weight-normal">We could make it different and more engaging, but need to think about how. </label>
16 </div>
17 <div class="custom-control custom-radio">
18 <input class="custom-control-input" type="radio" id="Q_1_rb4" name="1" value="4" data-id="OriginalityOfIdeas">
19 <label for="Q_1_rb4" class="custom-control-label font-weight-normal">We could invite some guest artists to perform during the day of the event.</label>
20 </div>
21 <div class="custom-control custom-radio">
22 <input class="custom-control-input" type="radio" id="Q_1_rb5" name="1" value="5" data-id="OriginalityOfIdeas">
23 <label for="Q_1_rb5" class="custom-control-label font-weight-normal">We could invite ideas from students to showcase their unique talent not known to others.</label>
24 </div>
25 </div>
26 </div>
27 </div>
28</div>
29
30<div class="multisteps-form__content">
31 <div class="row ">
32 <div class="col-md-12 mt-3 align-items-center">
33 <div class="form-group">
34 <div class="custom-control custom-radio">
35 <input class="custom-control-input" type="radio" id="Q_2_rb1" name="2" value="2" data-id="Curiosity">
36 <label for="Q_2_rb1" class="custom-control-label font-weight-normal">Gather some information about them </label>
37 </div>
38 <div class="custom-control custom-radio">
39 <input class="custom-control-input" type="radio" id="Q_2_rb2" name="2" value="4" data-id="Curiosity">
40 <label for="Q_2_rb2" class="custom-control-label font-weight-normal">Know in detail about the diverse cultures </label>
41 </div>
42 <div class="custom-control custom-radio">
43 <input class="custom-control-input" type="radio" id="Q_2_rb3" name="2" value="3" data-id="Curiosity">
44 <label for="Q_2_rb3" class="custom-control-label font-weight-normal">Gather information from my team members</label>
45 </div>
46 <div class="custom-control custom-radio">
47 <input class="custom-control-input" type="radio" id="Q_2_rb4" name="2" value="5" data-id="Curiosity">
48 <label for="Q_2_rb4" class="custom-control-label font-weight-normal">Gather information from various sources </label>
49 </div>
50 <div class="custom-control custom-radio">
51 <input class="custom-control-input" type="radio" id="Q_2_rb5" name="2" value="1" data-id="Curiosity">
52 <label for="Q_2_rb5" class="custom-control-label font-weight-normal">Does not matter to me </label>
53 </div>
54 </div>
55 </div>
56 </div>
57</div>
58
ANSWER
Answered 2020-Jul-16 at 13:32You can find the checked radio items by running a filter function against the list of found radio buttons (criterion:checked) within a certain group (according to the data test id).
However, you will always get either 1 radio button selected or 0 because that's how radio's work, it's not like a checkbox, selecting another one will cause the previous one to deselect.
the below code should get you going:
1<div class="multisteps-form__content">
2 <div class="row ">
3 <div class="col-md-12 mt-3 align-items-center">
4 <div class="form-group">
5 <div class="custom-control custom-radio">
6 <input class="custom-control-input" type="radio" id="Q_1_rb1" name="1" value="1" data-id="OriginalityOfIdeas">
7 <label for="Q_1_rb1" class="custom-control-label font-weight-normal">The event should be organized in the same way as every year. </label>
8 </div>
9 <div class="custom-control custom-radio">
10 <input class="custom-control-input" type="radio" id="Q_1_rb2" name="1" value="3" data-id="OriginalityOfIdeas">
11 <label for="Q_1_rb2" class="custom-control-label font-weight-normal">We could introduce some Virtual Reality games. </label>
12 </div>
13 <div class="custom-control custom-radio">
14 <input class="custom-control-input" type="radio" id="Q_1_rb3" name="1" value="2" data-id="OriginalityOfIdeas">
15 <label for="Q_1_rb3" class="custom-control-label font-weight-normal">We could make it different and more engaging, but need to think about how. </label>
16 </div>
17 <div class="custom-control custom-radio">
18 <input class="custom-control-input" type="radio" id="Q_1_rb4" name="1" value="4" data-id="OriginalityOfIdeas">
19 <label for="Q_1_rb4" class="custom-control-label font-weight-normal">We could invite some guest artists to perform during the day of the event.</label>
20 </div>
21 <div class="custom-control custom-radio">
22 <input class="custom-control-input" type="radio" id="Q_1_rb5" name="1" value="5" data-id="OriginalityOfIdeas">
23 <label for="Q_1_rb5" class="custom-control-label font-weight-normal">We could invite ideas from students to showcase their unique talent not known to others.</label>
24 </div>
25 </div>
26 </div>
27 </div>
28</div>
29
30<div class="multisteps-form__content">
31 <div class="row ">
32 <div class="col-md-12 mt-3 align-items-center">
33 <div class="form-group">
34 <div class="custom-control custom-radio">
35 <input class="custom-control-input" type="radio" id="Q_2_rb1" name="2" value="2" data-id="Curiosity">
36 <label for="Q_2_rb1" class="custom-control-label font-weight-normal">Gather some information about them </label>
37 </div>
38 <div class="custom-control custom-radio">
39 <input class="custom-control-input" type="radio" id="Q_2_rb2" name="2" value="4" data-id="Curiosity">
40 <label for="Q_2_rb2" class="custom-control-label font-weight-normal">Know in detail about the diverse cultures </label>
41 </div>
42 <div class="custom-control custom-radio">
43 <input class="custom-control-input" type="radio" id="Q_2_rb3" name="2" value="3" data-id="Curiosity">
44 <label for="Q_2_rb3" class="custom-control-label font-weight-normal">Gather information from my team members</label>
45 </div>
46 <div class="custom-control custom-radio">
47 <input class="custom-control-input" type="radio" id="Q_2_rb4" name="2" value="5" data-id="Curiosity">
48 <label for="Q_2_rb4" class="custom-control-label font-weight-normal">Gather information from various sources </label>
49 </div>
50 <div class="custom-control custom-radio">
51 <input class="custom-control-input" type="radio" id="Q_2_rb5" name="2" value="1" data-id="Curiosity">
52 <label for="Q_2_rb5" class="custom-control-label font-weight-normal">Does not matter to me </label>
53 </div>
54 </div>
55 </div>
56 </div>
57</div>
58function getSelectedRadioButtonAmount(dataId) {
59 const arr = document.querySelectorAll(`[data-id=${dataId}]`);
60 return Array.from(arr).filter(x => x.checked).length
61}
62
63
64document.getElementById('find-button').addEventListener('click', () => {
65 const amount = getSelectedRadioButtonAmount('OriginalityOfIdeas');
66 console.log('number of selected radios', amount)
67
68})
1<div class="multisteps-form__content">
2 <div class="row ">
3 <div class="col-md-12 mt-3 align-items-center">
4 <div class="form-group">
5 <div class="custom-control custom-radio">
6 <input class="custom-control-input" type="radio" id="Q_1_rb1" name="1" value="1" data-id="OriginalityOfIdeas">
7 <label for="Q_1_rb1" class="custom-control-label font-weight-normal">The event should be organized in the same way as every year. </label>
8 </div>
9 <div class="custom-control custom-radio">
10 <input class="custom-control-input" type="radio" id="Q_1_rb2" name="1" value="3" data-id="OriginalityOfIdeas">
11 <label for="Q_1_rb2" class="custom-control-label font-weight-normal">We could introduce some Virtual Reality games. </label>
12 </div>
13 <div class="custom-control custom-radio">
14 <input class="custom-control-input" type="radio" id="Q_1_rb3" name="1" value="2" data-id="OriginalityOfIdeas">
15 <label for="Q_1_rb3" class="custom-control-label font-weight-normal">We could make it different and more engaging, but need to think about how. </label>
16 </div>
17 <div class="custom-control custom-radio">
18 <input class="custom-control-input" type="radio" id="Q_1_rb4" name="1" value="4" data-id="OriginalityOfIdeas">
19 <label for="Q_1_rb4" class="custom-control-label font-weight-normal">We could invite some guest artists to perform during the day of the event.</label>
20 </div>
21 <div class="custom-control custom-radio">
22 <input class="custom-control-input" type="radio" id="Q_1_rb5" name="1" value="5" data-id="OriginalityOfIdeas">
23 <label for="Q_1_rb5" class="custom-control-label font-weight-normal">We could invite ideas from students to showcase their unique talent not known to others.</label>
24 </div>
25 </div>
26 </div>
27 </div>
28</div>
29
30<div class="multisteps-form__content">
31 <div class="row ">
32 <div class="col-md-12 mt-3 align-items-center">
33 <div class="form-group">
34 <div class="custom-control custom-radio">
35 <input class="custom-control-input" type="radio" id="Q_2_rb1" name="2" value="2" data-id="Curiosity">
36 <label for="Q_2_rb1" class="custom-control-label font-weight-normal">Gather some information about them </label>
37 </div>
38 <div class="custom-control custom-radio">
39 <input class="custom-control-input" type="radio" id="Q_2_rb2" name="2" value="4" data-id="Curiosity">
40 <label for="Q_2_rb2" class="custom-control-label font-weight-normal">Know in detail about the diverse cultures </label>
41 </div>
42 <div class="custom-control custom-radio">
43 <input class="custom-control-input" type="radio" id="Q_2_rb3" name="2" value="3" data-id="Curiosity">
44 <label for="Q_2_rb3" class="custom-control-label font-weight-normal">Gather information from my team members</label>
45 </div>
46 <div class="custom-control custom-radio">
47 <input class="custom-control-input" type="radio" id="Q_2_rb4" name="2" value="5" data-id="Curiosity">
48 <label for="Q_2_rb4" class="custom-control-label font-weight-normal">Gather information from various sources </label>
49 </div>
50 <div class="custom-control custom-radio">
51 <input class="custom-control-input" type="radio" id="Q_2_rb5" name="2" value="1" data-id="Curiosity">
52 <label for="Q_2_rb5" class="custom-control-label font-weight-normal">Does not matter to me </label>
53 </div>
54 </div>
55 </div>
56 </div>
57</div>
58function getSelectedRadioButtonAmount(dataId) {
59 const arr = document.querySelectorAll(`[data-id=${dataId}]`);
60 return Array.from(arr).filter(x => x.checked).length
61}
62
63
64document.getElementById('find-button').addEventListener('click', () => {
65 const amount = getSelectedRadioButtonAmount('OriginalityOfIdeas');
66 console.log('number of selected radios', amount)
67
68})<div class="multisteps-form__content">
69 <button id="find-button">
70 Find checked radios
71 </button>
72
73 <div class="row ">
74 <div class="col-md-12 mt-3 align-items-center">
75 <div class="form-group">
76 <div class="custom-control custom-radio">
77 <input class="custom-control-input" type="radio" id="Q_1_rb1" name="1" value="1" data-id="OriginalityOfIdeas">
78 <label for="Q_1_rb1" class="custom-control-label font-weight-normal">The event should be organized in the same way as every year. </label>
79 </div>
80 <div class="custom-control custom-radio">
81 <input class="custom-control-input" type="radio" id="Q_1_rb2" name="1" value="3" data-id="OriginalityOfIdeas">
82 <label for="Q_1_rb2" class="custom-control-label font-weight-normal">We could introduce some Virtual Reality games. </label>
83 </div>
84 <div class="custom-control custom-radio">
85 <input class="custom-control-input" type="radio" id="Q_1_rb3" name="1" value="2" data-id="OriginalityOfIdeas">
86 <label for="Q_1_rb3" class="custom-control-label font-weight-normal">We could make it different and more engaging, but need to think about how. </label>
87 </div>
88 <div class="custom-control custom-radio">
89 <input class="custom-control-input" type="radio" id="Q_1_rb4" name="1" value="4" data-id="OriginalityOfIdeas">
90 <label for="Q_1_rb4" class="custom-control-label font-weight-normal">We could invite some guest artists to perform during the day of the event.</label>
91 </div>
92 <div class="custom-control custom-radio">
93 <input class="custom-control-input" type="radio" id="Q_1_rb5" name="1" value="5" data-id="OriginalityOfIdeas">
94 <label for="Q_1_rb5" class="custom-control-label font-weight-normal">We could invite ideas from students to showcase their unique talent not known to others.</label>
95 </div>
96 </div>
97 </div>
Community Discussions contain sources that include Stack Exchange Network
Tutorials and Learning Resources in Virtual Reality
Tutorials and Learning Resources are not available at this moment for Virtual Reality